检测 图像中得直线

Radon 变换  

介绍

图像投影,就是说将图像在某一方向上做线性积分(或理解为累加求和)。如果将图像看成二维函数f(x, y),则其投影就是在特定方向上的线性积分,比如f(x, y)在垂直方向上的线性积分就是其在x轴上的投影;f(x, y)在水平方向上的线积分就是其在y轴上的投影。通过这些投影,可以获取图像在指定方向上的突出特性,这在图像模式识别等处理中可能会用到。

 

Radon变换(拉东变换),就是将数字图像矩阵在某一指定角度射线方向上做投影变换。这就是说可以沿着任意角度theta来做Radon变换。

 

检测 图像中得直线_第1张图片


 

如图所示:在直角坐标系中,f(x,y)为线l上的点,P为坐标原点到线l上的距离,表示线l法线方向的夹角,因此直线方程可以表示为:检测 图像中得直线_第2张图片
l线上的Radon变换的公式是:检测 图像中得直线_第3张图片

另:Delta函数(狄拉克函数)为一个广义函数,没有具体定义,该函数在非零的点取值均为0,而在整个定义域的积分为1,这里写一个最简单的Delta函数,便于理解:

检测 图像中得直线_第4张图片

结合直线方程,则Delta函数可以表示为:

检测 图像中得直线_第5张图片

Radon变换可以写为

检测 图像中得直线_第6张图片

Radon变换可以理解为图像在检测 图像中得直线_第7张图片空间的投影,检测 图像中得直线_第8张图片空间上的每一点对应(x,y)空间中的一条直线。

Radon变换可以用于直线检测,比Hough变换优越的地方在于:Radon变换可以针对非二值图像,Radon变换检测直线:当灰度值高的线段会在P 空间中形成亮点,而低灰度值的直线会在P 空间中形成暗点,而Hough变换需要针对二值图像进行,仅仅积攒非0点在某一个Radon变换的理解上的个数。

Radon变换的积分运算环节抵消了噪声所引起的亮度起伏,从直线检测方面看,Radon变换P 空间较源图像空间域的SNR高,因此Radon变换被用于低SNR图像线检测的原因。

 

理解

Radon变换的本质是将原来的函数做了一个空间转换,即,将原来的XY平面内的点映射到AB平面上,那么原来在XY平面上的一条直线的所有的点在AB平面上都位于同一点。记录AB平面上的点的积累厚度,便可知XY平面上的线的存在性。这便是大家所公认的Radon变换的实质所在。       

        上述听起来很在理也很简单,但却少了直观性。那么,详细的数学理论是什么呢?请看下文:

        如果我们将图像中心设为原点,用\rho(直线到原点的距离)和\theta(某一特定方向)代替a、b,即,理解为图像在空间的投影,如图-1所示,用参数表示上述直线,则有:

检测 图像中得直线_第9张图片
        假定有一个函数f(x,y),如图-2所示,那么该函数过直线L区域的积分即为:

其中ds是该直线的微分。
       上述关于x,y的积分是很容易求解的,其中一种求解技巧是借助Delta函数,上述积分可以写为:

另:Delta函数(狄拉克函数)为一个广义函数,没有具体定义,该函数在非零的点取值均为0,而在整个定义域的积分为1,这里写一个最简单的Delta函数,便于理解:

检测 图像中得直线_第10张图片

检测 图像中得直线_第11张图片

 

 


        因而,给定一组\rho \theta那么就可以得出一个沿L(\rho,\theta)的积分值。因此,Radon变换就是函数f (x,y)的线积分,如图-3所示。

检测 图像中得直线_第12张图片

     假如有很多平行于L的线,他们有相同的\theta,径向坐标\rho却不同,这就很好的印证了matlab自带的radon变换命令中每个\theta角度的Radon变换结果是有两个输出项R(特定角度下的Radon变换值也即线积分值)与xp,一一对应(xp可缺省)。我们对每一条这样的平行线都做f(x,y)的线积分,会产生很多投影线,如图-4所示。也就是说对一幅图像在某一特定角度下的Radon变换会产生N个线积分值(Radon变换),而每一个线积分值会对应一个径向坐标xp,如图-5所示。各个角度的Radon变换值汇总在一起就构成一幅Radon变化图。

