原理是数学的卷积:
[{ m{g}}left( {i,j} ight) = sumlimits_{{ m{k}},l} {fleft( {i + k,j + l} ight)} hleft( {k,l} ight)]
$hleft( {k,l} ight)$是卷积算子,窗口大小,一般为线性操作,$fleft( {i,j} ight)$是图像的像素。
卷积过程:6x6上面是个3x3的窗口为卷积算子,从左向右,从上向下移动,黄色的每个像个像素点值之和取平均值赋给中心红色像素作为它卷积处理之后新的像素值。每次移动一个像素格。在卷积过程中边缘的像素无法处理,对边缘效果不是很好。滤波的作用主要是将图像处理的更加平滑。
均值滤波:
[K = frac{1}{{{{
m{k}}_w} ullet {{
m{k}}_{
m{h}}}}}left[ {egin{array}{*{20}{c}}
1&1&1&{...}&1\
1&1&1&{...}&1\
.&.&.&{...}&1\
.&.&.&{...}&1\
1&1&1&{...}&1
end{array}}
ight]]
高斯滤波:为正态分布曲线,属于权重滤波
$${G_0}(x,y) = A{e^{frac{{ - {{left( {x - {mu _x}} ight)}^2}}}{{2sigma _x^2}} + frac{{ - {{left( {y - {mu _y}} ight)}^2}}}{{2sigma _y^2}}}}$$
以下是两种模糊的图片效果:第一幅为原图,第二幅为均值模糊,第三幅为高斯模糊。
中值滤波:中值对椒盐噪声有很好的抑制作用,说通俗点就是卷积核内的像素值重新排序,将中间值取出来去替换中心点的像素值。
下图为中值滤波处理后的结果,将车身玻璃的斑点去掉。
均值模糊无法克服边缘像素信息丢失缺陷,它是基于平均权重的模糊,高斯模糊部分克服了该缺陷,但是无法完全避免,因为没有考虑像素值的不同因此提出了双边滤波,是一种边缘保留的滤波方法,避免了边缘信息丢失,保留了图像轮廓不变。
相关函数如下:
创建用于形态学操作的结构元素:Mat struct = getStructuringElement(MORPH_RECT, Size(3,3), Point(-1,-1));
//Point(-1,-1)默认自动寻找区域中心,参数一有MORPH_RECT MORPH_CROSS MORPH_ELLIPSE等几种区域形状。
均值滤波:blur(Mat src, Mat dst, Size(xradius, yradius), Point(-1,-1)); Size(xradius, yradius) //为卷积算子的像素块大小,必须为正奇数,Point(-1,-1)为卷积算子窗口中心;
高斯滤波:GaussianBlur(Mat src, Mat dst, Size(11, 11), sigmax, sigmay,BORDER_DEFAULT);
//Size必须为正奇数,x和y可以不同那个大决定着向哪个方向模糊, //sigmax, sigmay为正态分布函数的参数,最好为奇数。如果为0,0,则根据Size()的大小自动计算sigmax, sigmay, BORDER_DEFAULT为边界处理的方式。 中值滤波:medianBlur(src, dest, ksize); //ksize为获取周围像素的内核大小,必须为大于1的奇数 双边滤波:bilateralFilter(src, dest, 15, 150, 3); //将中值和高斯进行了有效的结合。15为像素邻域的直径,当设为-1时,会自动计算3这个坐标空间中滤波器的simga值, //150为颜色空间滤波器的sigma值,此值越大平滑的强度越大,图像的不连续性越显著。