Demo Video:
注:图片来自[2]
作者:@Mapupcal
前言:
智能剪刀算法(Intelligent Scissors)是由Eric N. Mortensen和William A. Barrett于1995年提出来的一种图像分割的交互算法,可以用于2D图像分割,论文见[1][2]。
该算法可以用于辅助用户精确地勾勒出感兴趣的区域。
其可以在运行时快速地定位到该图像区域的边缘上,通过与用户交互,更精确地完成整个感兴趣区域的勾画、分割。(如上图所示)
算法理论基础:
①将图像转换成一个庞大的加权有向图。
②在运行时,通过特定的寻路算法,在出发点[a]开始,寻找一条最优路径,该路径通往用户指定的目标点[b]。
[a] 论文中为种子点,SeedPoint,为了和论文相对应,以下均使用SeedPoint,下同。
[b] 论文中为自由点,FreePoint.
注:智能剪刀算法的核心在于①,论文[1][2]着重讨论了如何确定加权有向图的边权重。
注:关于②,论文也提供了相应的算法实现,论文当中的算法就是Dijkstra最短路径搜索算法的一种变种。
将图像变成一个庞大的加权有向图:
① 图像中每个像素,在加权有向图中都将成为该图中的一个结点Node。
② 相邻的像素,互相之间存在一条加权有向边。
③ 确定每条加权有向边的权重。
注:在内存表示加权有向图的方式有很多,有每个节点基于顺序容器存放有向边的方式,也有基于矩阵的方式。在实现中,为了数据的局部性,本文采用了基于矩阵的方式去实现可提高性能。
对于某一个非边界像素p,其有八个邻居像素,如:
当转换成加权有向图之后,就变成如下这个样子: