OpenCV - 图片模糊

文章目录[x]
  1. 1:Opencv中的点和颜色
  2. 1.1:cv::Point
  3. 1.2:cv::Scalar
  4. 2:归一化和值滤波(均值滤波)
  5. 2.1:在OpenCv中的API
  6. 3:高斯滤波
  7. 3.1:在OpenCv中的API
  8. 4:中值滤波
  9. 4.1:在OpenCv中的API
  10. 5:双边滤波
  11. 5.1:在OpenCv中的API
  12. 6:所有图像处理效果

    Smooth/Blur是图像中最简单的和常用的操作之一,使用该操作的原因之一是为了给图像预处理时降低噪点,其背后就是数学的卷积计算。通常这些卷积算子计算都是线性操作,所以又叫线性滤波。该OpenCV系列会先在Github repo和相关代码一起提交。该篇文章的代码位于该文件下,笔记位于该文件。(由于DNS污染问题,可能无法看见图片,需要自己更改hosts)。

假如有6x6的图像像素点矩阵。 卷积过程:6x6上面是个3x3的窗口,从左到右,从上向下移动,黄色的每个像素点值之和取平均值赋给中心红色像素作为它卷积处理之后的新的像素值。每次平移一个像素格。在处理完成一行后,向下移动处理第二行。如果用 3x3的矩阵,边缘像素第一行第一列和最后一行最后一列并不能进行卷积。

Opencv中的点和颜色

cv::Point

Point p1;
p1.x = 10;
p1.y = 20;

p1 = Point(10,8);

cv::Scalar

Scalar表示四个元素的向量,灰色图像可以只声明一个。

Scalar(a,b,c);

BGR 3通道时,a为blue,b为green,c为red

归一化和值滤波(均值滤波)

上面介绍到的卷积过程就是均值滤波,它的公式如下:

在OpenCv中的API

void blur( InputArray src, OutputArray dst,Size ksize, Point anchor = Point(-1,-1),int borderType = BORDER_DEFAULT );
  • src :原图像 ;
  • dst :输出图像 ;
  • ksize :窗口的大小 ;
  • anchor : 中心像素 ;

高斯滤波

通常用它来减少图像噪声以及降低细节层次。这种模糊技术生成的图像,其视觉效果就像是经过一个半透明屏幕在观察图像,这与镜头焦外成像效果散景以及普通照明阴影中的效果都明显不同。高斯平滑也用于计算机视觉算法中的预先处理阶段,以增强图像在不同比例大小下的图像效果(参见尺度空间表示以及尺度空间实现)。 从数学的角度来看,图像的高斯模糊过程就是图像与正态分布做卷积。由于正态分布又叫作“高斯分布”,所以这项技术就叫作高斯模糊。图像与圆形方框模糊做卷积将会生成更加精确的焦外成像效果。由于高斯函数的傅立叶变换是另外一个高斯函数,所以高斯模糊对于图像来说就是一个低通滤波器,其公式如下:

在OpenCv中的API

void GaussianBlur( InputArray src, OutputArray dst, Size ksize,double sigmaX, double sigmaY = 0,int borderType = BORDER_DEFAULT );
  • src :原图像 ;
  • dst :输出图像 ;
  • ksize :窗口的大小,其中的 x,y必须为正数奇数 ;
  • sigmaX :X方向上的高斯核标准偏差。
  • sigmaY :Y方向上的高斯核标准偏差。

中值滤波

在图像处理中,在进行如边缘检测这样的进一步处理之前,通常需要首先进行一定程度的降噪。中值滤波是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的噪声。这个设计思想就是检查输入信号中的采样并判断它是否代表了信号,使用奇数个采样组成的观察窗实现这项功能。观察窗口中的数值进行排序,位于观察窗中间的中值作为输出。然后,丢弃最早的值,取得新的采样,重复上面的计算过程。

在3x3的矩阵中,我们对其进行排序,然后将中间值150替换为排序后的中位值124然后再求平均值,然后继续向后移动。如果我们将150替换为排序后的最大值或最小值,就叫做最小值滤波和最大值滤波。

  中值滤波是图像处理中的一个常用步骤,它对于斑点噪声和椒盐噪声来说尤其有用。保存边缘的特性使它在不希望出现边缘模糊的场合也很有用。

带有椒盐噪声的图像
 中值滤波后的图像

在OpenCv中的API

void medianBlur( InputArray src, OutputArray dst, int ksize );
  • src :原图像 ;
  • dst :输出图像 ;
  • ksize :窗口的大小,必须大于1且为奇数 ;

双边滤波

均值模糊无法克服边缘像素信息丢失缺陷,原因是均值滤波是基于平均权重。高斯模糊部分克服了该缺陷,但是无法完全避免,因为没有考虑像素值的不同。 高斯双边模糊-是边缘保留的滤波方法,避免了边缘信息的丢失,保留了图像轮廓不变。

双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、非迭代、局部的特点  。双边滤波器的好处是可以做边缘保存,一般过去用的维纳滤波或者高斯滤波去降噪,都会较明显地模糊边缘,对于高频细节的保护效果并不明显。双边滤波器顾名思义比高斯滤波多了一个高斯方差sigma-d,它是基于空间分布的高斯滤波函数,所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波

注意:仅仅支持单通道和三通道图片 ;

在OpenCv中的API

void bilateralFilter( InputArray src, OutputArray dst, int d,double sigmaColor, double sigmaSpace,int borderType = BORDER_DEFAULT );
  • src :原图像 ;
  • dst :输出图像 ;
  • d :计算的半径,半径之内的像素都会被纳入计算,如果提供-1则根据sigmaSpace参数取值 ;
  • sigmaColor : 决定多少差值之内的像素会被计算 ;
  • sigmaSpace : 如果d的值大于0则声明无效,否则根据它的值来计算d值

所有图像处理效果

 

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00