一 中值滤波概念
中值滤波算法以某像素的领域图像区域中的像素值的排序为基础,将像素领域内灰度的中值代替该像素的值[1];
如:以3*3的领域为例求中值滤波中像素5的值
图1
1)int pixel[9]中存储像素1,像素2...像素9的值;
2)对数组pixel[9]进行排序操作;
3)像素5的值即为数组pixel[9]的中值pixel[4]。
中值滤波对处理椒盐噪声非常有效。
二 中值滤波代码实现
项目工程:https://github.com/ranjiewwen/Everyday_Practice/tree/master/MedianFilter/MedianFilter/MedianFilter
//中值滤波:本算法采用3*3的领域范围 void MyImage::MedianFilterOper() { //0. 准备:获取图片的宽,高和像素信息, int const num = 3 * 3; unsigned char pixel[num] = { 0 }; //保存领域的像素值 int width = m_bmpInfo.biWidth; int height = m_bmpInfo.biHeight; int widthbyte = (width * m_bmpInfo.biBitCount / 8 + 3) / 4 * 4; //保证为4的倍数 //相对于中心点,3*3领域中的点需要偏移的位置 int delta[3 * 3][2] = { { -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, -1 }, { 0, 0 }, { 0, 1 }, { 1, -1 }, {