图像处理(一):平滑滤波

平滑处理,有时也称模糊处理,是图像处理领域最常用的操作。平滑的目的主要是用来去除噪声。通常平滑操作是通过卷积操作(注:实际上是相关操作,后面的叙述对这两个操作不加区分)完成。下面介绍几种常用的平滑滤波操作。

均值滤波

  • 均值滤波是最简单的一种滤波操作,每个被滤波像素通过它邻近像素均值计算得到。

  • 均值滤波的kernel如下:

     

     

高斯滤波

  • 高斯滤波的核是通过高斯函数构建,越靠近中心的像素的值越大,这也反映了图像空域间关系,越邻近的像素相关性越强。

  • 二维高斯函数如下:

     

     

中值滤波

  • 以kernel里像素的中值作为被滤波后像素的值。

  • 中值滤波法是一种非线性平滑技术。

  • 中值滤波法对消除椒盐噪音非常有效。

双边滤波

  • 上面的滤波方法在平滑图像时不仅会平滑噪声,往往还会模糊图像边缘。这是由于它们构造kernel时只用了空间位置信息。

  • 双边滤波构造kernel不仅使用空间位置信息,还会使用颜色信息。

在opencv里提供了各种滤波器的调用接口,代码如下:

#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
​
int main()
{
    namedWindow("Smoothing Demo", WINDOW_AUTOSIZE);
    Mat src = imread("G:\\opencvDemo\\lena.jpg");
    Mat blurImg;
    Mat gaussianImg;
    Mat medianImg;
    Mat bilteralImg;
    Mat boxImg;
    Mat filter2DImg;
​
    blur(src, blurImg, Size(5, 5));
    boxFilter(src, boxImg, -1, Size(5, 5), Point(-1, -1), true);
    GaussianBlur(src, gaussianImg, Size(5, 5),0,0);
    medianBlur(src, medianImg, 5);
    bilateralFilter(src, bilteralImg, 5, 10, 2.5);
    
    Mat kernal = Mat::ones(Size(5, 5), CV_8UC1);
    filter2D(src, filter2DImg, -1, kernal);
    
    //imshow("Smoothing Demo", bilteralImg);
    imwrite("blurImg55.jpg", blurImg);
    imwrite("boxImg55.jpg", boxImg);
    imwrite("gaussianImg55.jpg", gaussianImg);
    imwrite("medianImg55.jpg", medianImg);
    imwrite("bilteralImg55.jpg", bilteralImg);
    imwrite("filter2DImg55.jpg", filter2DImg);
    //waitKey(0);
​
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值