如之前所述,我个人在这个栏目下的所有文章大都是拷贝,拷贝和粘贴,有需要请阅读原文:
OpenCV,OpenCV中文论坛,和Richard Szeliski写的Computer Vision: Algorithms and Applications。
这里谈谈我对OpenCV上平滑的理解:
就一幅数字图像来说,大多区域内都是较为平坦的,如果领域内有一两个点像素突然变化,一般认为是噪点。如果一些连续相近的点变化,认为是边缘。而滤波旨在消除噪声对于图像的影响,例如取中值或者均值不就能较好的消除椒盐噪声的影响吗?但是问题又来了,这样边缘的变化不就也被模糊了吗?所以就用到双边滤波(Bilateral Filter)。
首先一个函数式,如图1所示:
图1 平滑操作的理论基础
OpenCV上的几个列子:
一:中值滤波
中值滤波是用中值像素代替核内所有像素。
void medianBlur(InputArray src, OutputArray dst, int ksize)
ksize为正方形核大小,必须奇数(如果偶数中值在哪?)。
如果是多通道图像则每个通道单独滤波,同时支持原地(in_place)滤波。
二:归一化滤波:
用核内所有像素的均值替换核内所有像素值
blur( src, dst, Size( i, i ), Point(-1,-1)
size指定核大小,Point(-1,-1)指定锚点位置(我个人认为就是中心点),默认(-1,-1)是核的中心。
归一化滤波的加权公式,如图2所示:
图2 均值滤波的公式
三:高斯滤波:
公式如下图3所示:
图3 高斯滤波
那么高斯滤波干什么事呢?这里有两个链接大家可以看看:
http://www.cnblogs.com/pegasus/archive/2011/05/20/2052031.html
http://homepages.inf.ed.ac.uk/rbf/HIPR2/gsmooth.htm
四:最后就是双边滤波:
双边滤波就会很好的保留边缘信息,具体附上一个链接:
http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html