检测 图像中得直线_第13张图片

      Radon变换将原图像空间中的直线映射为\rho \theta 空间中的点(线积分值),图像中高灰度值的直线会在\rho \theta空间形成亮点,而低灰度值的线段在\rho \theta空间形成暗点。因而,对直线的检测可转化为在变换区域对亮点、暗点的检测,另外,Radon变换的逆变换常用于医学CT断层成像图像的重建。

       下面给出我个人的几个简单的Radon变换与其重构matlab实验结果:

检测 图像中得直线_第14张图片

检测 图像中得直线_第15张图片

检测 图像中得直线_第16张图片
       另外:我实验的图像是长方形的,发现重构的结果内容显示并不全,研究了matlab内置的radon逆变换之后,稍微做了显示更改这才显示完全。
 

 

 

霍夫(hough)变换

理论分析

Hough变换的方法基本思想可以从检测图像中的直线这个简单问题中看到。直线由两点A=(X1,Y1)和B=(X2,Y2)定义,所下图1(a)示。通过点A的所有直线由y1=k*x1+q表示,k和q是某些值。这意味着同一个方程可以解释为参数空间k,q的方程。因此通过点A的所须直线可以表示为方程q=-x1*k+y1图1.(b)。类似地通过点B的直线可以表示q=-x2*k+y2。在参数空间k和q中,两条直线的唯一公共点是在原图像空间中表示连接点A和B的唯一存在的直线。

                                                     检测 图像中得直线_第17张图片

这意味着图像中的每条直线在参数空k,q中由单独一个点表示,直线的任何一部分都变换为同一个点。直线检测的主要思想是确定图中所在的直线像素,将通过这些像素的所在直线变换到参数空间的对应点,在参数空间检测点(a,b),此点是图像中出现的直线y=ax+b的Hough变换的结果。

图像中所有可能的直线像素的检测,可以通过在图像中进行边缘检测子得到,所有边缘幅值超过某个阈值的像素都可以看作是可能的直线像素。在最一般的情况下,当我们没有任何有关图像中的直线信息,因此,所有方向的直线可能通过任何边缘像素。而在现在实现中,这些直线的数目是无限的,然而,为了实际目标,只能有限数目的直线方向。直线的可能方向定义了参数K的一个离散化,因此参数q也被采样为有限数目的值。所以参数空间不是连续的,而是被表示为矩形单元,称之为累计数组(accumulator array) A,它的元素是累计单元(Accumulator cells) A(k,q). 对于每个边缘元素,确定其参数k和q。这些参数表示了通过此像素的允许方向的直线。对于每条这样的直线,直线参数k和q的值用来增加累计单元A(k,q)的值。如果公式y=ax+b所表示的直线出现在图像中,A(a,b)的值会被增加很多次,而次数等于直线y=ax+b作为可能通过某个边缘像素的直线被检测到的数目。

对于任意像素P,通过它的直线可能是任何的方向k,但是第二个参数q受像素P图像坐标和方向k所约束。因此,存在于图像中的直线会引起图像中适合的累计单元值变大,而通近边缘像素的其他直线,它们不对应于图像中存在的直线,对于每个边缘像素具有不同的参数k和q,所以对应的累计单元极少被增加。即:图像中存在的直线可以作为累计数组中的高值累计单元被检测出业,检测到的直线参数由累计数组的坐标给出,结果是图像中直线的检测被为累计空间中的局部极值的检测。

我们可以注意到直线的参数方程y =kx+q只适合解释Hough变换原理,在检测垂直线条和参数的非线性离散化时会遇到困难。如果直线表示成s=xcosθ+ysinθ。Hough变换就没有这些局限性。直线还是被变换为单个点,因此可用该原理进行直线检测。如下图2所示:

                                                检测 图像中得直线_第18张图片

我们要注意到Hough变换的重要性质是对图像中直线的殘缺部分、噪声以及其它共存的非直线结构不敏感。因为从图像空间到累计空间的变换的Robuestness引起的,直线殘缺的部分只会造成较低的局部极值。
 

https://blog.csdn.net/sinat_26681907/article/details/52277598

https://blog.csdn.net/songzitea/article/details/17027849

你可能感兴趣的:(算法,图像处理)