5.均值滤波

一、均值滤波概念

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

      

原文地址:https://www.cnblogs.com/xingyuanzier/p/13274322.html