Opencv3 C++ VS2017 学习笔记 07 模糊图像

Blur 模糊


  • Smooth/Blur是图像处理中最简单的常用操作之一

    • 作用:图像预处理降低噪声
    • 原理:卷积计算\large g(i.j)=\sum_{k,l}f(i+k,j+l)h(k,l)

卷积算子都是线性操作,故线性滤波

  • 参考掩膜
    • 假设有6x6的图像像素点矩阵。
      • 卷积过程:6x6上面是个3x3的窗口,从左向右,从上向下移动,黄色的每个像个像素点值之和取平均值赋给中心红色像素作为它卷积处理之后新的像素值。每次移动一个像素格

显然周边一圈的像素是得不到新值的, 如何处理呢???

外部扩张,在矩阵外部新插入一圈新像素值,那么新像素值如何取值呢???

 

  • 均值滤波:无法克服边缘像素信息丢失缺陷,原因是均值滤波是基于平均权重, 权重都可以看成1

    • \large K=\frac{1}{K_{width}K_{height}}\begin{bmatrix} 1& 1& 1& ...& 1& \\ 1& 1& 1& ...& 1& \\ 1& 1& 1& ...& 1& \\ .& .& .& ...& 1& \\ .& .& .& ...& 1& \\ 1& 1& 1& 1& 1& \end{bmatrix}

    • API

      • blur(Mat src, Mat dst, Size(xradius, yradius), Point(-1,-1));   blur模糊

      • 参数:源图像,输出图像, filter的维度3*3or3*12等,point中心点一般不动

    • 模型

      • \large dst(x,y)=\sum_{0\leqslant x'<kernel.cols,0\leqslant y'<kernel.rows} kernel(x', y')*src(x+x'-anchor.x, y'-anchor.y)

  • 高斯滤波:无法完全避免边缘像素信息丢失缺陷,因为没有考虑像素值的不同

    • \large G_{0}(x,y)=Ae\frac{-(x-\mu _{x})^2}{2\sigma_{x}^2 }+\frac{-(y-\mu_{y})^2}{2\sigma_{y}^2 }

    • 类似正态分布, 只考虑空间位置,即靠近纵轴权重越大, 但没有考虑像素本身的数值大小

    • API 

      • GaussianBlur(Mat src, Mat dst, Size(11,11), sigmax, sigmay);  Size(x,y) x&y必须是正奇数

      • 参数:源图像,输出图像,filter维度,参数xy

模糊进阶


  • 中值滤波:统计排序滤波器

    • 使用场景: 椒盐噪声, 就是图片上多了几个黑白点

    • ,还可以参考左右两边max和min值, 中值滤波同上也是赋值给中间像素

    • 模型

    • API 

      • medianBlur(Mat src, Mat dst, ksize)

      •  

  • 双边滤波:高斯双边模糊 是边缘保留的滤波方法,避免了边缘信息丢失,保留了图像轮廓不变

    • 既考虑了空间分布,有考虑了数值大小

    • 模型

    • API

      • bilateralFilter(src, dst, d, sigmaColor,sigmaSpace)

      • 参数: 原图,输出图,计算半径(半径内的像素都会被纳入计算),

      • sigmaColor:值越大,颜色越宽广的像素将相互影响

      • sigmaSpace:值越大,越远的像素将相互影响

猜你喜欢

转载自blog.csdn.net/Mrsherlock_/article/details/104497495