这篇博客介绍的是2001年的一篇文章Active Contours Without Edges,作者是Tony Chan。这篇文章介绍了一种改进的active contour图像分割或者说轮廓检测方法。作者首先分析了已有的active contour/snakes模型的缺点。作者认为在相关的模型中,能量函数中的图像能量基本上都是定义在图像梯度上的,通过梯度达到最大(即边缘)来让曲线演化停止。但是这种模型检测不到比较光滑的边缘。所以作者提出采用另一种停止曲线演化的策略:Munford-Shah分割技术。
一个简单的例子引入能量函数
作者通过一个简单的例子引入自己的模型。现在我们先来看一下这个例子,从而直观感受到作者定义的能量函数在取得极小值时,对应的曲线就是我们希望得到的轮廓。首先说明一下下面将要用到的数学符号:
- Ω : R2 中的有界开子集
- u0 :从 Ω→R 的一个映射,这里表示图片
- C(s) :从 [0,1]→R2 的映射,表示曲线
- ω : Ω 中的开集,曲线 C 是其边界,即
C=∂ω
假设给定一张图片 u0 ,这张图片比较特殊,由两块区域构成,其中区域一所有的像素点取值都为 ui0 ,区域二中所有的像素点取值都为 uo0 。现在我们希望得到区域一的轮廓。考虑下面的”fitting”项(称为fitting应该是因为这个函数控制着曲线最终拟合至物体边缘停止):
F(C)=∫inside(C)|u0(x,y)−c1|2dxdy+∫outside(C)|u0(x,y)−c2|2dxdy(1)
其中常数 c1 和 c2 分别是曲线C内部像素点的均值和C外部像素点的均值。对于刚才介绍的特殊的图片,可以看出使得这个能量函数值最小的曲线C就是我们希望得到的区域一的轮廓,此时能量值为0(可以自行验证曲线C不是区域一轮廓的其他几种情况,对应的能量值都大于0)。
作者提出的模型其实就是上面的能量函数,另外还加上了曲线的长度、曲线内区域的面积等正则项:
F(C)=μ⋅Length(C)+