OpenCV图像滤波的数学原理
令输入图像对应的像素矩阵为,在第x行y列的像素值为
;输出图像对应的像素矩阵为
,在第x行y列的像素值为
。设图像滤波的核矩阵为
,在第
行
列位置的元素为
。则滤波后的图像
为原图像
与核
的卷积,满足以下关系式:
线性滤波
当锚点位于核的中心点时(anchor参数为默认的Point(-1,-1)),在第行
列的输出像素值
满足以下公式:
方框滤波/均值滤波
表达式
方框滤波和均值滤波的核是一致的,主要区别是要不要归一化处理。均值滤波就是方框滤波归一化后的特殊情况,核表示如下:
示例
举例说明,使用Size(3,1),即宽为3,高为1的核,核表示如下:
高斯滤波
高斯滤波表达式
高斯滤波的核服从当时的二维标准正态分布
。
公式为
高斯滤波的可乘性
特别的,当核的宽为1时,,高斯滤波的核服从一维正态分布
。此时高斯滤波的核公式为
高斯滤波与均匀滤波的关系
由于高斯滤波的独立性,我们可以研究一维高斯滤波与均值滤波的关系,从而推出二维条件下的关系。 我们可以发现,当高斯滤波的标准差,高斯滤波的核趋近于1,此时高斯滤波的结果就趋近于均值滤波的结果。在这个意义上,我们可以认为均值滤波是高斯滤波在标准差趋近于无穷大下的一个特例。
非线性滤波
非线性滤波没有统一公式,按具体滤波类型而定。
中值滤波
中值滤波比较简单,为在一定大小的核中取中间值。本文略过。
平方和滤波
平方和滤波的表达式
平方和滤波的表达式为
平方和滤波的非线性
平方和滤波在OpenCV中的接口为sqrBoxFilter,方框滤波在OpenCV中的接口为boxFilter,然而一个是非线性滤波,另一个是非线性滤波。平方和滤波在值域上没有叠加性,即对于任意两个同核区域的和
,
双边滤波
双边滤波的原理
双边滤波的原理见此篇文章:Bilateral Filtering for Gray and Color Images
基于高斯滤波的双边滤波
文章给出了基于高斯滤波的双边滤波情况(The Gaussian Case)。在该情况下,输出矩阵为
双边滤波的核性质
观察双边滤波的空间域核,可以发现其满足高斯滤波,因此图像有降噪的性质。值域核
,当选取点与原点的值越接近时,值域核趋近于1,该像素点的权重越大;当选取点与原点的值越远时,值域核趋近于0,该像素点的权重越小。因此双边滤波在保持图像边界上具有良好效果。需要注意的是,OpenCV提供的bilateralFilter函数中,有个入参d,表示邻域直径,这意味着对于上式中的任意
的选取,需要满足以下条件:
双边滤波示例
我们令