欧几里得距离转换(EDT)算法

0 前言 算法

欧几里得距离转换(Euclidean Distance Transform, EDT)简单的说便是以最经常使用的欧几里得距离做为数组

距离度量,找到每个前景点到最近的背景点之间的距离。文中说起全部的算法中,均是将二维图片app

转为两个一维向量的方式进行。ide

一些基本定义:函数

背景点为0,黑色,为感兴趣点,Voronioi elements,sites;idea

前景点为1:白色;spa

VR:某一背景点的VR指的前景点集合,这些前景点到此背景点的距离比到其余背景点距离都要短。3d

VS:某一前景点的VS指的是背景点的集合,这些背景点到此前景点距离比到其余前景点距离都要短。orm

1. Saito的算法:blog

step1:1-D Transformation

上到下,计算每一行中前景点到本行背景点距离最近的平方,获得中间结果G;

以下图,(a)为原图(b)为同一行的距离平方图,即G,公式以下:



step2:2-D Transformation

从左到右,对每一列,对中间结果G进行操做,计算本列背景点与本行背景点距离平方和的最小值,获得距离图(Distance Map)H;

以下图(4即便最近距离的平方)。


2. Maurer的算法对Saito改进:

第一步中的1-D Transformaion是同样的。只不过由先行后列改成先列后行。

第二步的改进基于一个事实:

对于每一列来讲,并非全部的sites(背景)都对Distance Map起到关键做用,而仅仅取决于与这一行有交集的VR,这里用到VR的概念。

先列后行,在通过列的1-DT后,找到与当前行有交集的VD,这些对Distance Map有做用,其余的删除。并只保留最近的VR。

如图,这样与step2相比,每一行须要计算的前景点数量由图(a)变为最终的图(c)

判断哪一个VR与这一行R有交集的标准以下两条(相关VR的选取):

1. 在每一列的背景点(sites)中,只保留这一列与R最近的sites,如上图(a)到(b)的变化;

2. 在第一步保留的点中,有三点u、v、w按照横坐标由小到大排列,即:

    是在R与u和v垂直平分线的交点,同理,以下图所示。若是,即的右

    侧,则删除v,参照上图(b)到(c)的变化。


保留下的背景点能够按照从左至右的顺序排列保存。算法复杂度为:

3. Felzenszwalb算法[3]

该算法能够在线性的时耗进行,推荐。

表示p点EDT的计算,此处已转换为一维空间,对于一行n个点,计算p

的EDT公式以下:


q也是此列中的一点,f(q)能够看作是q点的消耗函数(对于二维图像,能够认为是

上面所述的1-D Transformation)。是一个以( q, f(q) )为最小值的抛物线。对

于n个q点,即有n个以( q, f(q) )为最小值的抛物线,以下图。


所以,对于属于[0, n-1]的p来讲,其EDT就是这些抛物线的下包络(lower envelope)。

算法的步骤就是首先计算这些抛物线的下包络,而后根据下包络获得没一点p的EDT。

这个算法最重要的步骤就是下包络的计算。

在此,有一个事实是:图中任意两个抛物线有且仅有一个交点(intersect point)。这个

交点在一维坐标轴的投影位置s计算以下式:


其中,r,q为两个抛物线的凹点。能够看到若q<r,在交点的左侧,q所属抛物线低于r的,在交点右侧反之。

这里,用两个数组来从左至右顺序的获得下包络。

下包络中,第i个抛物线的水平位置(凹点)保存在数组v[i];下包络中第i个个抛物线的范围保存在z[i]z[i+1](每一个z[i]保存的是交点),k

示下包络中包含的抛物线个数。

现有一新的抛物线,与v中最右侧的抛物线k比,只有两种可能,交点s在z[k]左边或z[k]右面,以下图所示。


若:

1:新抛物线q与队列中最后一个抛物线v[k]的交点s在z[k]右侧,则下包络添加q为最后一个抛物线,k=k+1,

      z[k]指向s,v[k]指向q的凹点。如图(a)。

2:s在z[k]左侧,则v[k]再也不属于下包络,更新z[k]为s,v[k]为q的凹点,如图(b)。

其排列好后每一点对应下包络的y值极为EDT,算法伪代码以下所示。



参考文献:

[1] Fabbri R, Costa L D F, Torelli J C, et al. 2D Euclidean distance transform algorithms: A comparative survey[J]. ACM Computing Surveys (CSUR), 2008, 40(1): 2.

[2] Meijster A, Roerdink J B T M, Hesselink W H. A general algorithm for computing distance transforms in linear time[M]//Mathematical Morphology and its             applications to image and signal processing. Springer US, 2000: 331-340.

[3] Felzenszwalb P F, Huttenlocher D P. Distance Transforms of Sampled Functions[J]. Theory of computing, 2012, 8(1): 415-428.