1 void meanFilter(BYTE* image, int width, int height, BYTE* outImg) 2 { 3     //均值滤波 4     int smth[9]; 5     int i, j, m, n; 6     BYTE block[9]; 7      8     // 高斯卷积核初始化 9     smth[0] = 1, smth[1] = 2, smth[2] = 1,10     smth[3] = 2, smth[4] = 4, smth[5] = 2,11     smth[6] = 1, smth[7] = 2, smth[8] = 1;12 13     int value;14     for (i = 0;i < 9;i++) //初始化均值卷积核15         smth[i] = 1;16 17     for (i = 0;i < height;i++) 18         for (j = 0;j < width;j++) {19             //将输出图像边缘的像素值设为 020             if (i == 0 || j == 0 || i == height - 1 || j == width - 1) 21                 outImg[i * width + j] = 0;22 23             //提取以当前像素为中心的 3x3 区域的像素值,然后利用卷积操作计算这个区域的均值,最后将计算得到的均值作为输出图像中对应位置的像素值24             else {25                 for (m = -1;m < 2;m++) 26                     for (n = -1;n < 2;n++) 27                         block[(m + 1) * 3 + n + 1] = image[(i + m) * width + j + n];28                 value = convolution(smth, block);29                 outImg[i * width + j] = BYTE(value / 9.0f); // 高斯为 value / 16.0f30             }31         }32 33 }34 35 36 int convolution(int* operatr, BYTE* block)37 {38     int value;39     int i, j;40     value = 0;41     //卷积运算42     //遍历 3x3 区域内的每个像素,并根据卷积核的权重计算出卷积结果43     for (i = 0;i < 3;i++) 44         for (j = 0;j < 3;j++) 45             value += operatr[i * 3 + j] * block[i * 3 + j];46     /*47     1 1 148     1 1 149     1 1 150 51     0 0 052     0 x y53     0 j k54     */55 56     return value;57 58 }  

低通滤波和直方图均衡核心点:按照一定的 权重 / 均分比例 处理 一定区域 / 数量上的像素点上的灰度级值。

总结:均值和高斯滤波(低通)的核心,创建卷积核并确定各个点上的权重,然后将边缘灰度级归零,提取非边缘像素点的3×3区域的像素级,最后计算卷积结果再输出。