来源:《OpenCV3编程入门》,怀念毛星云大佬🕯️
说明:本系列重点关注各种图像轮廓与图像分割修复方法的原理、作用
图像轮廓与图像分割修复
虽然Canny之类的边缘检测算法可以根据像素之间的差异,检测出轮廓边界的像素,但是它并没有将轮廓作为一个整体。所以,下一步便是把这些边缘像素组装成轮廓。
寻找物体的凸包
凸包
凸包(Convex Hull)是一个计算几何(图形学)中常见的概念。简单來说, 给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它是能包含点集中所有点的。理解物体形状或轮廓的一种比较有用的方法便是计算一个物体的凸包,然后计算其凸缺陷(convexity defects)。很多复杂物体的特性能很好地被这种缺陷表现出來。
如图8.9所示,我们用人手图来举例说明凸缺陷这一概念。手周围深色的线描画出了凸包,A到H被标出的区域是凸包的各个''缺陷"。正如看到的,这些 凸度缺陷提供了手以及手状态的特征表现的方法。
使用多边形将轮廓包围
在实际应用,常常会有将检测到的轮廓用多边形表示出來的需求。本节就为大家讲解如何用多边形来表示出轮廓,或者说如何根裾轮廓提取出多边形。先让我们一起学AI用OpenCV创建包闱轮廓的多边形边界时会接触到的一些函数。
图像的矩
矩函数在图像分析中有着广泛的应用,如模式识别、目标分类、目标识別与方位估计、图像编码与重构等。一个从一幅数字图形中计算出來的矩集,通常描述了该图像形状的全局特征 ,并提供了大量的关于该图像不同类型的几何特性信息 ,比如大小、位置、方向及形状等。图像矩的这种特性描述能力被广泛地应用在各种图像处理、计算机视觉和机器人技术领域的目标识别与方位估计中。一阶矩与形状有关 ,二阶矩显示曲线围绕直线平均值的扩展程度 ,三阶矩则是关于平均值的对称性的测量 。由二阶矩和三阶矩可以导出一组共7个不变矩。而不变矩是图像的统计特性,满足平移、伸缩、旋转均不变的不变性,在图像识别领域得到了广泛的应用。
分水岭算法
在许多实际运用中,我们需要分割图像,但无法从背景图像中获得有用信息。分水岭算法(watershedalgorithm)在这方面往往是非常有效的。此算法以将图像中的边缘转化成"山脉" ,将均匀区域转化为"山谷" ,这样有助于分割目标。
分水岭算法,是种基于拓扑理论的数学形态学 的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌 ,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆 ,而集水盆的边界则形成分水岭 。分水岭的概念和形成"可以通过模拟浸入过程来说明:在每一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸入水中,随着浸入的加深,每一个局部极小值的影响域慢慢向外扩展,在两个集水盆汇合处构筑大坝,即形成分水岭。
分水岭的计算过程是一个迭代标注过程 。分水岭比较经典的计算方法是由L.Vincent提出的。在该算法中,分水岭计算分两个步骤:一个是排序过程,一个是淹没过程。首先对每个像素的灰度级进行从低到髙的排序,然后在从低到高实现淹没的过程中,对每一个局部极小值在h阶高度的影响域采用先进先出(FIFO)结构进行判断及标注。分水岭变换得到的是输入图像的集水盆图像,集水盆之间的边界点,即为分水岭。显然,分水岭表示的是输入图像的极大值点 。
也就是说,分水岭算法首先计算灰度图像的梯度;这对图像中的"山谷"或没有纹理的"盆地"(亮度值低的点)的形成是很有效的,也对"山头"或图像中有主导线段的"山脉"(山脊对应的边缘)的形成有效。然后开始从用户指定点(或者算法得到点)开始持续"灌注"盆地直到这些区域连成一片。基于这样产生的标记就可以把区域合并到0---起,合并后的区域又通聚集的方式进行分割,好像图像被"填充"起来一样。
图像修补
在实际应用中.我们的图像常常会被噪声腐蚀,这些噪声或者是镜头上的灰尘或水滴,或者是旧照片的划痕,或者由于图像的部分本身己经损坏。而"图像修复"(Inpainting),就是妙手回春,解决这些问题的良方。图像修复技术简单来说,就是利用那些己经被破坏区域的边缘,即边缘的颜色和结构,繁殖和混合到损坏的图像中,以达到图像修补的目的。
示例图: