根据此站点http://homepages.inf.ed.ac.uk/rbf/HIPR2/distance.htm,它描述了:
仅需两遍(例如Rosenfeld和Pfaltz
四处寻找,我发现:“ Rosenfeld,A和Pfaltz,J L.1968。数字图片上的距离函数。模式识别,1,33-61。”
但是我相信我们应该有一个比1968年更好,更快的算法吗?实际上,我找不到1968年的资料来源,因此非常感谢您的帮助。
#1 楼
Pedro F. Felzenszwalb和Daniel P. Huttenlocher已发布了距离转换的实现。您不能将其用于体积图像,但是也许可以扩展它以支持3d数据。我只是将其用作黑匣子。评论
$ \ begingroup $
您是否偶然知道这是否在OpenCV中实现?
$ \ endgroup $
– Matt M.
2011年10月8日上午10:38
$ \ begingroup $
是,对于maskSize和distanceType的某些值。请参阅:opencv.willowgarage.com/documentation/cpp/…
$ \ endgroup $
–bjoernz
2011年10月9日,下午6:04
$ \ begingroup $
到目前为止,是否有任何体积图像(例如kinect深度图像)的实现?
$ \ endgroup $
–张绍臣
15年7月29日在10:10
#2 楼
本文讨论了所有现代精确距离变换:“二维欧氏距离变换:比较调查”,ACM计算调查,第40卷,第1期,2008年2月
http:// www.lems.brown.edu/~rfabbri/stuff/fabbri-EDT-survey-ACMCSurvFeb2008.pdf
本文引用了Meijster等人的技术。等作为最快的通用目标,进行精确转换。此处详细介绍了该技术:
“在线性时间中计算距离转换的通用算法”,A。Meijster,JBTM Roerdink和WH Hesselink。
http://fab.cba.mit .edu / classes / S62.12 / docs / Meijster_distance.pdf
我的开源效果库中使用了Meijster算法:
https://github.com/vinniefalco/LayerEffects
我希望这对某人有帮助。
评论
$ \ begingroup $
知道在您的库中可以找到特定代码的位置很有用。
$ \ endgroup $
– Akaltar
15年8月23日在14:03
#3 楼
这是根据Felzenszwald和Huttenlocher的论文的用于一维平方欧几里德距离变换的C#代码:在图像列上然后是行上(当然反之亦然)。
转换确实非常快。
以下是源图像和输出图像:
黑色像素值为0,白色像素值较大(必须大于图像中最大的平方距离,但不能大于
要获得真正的欧几里德距离变换,只需从输出图像中取每个像素的平方根即可。
评论
$ \ begingroup $
有趣。 Libor距离变换的常见用法是什么?
$ \ endgroup $
–太空
2012年8月21日13:57
$ \ begingroup $
我认为常见的用途是查找路径,分割,几何尺寸(质心)和效果(斜角效果)。我需要进行距离转换以进行全景图像拼接-以找到几何上最佳的混合蒙版。这涉及对每个图像进行行驶距离变换,然后根据权重计算混合蒙版。
$ \ endgroup $
– Libor
2012年8月21日在19:54
$ \ begingroup $
距离变换可以用于匹配[edge]图像,一种技术是“倒角匹配”(umiacs.umd.edu/~mingyliu/papers/liu_cvpr2010.pdf)。 DT还可以用于查找中间轴(骨骼)并执行其他任务,例如提到的Libor。
$ \ endgroup $
–重新思考
2012年9月19日于20:43
评论
很抱歉再次启动此线程,但是我也尝试使用Python实现GDT。 def of_column(dataInput):输出=零(dataInput.shape)n = len(dataInput)k = 0 v =零((n,))z =零((n + 1,))v [0] = 0 z对于范围(1,n)中的q,[0] = -inf z [1] = + inf s = 0:而True:s =((((dataInput [q] + q * q)-(dataInput [v [k ]] + v [k] * v [k]))/(2.0 * q-2.0 * v [k]))如果s <= z [k]:k-= 1否则:打破k + = 1 v [对于范围(n)中的q,k] = qz [k] = sz [k + 1] = + inf k = 0:而z [k + 1]请问一个新问题。不要发布问题作为答案。
欢迎使用信号处理SE。您可以使用右上角的“提问”来提问。