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

来源:互联网 发布:php日志系统 编辑:程序博客网 时间:2024/06/05 13:33

0 前言 

欧几里得距离转换(Euclidean Distance Transform, EDT)简单的说即是以最常用的欧几里得距离作为

距离度量,找到每一个前景点到最近的背景点之间的距离。文中提及所有的算法中,均是将二维图片

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

一些基本定义:

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

前景点为1:白色;

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

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

1. Saito的算法:

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.

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 字花题目及答案 100万存银行一年利息多少 10万存一年利息多少 2019存30万存三年利息多少 50万存银行一年多少利息 1000万存银行一年利息多少 200万存银行一年利息多少 10万存银行好还是余额宝好 十万存银行一年多少利息 一万存一年利息多少 五十万存银行一年有多少利息 40万存银行一年利息多少 20万存定期三年利息 二十万存定期一年利息多少 20万存银行一年利息是多少 10万存3年定期利息是多少 100万存银行一个月利息多少 20万存余额宝一天收益多少 十万存一年定期利息是多少 十万存定期一年利息多少 10万存银行一年利息多少 一万存三个月利息多少 15万存银行一年利息多少 十万存余额宝一年收益多少 5万存银行一年利息多少 2018存款20万存3年利息会有多少 大额存单20万存一年有多少钱 10万存定期还是买理财 3万存银行一年利息多少 800万存银行一年利息多少 2万存银行一年利息多少 1000万存银行一年多少利息 一万存余额宝一天利息 三十万存银行一年利息多少 2018年20万存3年定期利息多少钱 5万存余额宝一天多少钱 20万存支付宝一天有多少利息 十万存三年定期利息是多少 20万存一年定期利息多少 学霸天师是网红 万学教育