美文网首页
OpenCV图像处理(六)图像滤波(1)

OpenCV图像处理(六)图像滤波(1)

作者: 行走行囊 | 来源:发表于2018-04-07 21:03 被阅读0次

    1、滤波的作用

    图像滤波,是指尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,其处理的好坏直接影响到后续图像处理的有效性和可靠性。滤波操作也叫平滑处理,主要目的有两个:模糊图像和消除噪音。

    2、滤波的方式

    均值滤波:最简单的一种滤波操作,输出图像的每一个像素是核窗口内输入图像对应像素的平均值(所有像素的加权系数相等)。
    高斯滤波:高斯滤波可以消除高斯噪声,其操作原理是用一个模板,该模板的加权系数通过高斯函数确定,再用这个模板对图像的每个像素进行卷积操作,得到滤波后的图像。
    中值滤波:其基本思想是用像素点领域灰度值的中值来代替该像素点的灰度值,可有效的去除椒盐噪声。
    双边滤波:双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值的相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。注意,双边滤波对处理彩色图像的椒盐噪声效果不明显。

    3、滤波函数

    // 均值滤波
    void blur( InputArray src, OutputArray dst,
                            Size ksize, Point anchor = Point(-1,-1),
                            int borderType = BORDER_DEFAULT );
    // 高斯滤波
    void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
                                    double sigmaX, double sigmaY = 0,
                                    int borderType = BORDER_DEFAULT );
    // 中值滤波
    void medianBlur( InputArray src, OutputArray dst, int ksize );
    // 双边滤波
    void bilateralFilter( InputArray src, OutputArray dst, int d,
                                       double sigmaColor, double sigmaSpace,
                                       int borderType = BORDER_DEFAULT );
    

    4、测试代码

    // 添加椒盐噪声
    void addSalt(Mat& image, int n)//本函数加入彩色盐噪声  
    {
        srand((unsigned)time(NULL));
        for (int k = 0; k<n; k++)//将图像中n个像素随机置零  
        {
            int i = rand() % image.cols;
            int j = rand() % image.rows;
            //将图像颜色随机改变  
            image.at<Vec3b>(j, i)[0] = 250;
            image.at<Vec3b>(j, i)[1] = 150;
            image.at<Vec3b>(j, i)[2] = 250;
        }
    }
    
    src.png

    均值滤波

    Mat src = imread("D:/hf.jpg");
    Mat blur_img;
    blur(src,blur_img,Size(5,5));
    imshow("blur_img", blur_img);
    
    blur_img.png

    高斯滤波

    Mat src = imread("D:/hf.jpg");
    Mat gaussianBlur_img;
    GaussianBlur(src, gaussianBlur_img,Size(5,5),0,0);
    imshow("gaussianBlur_img", gaussianBlur_img);
    
    gaussianBlur_img.png

    中值滤波

    Mat src = imread("D:/hf.jpg");
    Mat mid_img;
    addSalt(src, 1000);
    medianBlur(src,mid_img,5);
    imshow("mid_img", mid_img);
    
    椒盐处理.png mid_img.png

    双边滤波

    Mat src = imread("D:/hf.jpg");
    Mat bilateralFilter_img;
    bilateralFilter(src, bilateralFilter_img, 25, 25 * 2, 25 / 2);
    imshow("bilateralFilter_img",bilateralFilter_img);
    

    相关文章

      网友评论

          本文标题:OpenCV图像处理(六)图像滤波(1)

          本文链接:https://www.haomeiwen.com/subject/qaincftx.html