图像处理之中值滤波原理及C++实现
1. 中值滤波原理中值滤波算法以某像素的领域图像区域中的像素值的排序为基础,将像素领域内灰度的中值代替该像素的值[1];如:以3*3的领域为例求中值滤波中像素5的值int pixel[9]中存储像素1,像素2…像素9的值;对数组pixel[9]进行排序操作;像素5的值即为数组pixel[9]的中值pixel[4]。中值滤波对处理椒盐噪声非常有效。2. C++代码实现void medianFilte
·

1. 中值滤波原理
中值滤波算法以某像素的领域图像区域中的像素值的排序为基础,将像素领域内灰度的中值代替该像素的值[1];
如:以3*3的领域为例求中值滤波中像素5的值
- int pixel[9]中存储像素1,像素2…像素9的值;
- 对数组pixel[9]进行排序操作;
- 像素5的值即为数组pixel[9]的中值pixel[4]。
中值滤波对处理椒盐噪声非常有效。
2. C++代码实现
void medianFilter (unsigned char* corrupted, unsigned char* smooth, int width, int height)
{
memcpy ( smooth, corrupted, width*height*sizeof(unsigned char) );
for (int j=1;j<height-1;j++)
{
for (int i=1;i<width-1;i++)
{
int k = 0;
unsigned char window[9];
for (int jj = j - 1; jj < j + 2; ++jj)
for (int ii = i - 1; ii < i + 2; ++ii)
window[k++] = corrupted[jj * width + ii];
// Order elements (only half of them)
for (int m = 0; m < 5; ++m)
{
int min = m;
for (int n = m + 1; n < 9; ++n)
if (window[n] < window[min])
min = n;
// Put found minimum element in its place
unsigned char temp = window[m];
window[m] = window[min];
window[min] = temp;
}
smooth[ j*width+i ] = window[4];
}
}
}
3. 最后

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)