本文为
http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/RAMANI1/node31.html的翻译。
针对图像分割问题,Kass提出了一种算法。他对可以在存在噪声和其他模糊的情况下仍能识别相似对象的基于模型的技术非常感兴趣。1987年Kass提出了snake的概念,snake是一种active contour model(注:下面把这个术语翻译成活动轮廓模型),使用”an energy minimizing spline guided by external constraint forces and influenced by image forces that pull it towards features such as lines and edges.”snakes在处理如边缘检测、角点识别、动态跟踪以及立体匹配等任务上非常成功。
样条(spline)是用于描述或者估计曲线或者曲面的多项式或者一组多项式。尽管组成样条的多项式可以是任意阶的,但最常用的是三次多项式。例如,简单的二维曲线可以由下面一对三次方程近似:
x(u)=axu3+bxu2+cxu+dx
y(u)=ayu3+byu2+cyu+dy
高阶多项式有我们不想要的非局部属性。对复杂形状,可以通过放置结(也称控制点)来将其分解成具有较少拐点的小区域。在上面的方程中,变量u称为样条参数,一般取值范围为[0,1]。因为三次多项式最多有两个拐点,复杂形状需要被分解成至多两个拐点的更简单的段。尽管系数a, b , c, d唯一地确定样条的形状,但是通常不直接指定。而是从其他约束计算,比如在相邻多项式段之间的边界点处的零阶、一阶、二阶导数的连续性。 【计算机视觉|计算机视觉之图像分割——Snake模型(1译文)】
snakes属于活动轮廓模型是因为它们在搜索能量最小状态的过程中动态地改变自身的形状和位置。一个二维的动态轮廓v可以根据其x 和y坐标来定义,x 和y又由线性参数s 和时间参数t来定义:
v(s,t)=(x(s,t),y(s,t))
其中s∈ω,一般定义成比区间[0,1]。而t∈T,一般定已成半开区间[0, \infty]。最小化样条能量的系数可以通过最优化或者微分找到。
在Kass的原模型中,一个snake的总能量由三个子项组成:
Etotal=12∫ω[Einternal+Eimage+Econstraint]
其中Einternal是样条的内部能量,仅仅取决于样条的形状。Eimage是图像能量,只取决于在样条路径上的图像强度值。Econstraint是约束能量,由用户或者高级控制代理施加的人工能量场创建的。也可以定义其他能量项,但本文只讨论这三项。
内部能量定义成:
Einternal=α|?v?s|2+β|?2v?s2|
其中α控制snake的伸展,β控制snake的弯曲。大的α值会增加snake的内部能量,因为snake伸展地越来越多,而小值使得能量函数对伸展量不敏感。类似地,β的值大时会增加snake的内部能量,因为出现更多曲线,而值小时,会使得能量函数对snake中的曲线不敏感。α和β值都小时,对snake的大小和形状的限制减少。
图像能量定义成:
Eimage=ω1I(x,y)+ω2|?I(x,y)|2+?
其中ω1是线系数,ω2是边系数。当ω1为正的且值大时,倾向于让snake和图像中的dark区域对齐;为负且值大时,倾向于让snake和图像中的brigth区域对齐;绝对值比较小时,使得snake对图像中的强度值不敏感。类似地,ω2为正、大值时,使得snake和图像中的锐利边缘对齐;为负、大时,使得snake避免这些边缘;绝对值比较小时,使得snake和图像中的边无关。
约束能量定义:
Econstraint=?Σiki(x1i?x2i)+Σjmax(peakj,1rj)
其中ki项是外部弹簧因素,ri项称为火山因素。当ki为大值时,使得snake表现的好像有弹簧连接着图像上的一点(x1i)和snake上的一点(x2i),ki越大弹簧的力量越大。ri项被称为火山,是因为max(peakj,1rj)的图类似于对称火山的轮廓。
计算上,火山项充当着距离snake上的点rj长的图像点的排斥力,peakj的值越大,排斥力越强。弹簧和火山是捕捉图像高层次知识以及图像特征的一种方法。
通过内部能量力和图像能量力,snake会以自动地方式找到希望的图像特征。用户可以交互地设置弹簧力以限制snake操作的区域。用户也可以设置火山力来定义snake应该避免的区域。
snake相对于经典的特征提取方法有以下优点:
- 通过正确放置的弹簧和火山可以以交互方式控制snake
- 容易操控,因为图像力是以直观的方式表现
- 在寻找最小能量状态的时候它们是自主的和自适应的
- 可以通过在图像能量函数中加入高斯平滑而对图像尺度敏感
- 可以用于跟踪时间或者空间维度上的动态目标
- 初始位置不同使得结果不同
- 经常陷入局部最小状态,这也许可以通过使用模拟退火技术来克服,代价就是计算时间增加
- 在最小化整个轮廓路径上的能量过程中经常忽略微小特征
- 精度由能量最小化技术中使用的收敛标准控制;更高的精度要求更严格的收敛标准,因此需要更长的计算时间。
推荐阅读
- python|总结|图像分割5大经典方法
- 激光条纹中心提取|opencv二值图像分割——python
- 目标检测|yolov5——detect.py代码【注释、详解、使用教程】
- 计算机视觉|平均池化和最大池化分别适用于什么场景呢()
- 激光条纹中心提取|激光条纹中心提取——灰度重心法
- 计算机视觉|斯坦福大学计算机视觉课程cs231n——第一课(课程介绍 计算机视觉概述)
- keras|OpenCV-Python实战(22)——使用Keras和Flask在Web端部署图像识别应用
- yolo|YOLO V5解读
- 光场|光场资料收集(转)