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];
}
}
}