光之使者 发表于 2023-12-17 23:33:12

【C++】【图像处理】均值滤波和高斯滤波(低通滤波)算法解析(以.raw格式

1 void meanFilter(BYTE* image, int width, int height, BYTE* outImg)
2 {
3   //均值滤波
4   int smth;
5   int i, j, m, n;
6   BYTE block;
7   
8   // 高斯卷积核初始化
9   smth = 1, smth = 2, smth = 1,
10   smth = 2, smth = 4, smth = 2,
11   smth = 1, smth = 2, smth = 1;
12
13   int value;
14   for (i = 0;i < 9;i++) //初始化均值卷积核
15         smth = 1;
16
17   for (i = 0;i < height;i++)
18         for (j = 0;j < width;j++) {
19             //将输出图像边缘的像素值设为 0
20             if (i == 0 || j == 0 || i == height - 1 || j == width - 1)
21               outImg = 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 = BYTE(value / 9.0f); // 高斯为 value / 16.0f
30             }
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 * block;
46   /*
47   1 1 1
48   1 1 1
49   1 1 1
50
51   0 0 0
52   0 x y
53   0 j k
54   */
55
56   return value;
57
58 } 
低通滤波和直方图均衡核心点:按照一定的 权重 / 均分比例 处理 一定区域 / 数量上的像素点上的灰度级值。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【C++】【图像处理】均值滤波和高斯滤波(低通滤波)算法解析(以.raw格式