欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

图像处理_高斯滤波

程序员文章站 2022-05-28 14:22:32
...
int TempltExcuteAsh(BYTE** imageBuf0, int w, int h, int* templt, int tw, int x, int y)
{
	int i, j;
	int m = 0;
	int px, py;
	//依次对邻域中每个像素进行运算
	for (i = 0; i < tw; i++){
		for (j = 0; j < tw; j++){
			//计算对应模板上位置的像素在源图像中的位置, 此处tw是int,则tw/2也是int
			py = y - (int)tw / 2 + i;
			px = x - (int)tw / 2 + j;
			//加权求和
			m += imageBuf0[py][px] * templt[i * tw + j];
		}
	}
	return m;
}
void SmoothGaussAsh(BYTE* image0, BYTE* image1, UINT w, UINT h)
{
	BYTE** imageBuf0 = CreateImage(image0, w, h);
	BYTE** imageBuf1 = CreateImage(image1, w, h);
	int templt[9] = { 1, 2, 1, 2, 4, 2, 1, 2, 1 };
	int x, y;
	int a;
	int scale;//衰减因子
	scale = 16;
    //边界处理,去掉图像一个像素的边缘
	for (y = 1; y < h - 1; y++){
		for (x = 1; x < w - 1; x++){
			a = TempltExcuteAsh(imageBuf0, w, h, templt, 3, x, y);
			a /= scale;
			//过限处理
			a = a > 255 ? 255 : a;
			a = a < 0 ? 0 : a;
			imageBuf1[y][x] = a; 
		}
	}
	free(imageBuf0);
	free(imageBuf1);
}

高斯滤波/高斯平滑

注意过限处理和边界处理