图像处理_高斯滤波
程序员文章站
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);
}
高斯滤波/高斯平滑
注意过限处理和边界处理
上一篇: Python 学习笔记-第10讲:面向对象-封装、继承与多态
下一篇: 图像处理_Canny算法