上次提到产生高斯噪声的算法,我们知道,椒盐噪声是可以通过中值滤波来修复的,高斯噪声也可以通过均值滤波来还原。 顾名思义,均值滤波也是构建一个 n*n 的模板,然后取其平均值来替代模板中间的值。这样做出的效果明显不如用中值滤波修复椒盐噪声的效果好,不过当 n 取很大值的时候,图片看起来像是高斯模糊,不知道是不是一个原理…… 看效果,n=3 时: n=11 时: 算法更加简单,有以前的基础不成问题: BmpPixmap & BmpPixmap::mean_filter (int n) { assert (n >= 3 && n % 2);int ii, jj, nn, sum [3]; BmpPixmap *temp = new BmpPixmap (*this); for (i = n / 2; i < height - n / 2; i++) { for (j = n / 2; j < width - n / 2; j++) { for (nn = 0; nn < 3; nn++) { sum [nn] = 0; } /*----------------------------------------------------------------------------- * Calculate the average of the model. *-----------------------------------------------------------------------------*/ for (ii = i - n / 2, nn = 0; ii <= i + n / 2; ii++) { for (jj = j - n / 2; jj <= j + n / 2; jj++, nn++) { sum [0] += pdata [ii][jj]->get_blue (); sum [1] += pdata [ii][jj]->get_green (); sum [2] += pdata [ii][jj]->get_red (); } } temp->pdata [i][j]->set (sum [0] / (n * n), sum [1] / (n * n), sum [2] / (n * n)); } } return *temp; } /* ----- end of method BmpPixmap::mean_filter ----- */