1. 程式人生 > >檢測 影象中得直線

檢測 影象中得直線

Radon 變換  

介紹

影象投影,就是說將影象在某一方向上做線性積分(或理解為累加求和)。如果將影象看成二維函式f(x, y),則其投影就是在特定方向上的線性積分,比如f(x, y)在垂直方向上的線性積分就是其在x軸上的投影;f(x, y)在水平方向上的線積分就是其在y軸上的投影。通過這些投影,可以獲取影象在指定方向上的突出特性,這在影象模式識別等處理中可能會用到。

 

Radon變換(拉東變換),就是將數字影象矩陣在某一指定角度射線方向上做投影變換。這就是說可以沿著任意角度theta來做Radon變換。

 

Radon變換的理解


 

如圖所示:在直角座標系中,f(x,y)為線l上的點,P為座標原點到線l上的距離,表示線l法線方向的夾角,因此直線方程可以表示為:Radon變換的理解
l線上的Radon變換的公式是:Radon變換的理解

另:Delta函式(狄拉克函式)為一個廣義函式,沒有具體定義,該函式在非零的點取值均為0,而在整個定義域的積分為1,這裡寫一個最簡單的Delta函式,便於理解:

Radon變換的理解

結合直線方程,則Delta函式可以表示為:

Radon變換的理解

Radon變換可以寫為

Radon變換的理解

Radon變換可以理解為影象在Radon變換的理解空間的投影,Radon變換的理解空間上的每一點對應(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所示,用引數表示上述直線,則有:


        假定有一個函式f(x,y),如圖-2所示,那麼該函式過直線L區域的積分即為:

其中ds是該直線的微分。
       上述關於x,y的積分是很容易求解的,其中一種求解技巧是藉助Delta函式,上述積分可以寫為:

另:Delta函式(狄拉克函式)為一個廣義函式,沒有具體定義,該函式在非零的點取值均為0,而在整個定義域的積分為1,這裡寫一個最簡單的Delta函式,便於理解:

Radon變換的理解

Radon變換的理解

 

 


        因而,給定一組\rho \theta那麼就可以得出一個沿L(\rho,\theta)的積分值。因此,Radon變換就是函式f (x,y)的線積分,如圖-3所示。

     假如有很多平行於L的線,他們有相同的\theta,徑向座標\rho卻不同,這就很好的印證了matlab自帶的radon變換命令中每個\theta角度的Radon變換結果是有兩個輸出項R(特定角度下的Radon變換值也即線積分值)與xp,一一對應(xp可預設)。我們對每一條這樣的平行線都做f(x,y)的線積分,會產生很多投影線,如圖-4所示。也就是說對一幅影象在某一特定角度下的Radon變換會產生N個線積分值(Radon變換),而每一個線積分值會對應一個徑向座標xp,如圖-5所示。各個角度的Radon變換值彙總在一起就構成一幅Radon變化圖。

      Radon變換將原影象空間中的直線對映為\rho \theta 空間中的點(線積分值),影象中高灰度值的直線會在\rho \theta空間形成亮點,而低灰度值的線段在\rho \theta空間形成暗點。因而,對直線的檢測可轉化為在變換區域對亮點、暗點的檢測,另外,Radon變換的逆變換常用於醫學CT斷層成像影象的重建。

       下面給出我個人的幾個簡單的Radon變換與其重構matlab實驗結果:


       另外:我實驗的影象是長方形的,發現重構的結果內容顯示並不全,研究了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的唯一存在的直線。

                                                     

這意味著影象中的每條直線在引數空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所示:

                                                

我們要注意到Hough變換的重要性質是對影象中直線的殘缺部分、噪聲以及其它共存的非直線結構不敏感。因為從影象空間到累計空間的變換的Robuestness引起的,直線殘缺的部分只會造成較低的區域性極值。
 

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

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