转自:OpenCV 教程
另附:计算机视觉:算法与应用(2012),Learning OpenCV(2009)
平滑 也称 模糊, 是一项简单且使用频率很高的图像处理方法。平滑处理的用途有很多, 但是在本教程中我们仅仅关注它减少噪声的功用 (其他用途在以后的教程中会接触到)。平滑处理时需要用到一个 滤波器 。最常用的滤波器是 线性 滤波器。不妨把 滤波器 想象成一个包含加权系数的窗口,当使用这个滤波器平滑处理图像时,就把这个窗口滑过图像。
最简单的滤波器,输出像素值是核窗口内像素值的 均值 ( 所有像素加权系数相等)。
1 |
blur( src, dst, Size( i, i ), Point(-1,-1) ); |
最有用的滤波器 (尽管不是最快的)。 高斯滤波是将输入数组的每一个像素点与 高斯内核 卷积将卷积和当作输出像素值。
1 |
GaussianBlur( src, dst, Size( i, i ), 0, 0 ); |
中值滤波将图像的每个像素用邻域 (以当前像素为中心的正方形区域)像素的 中值 代替 。
1 |
medianBlur ( src, dst, i ); |
目前我们了解的滤波器都是为了 平滑 图像, 问题是有些时候这些滤波器不仅仅削弱了噪声, 连带着把边缘也给磨掉了。为避免这样的情形 (至少在一定程度上 ), 我们可以使用双边滤波。类似于高斯滤波器,双边滤波器也给每一个邻域像素分配一个加权系数。 这些加权系数包含两个部分, 第一部分加权方式与高斯滤波一样,第二部分的权重则取决于该邻域像素与当前像素的灰度差值。
详细的解释可以查看 链接。
1 |
bilateralFilter ( src, dst, i, i*2, i/2 ); |
形态学操作就是基于形状的一系列图像处理操作。通过将 结构元素 作用于输入图像来产生输出图像。最基本的形态学操作有二:腐蚀与膨胀(Erosion 与 Dilation)。 他们的运用有:
将图像 与任意形状的内核
(
),通常为正方形或圆形,进行卷积。内核
有一个可定义的 锚点,
通常定义为内核中心点。将内核
划过图像,将内核
覆盖区域的最大相素值提取,并代替锚点位置的相素。显然,这一最大化操作将会导致图像中的亮区开始”扩展”
(因此有了术语膨胀 dilation )。
将内核 划过图像,将内核
覆盖区域的最小相素值提取,并代替锚点位置的相素。相应地,暗区会开始“腐蚀”。
1
2
3
4
5
6 |
Mat element = getStructuringElement( dilation_type, Size( 2*dilation_size + 1, 2*dilation_size+1 ), Point( dilation_size, dilation_size ) ); dilate( src, dilation_dst, element ); erode( src, erosion_dst, element ); |
dilate和erode参数相同:
更直观的图参见此处。
通过先对图像腐蚀再膨胀实现的。能够排除小团块物体(假设物体较背景明亮)。
通过先对图像膨胀再腐蚀实现的。能够排除小型黑洞(黑色区域)。
膨胀图与腐蚀图之差,能够保留物体的边缘轮廓。
顶帽:原图像与开运算结果图之差
黑帽:闭运算结果图与原图像之差
1
2
3
4 |
Mat element = getStructuringElement( morph_elem, Size( 2*morph_size + 1, 2*morph_size+1 ), Point( morph_size, morph_size ) ); /// 运行指定形态学操作 morphologyEx( src, dst, operation, element ); |
参数列表:
OpenCV学习笔记(六) 图像处理,布布扣,bubuko.com
原文:http://www.cnblogs.com/ericxing/p/3577250.html