OpenCV3编程入门-读书笔记3-滤波

一、领域滤波(卷积)

邻域算子值利用给定像素周围像素的值决定此像素的最终输出。如图左边图像与中间图像卷积得到右边图像。目标图像中绿色的像素由原图像中蓝色标记的像素计算得到。

通用线性邻域滤波是一种常用的邻域算子,输入像素加权得到输出像素:

其中权重核   为“滤波系数”。上面的式子可以简记为:

二、线性滤波

1、方框滤波(box Filter)

最简单的线性滤波是移动平均或方框滤波,用 K*K窗口中的像素值平均后输出,核函数为:

 

其实等价于图像与全部元素值为1的核函数进行卷积再进行尺度缩放。

下面提到的 blur 和 boxFilter 的区别是,blur是标准化后的 boxFilter,即boxFilter的核函数:

 

函数原型:

void boxFilter( InputArray src, OutputArray dst, int ddepth,Size ksize, Point anchor = Point(-1,-1),bool normalize = true,int borderType = BORDER_DEFAULT );

(1)参数src:输入图像

(2)参数dst:输出图像,和src有一样的大小和类型

(3)ddepth:输出图像的深度。“-1”代表使用原图深度

(4)ksize:内核大小,一般用Size(w,h)的写法来表示内核的大小,w和h必须为奇数

(5)anchor:锚点,默认Point(-1,-1)表示取核的中心为锚点

2、均值滤波(blur)

函数原型:

void blur( InputArray src, OutputArray dst,Size ksize, Point anchor = Point(-1,-1),int borderType = BORDER_DEFAULT );

3、高斯滤波(GaussianBlur)

高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。它对去除服从正态分布的噪声很有效。
常用的零均值离散高斯滤波器函数:

2D图像中表示为:

函数原型:

void GaussianBlur( InputArray src, OutputArray dst, Size ksize,double sigmaX, double sigmaY = 0,int borderType = BORDER_DEFAULT );

三、非线性滤波

线性滤波易于构造,且易于从频率响应的角度分析,但如果噪声是散粒噪声而非高斯噪声时线性滤波不能去除噪声。如图像突然出现很大的值,线性滤波只是转换为柔和但仍可见的散粒。这时需要非线性滤波。

1、中值滤波

中值滤波选择每个邻域像素的中值输出

函数原型:

void medianBlur( InputArray src, OutputArray dst, int ksize );

2、双边滤波

双边滤波的思想是抑制与中心像素值差别太大的像素,输出像素值依赖于邻域像素值的加权合:

函数原型:

void bilateralFilter( InputArray src, OutputArray dst, int d,double sigmaColor, double sigmaSpace,int borderType = BORDER_DEFAULT );

 

 

示例:

 1 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\test.jpg");
 2     
 3 imshow("srcImage", srcImage);
 4 
 5 Mat boxImage;
 6 boxFilter(srcImage, boxImage, -1, Size(3, 3));
 7 
 8 Mat blurImage;
 9 blur(srcImage, blurImage, Size(3, 3));
10 
11 Mat gaussImage;
12 GaussianBlur(srcImage, gaussImage, Size(3, 3), 0, 0);
13 
14 Mat medianImage;
15 medianBlur(srcImage, medianImage, 7);
16 
17 Mat bilateralImage;
18 bilateralFilter(srcImage, bilateralImage, 25, 25 * 2, 25 / 2);
19 
20 imshow("boxImage", boxImage);
21 imshow("blurImage", blurImage);
22 imshow("gaussImage", gaussImage);
23 imshow("medianImage", medianImage);
24 imshow("bilateralImage", bilateralImage);
25 waitKey(0);

 

参考:http://blog.csdn.net/xiaowei_cqu/article/details/7785365

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值