1、中值滤波
中值滤波是对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心象素的原来灰度值,它是一种非线性的图像平滑法,它对脉冲干扰级椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效保护边缘少受模糊。
二维中值滤波算法是:对于一幅图像的象素矩阵,取以目标象素为中心的一个子矩阵窗口,这个窗口可以是3*3 ,5*5 等根据需要选取,对窗口内的象素灰度排序,取中间一个值作为目标象素的新灰度值。
步骤:
1:通过从图像中的某个采样窗口取出奇数个数据进行排序
在这里,我们选用的排序方法是冒泡排序
2:用排序后的中值取代要处理的数据即可
一般的,中值滤波对图像的边界用0做扩张,所以对边界可能会出现扭曲。在这里,我对边界进行了填充,用里圈的值来填充外圈的值。若要用0填充外圈,可将imagedatafilter初始化为0:
memset(imagedatafilter,0,linebyte*bmpHeight);
如果这样,那填充的那个循环就可以去掉不要了,具体代码如下:
#include <cstring>
#include <windows.h>
#include"readbmp.h"
#include"savebmp.h"
#include<assert.h>
#define iFilterW 3
#define iFilterH 3
unsigned char GetMedianNum(int