一、均值濾波概念
1 鄰域

2.卷積
如上圖所示,是通過對目標像素的鄰域進行加權得到新的目標像素的值,其中這個加權矩陣我們叫做鄰域算子(局部算子)。

其中g(x, y)就是我們濾波后希望得到的函數,h(x, y)就是鄰域算子,f(x, y)就是原圖。那么有公式可以表示:

3 均值濾波原理
均值濾波其實就是對目標像素及周邊像素取平均值后再填會目標像素來實現濾波目的的方法。

Mat blur(Mat& img) { if (img.data) { int height = img.rows; int width = img.cols; int channel = img.channels(); Mat out = Mat::zeros(height, width, img.type()); int count = 0; int sum = 0; int pad = floor((double)kernel_size / 2); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { for (int c = 0; c < channel; c++) { sum = 0; for (int dy = -pad; dy < pad + 1; dy++) { for (int dx = -pad; dx < pad + 1; dx++) { if ((y - pad > 0) && (x - pad) > 0 && (y + pad) < height && (x + pad) < width) sum += (int)img.at<Vec3b>(y+dy, x+dx)[c]; } } sum /= (kernel_size*kernel_size); out.at<Vec3b>(y, x)[c] = (uchar)sum; } } } return out; } }
