Hough变换和Radon变换之间有什么区别?


34

我通过学习CT扫描熟悉Radon变换,但不熟悉Hough变换。维基百科说

对于二维的一组直线,(r,θ)平面有时称为Hough空间。这种表示使霍夫变换在概念上非常接近二维Radon变换。(可以将它们视为查看同一变换的不同方法。[5])

在我看来,它们的输出是相同的:

Hough和Radon变换的并排rho vs theta图

所以我不知道有什么区别。他们只是以不同的方式看待同一件事吗?每个不同的观点有什么好处?为什么不将它们合并为“霍夫-拉登变换”?


嘿,无关紧要的问题,但是您可以分享这张图片中使用的Bezier热图颜色方案吗?它看起来还不错,我想知道您是否有一个描述的RGB值数组。M×3
DumpsterDoofus 2014年

@DumpsterDoofus我猜是因为它的缺憾我还没有公布它,我想先擦亮它,但因为我还没有:非贝塞尔版本在这里gist.github.com/endolith/2879736和贝塞尔尝试在这里要点.github.com / endolith / ef948b924abf289287bd 也用于此处flic.kr/p/dWSfUd
endolith 2014年

谢谢,我实际上是在昨晚弄清楚的,它可以紧凑地写为RGB(x)=((2x)xBoole[0x1]x2Boole[1x1]x(x+2)Boole[1x0]).
DumpsterDoofus

@DumpsterDoofus随时清理我的代码:)
endolith 2014年

Answers:


31

Hough变换和Radon变换确实非常相似,它们的关系可以宽松地定义为前者是后者的离散形式。

Radon变换是一个数学积分变换,对连续函数定义上在超平面。另一方面,霍夫变换本质上是一种离散算法,可以通过轮询和合并(或投票)来检测图像中的线条(可扩展到其他形状)。ř ÑRnRn

我认为对两者之间的差异进行合理的类比就像

  1. 计算随机变量的特征函数,作为其概率密度函数(PDF)的傅里叶变换,以及
  2. 生成随机序列,通过直方图合并计算其经验PDF,然后对其进行适当转换。

但是,霍夫变换是一种快速算法,容易产生某些伪像。on在数学上更可靠,但更准确但更慢。实际上,您可以在Hough变换示例中将工件视为垂直条纹。这是Mathematica中的另一个快速示例:

img = Import["http://i.stack.imgur.com/mODZj.gif"];
radon = Radon[img, Method -> "Radon"];
hough = Radon[img, Method -> "Hough"];
GraphicsRow[{#1, #2, ColorNegate@ImageDifference[#1, #2]} & @@ {radon,hough}]

即使我否定了它以显示深色条纹,但最后一张图像确实很模糊,但它确实存在。倾斜显示器会有所帮助。您可以单击所有图以查看更大的图像。

两者之间的相似性不是很广为人知的部分原因是因为不同的科学与工程领域历来仅根据其需求使用这两者之一。例如,在层析成像(医学,地震学等),显微术等中,可能只使用Radon变换。我认为这样做的原因是将假象保持在最低限度至关重要(假象可能是误诊的肿瘤)。另一方面,在图像处理,计算机视觉等中,因为速度是主要因素,所以使用了霍夫变换。


您可能会发现这篇文章很有趣且很热门:

M. van Ginkel,CL Luengo Hendriks和LJ van Vliet,对Radon和Hough变换及其相互关系的简短介绍,代尔夫特大学成像科学与技术系定量成像小组

作者认为,如果将霍夫变换写成连续变换,尽管两者之间关系非常密切(按照其原始定义)并且等效,但是Radon的优点是更直观并且具有扎实的数学基础。


还有一个类似于广义霍夫变换的广义Radon变换,它适用于参数化曲线而不是直线。这是处理它的参考:

宾夕法尼亚州Toft,“使用广义Radon变换检测噪声图像中的曲线”,IEEE ICASSP-96,第1卷。4,2219-2222(1996)


哦,我认为这些是故意添加到图像中的。没意识到他们是文物。那么Radon就像DFT一样适合FFT吗?但是,还有通用的Hough变换可以找到圆和东西,也许Radon变换也可以找到类似的东西?
endlith 2011年

1
是的,存在适用于参数化曲线的广义Radon变换。我认为对于完全任意的曲线很难这样做,但是我对此并不了解。我已经为我的答案添加了参考。
Lorem Ipsum

Radon变换也可以通过FFT方法加快。我猜霍夫不能吗?霍夫还会更快吗?我猜这取决于图像尺寸吗?
endlith 2011年

1
@endolith根据我的经验,霍夫的速度更快。但是,我对这两者的使用是为了检测我正在摆弄的东西中的几条奇数行。从未在认真的工作中使用过它,也没有实现自己的功能。因此,我建议将其作为一个新问题提出,因为我无法确定地回答。
Lorem Ipsum

6

除了Lorem Ipsum将Hough变换解释为Radon变换的离散形式的答案之外,我还喜欢这种描述性解释-同样根据Ginkel和其他人的说法:

Radon和Hough都是从图像空间到和参数空间的映射,但是它们的观点不同。Radon变换从图像空间(读取范例)派生参数空间中的点,而Hough变换则将图像空间中的数据点显式映射到参数空间(编写范例)。θρθ

通过比较它们的(离散)算法,这一点变得很清楚。对于参数空间中的每个,Radon 使用大小为存储桶将图像点投影在由(角度)描述的线上。另一方面,霍夫拍摄每个图像点,并将适当的强度添加到所有相应的参数空间仓中。θ Δ ρ X ÿ θθΔρ(x,y)

结果,霍夫遭受了伪影,而Rad子则允许在参数空间中实现高分辨率(通过调整和并将像素划分为子像素)。Δ ρΔθΔρ

尽管需要执行整个转换,但是霍夫通常更快(无论如何,这是大多数情况下的目的)。由于读取范例, Radon仅允许计算参数空间的较短间隔(以)。如果您具有一些先验知识(例如,峰值可能位于间隔中),则可以大大减少计算时间。θθθ

我猜霍夫因其简单的算法而在许多领域占主导地位,而拉顿则用于精度至关重要或已有先验知识的地方。

另请参见Matlab参考(展开“ 算法”标签):

www.mathworks.com/help/images/ref/radon.html

www.mathworks.com/help/images/ref/hough.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.