数学形态学!?!?!
mooc视频(较为系统的介绍):https://www.icourse163.org/learn/HDU-1461554161?tid=1464982447#/learn/content?type=detail&id=1243646733&cid=1267148615&replay=true
基本概念
- 形态学滤波器通常用于二值图像。且在形态学中,我们习惯用高像素值(白)表示前景物体,低像素值(黑)表示背景物体,因此对图像做了反向处理。(反向处理后的图像称为原二值图像的 补码 )
形态学滤波器 —— 腐蚀和膨胀
滤波器的作用范围是由结构元素定义的像素集。在某个像素上应用结构元素时,结构元素的锚点与该像素对齐,所有与结构元素相交的像素就包含在当前集合中。腐蚀 就是把当前像素替换成所定义像素集合中的最小像素值,膨胀 就是把当前像素替换成所定义像素集合中的最大像素值。
1 | int main() |
OpenCV 默认使用 3*3 正方形结构元素,将第三个元素指定为空矩阵。也可自定义正方形大小。
1 | // Erode the image with a larger SE |
除了改变结构元素的大小,还可以改变应用一个结构元素的次数。
1 | // Erode the image 3 times. |
Point(-1, -1)
表示原点是矩阵的中心点(默认),也可以定义在结构元素上的其他位置。
形态学滤波器 —— 开启和闭合图像
闭合 :对图像先膨胀后腐蚀
1 | // Close the image |
5*5 的结构元素
开启 :先腐蚀后膨胀
1 | // Open the image |
注:开启和闭合运算是 幂等 的,所以重复开启或者闭合是没有作用的。
应用形态学运算 —— 灰度图像
形态学梯度运算 可以提取出图像边缘。
1 | // Read input image (gray-level) |
顶帽变换 可以从图像中提取出局部的小型前景物体
1 | image = cv::imread("book.jpg", 0); |
分水岭算法 —— 图像分割
封装 WatershedSegmenter
类
1 |
|
步骤
读取
1 | // Read input image |
获得二值图像
1 | // Get the binary map |
做深度腐蚀运算,只保留明显属于前景物体的像素
1 | // Eliminate noise and smaller objects |
做大幅度膨胀,来选中一些背景像素
1 | // Identify image pixels without objects |
合并这两幅图,得到标记图像
1 | // Show markers image |
创建分水岭分割类对象 并 进行分割
1 | // Create watershed segmentation object |
以图像的方式返回分水岭
1 | // Display watersheds |
另一种方法
用户可以交互式地在场景中地物体和背景上绘制区域,以标注物体。
如这幅图,在边缘位置(背景)与 中心位置(前景)分别标记
1 | // Open another image |
MSER算法 —— 提取特征区域
MSER 最大稳定外部区域
1 | int main() |
检测结果放在两个容器里。第一个是区域地容器,每个区域用组成它的像素点表示;第二个是矩形的容器,每个矩形包围一个区域。为了呈现效果,创建一个空白图像,在图像上用不同的颜色显示检测到的区域。
1 | // create white image |
1 | // Extract and display the rectangular MSERs |
依据检测到的区域不能太细长(将封闭矩形旋转,计算高宽比),用封闭椭圆表示
1 | // Reload the input image |
- Post title:OpenCV (用形态学运算变换图像)
- Post author:Eva.Q
- Create time:2021-08-05 09:05:07
- Post link:https://qyy/2021/08/05/OPENCV/OPENCV1-9/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.