2012-01-29 100 views
3

我想找到一個圓形對象(虹膜的眼睛,我用中提琴瓊斯算法使用Haar Cascase)。所以我發現霍夫圈將是正確的做法。任何人都可以向我解釋如何在Java中實現Hough circle或者使用Java來尋找虹膜的其他簡單實現。如何在Java中實現Hough Circle

感謝,

回答

1

如果你想找到虹膜,你應該直截了當。你之後的虹膜部分實際上被稱爲角膜緣。還要注意,角膜緣的對比度比瞳孔的對比度要低得多,所以如果圖像分辨率允許瞳孔是更好的目標。從1開始,Java在編程語言方面並不是一個好的選擇。它在處理過程中非常緩慢; 2.由於經典的霍夫圈需要3D累加器,而Java可能意味着使用手機,所以內存要求將非常困難。

你可以做的是使用圖像中可能存在單個(或少數)Limbuses的事實。首先要做的是通過使用定向邊來將問題的維數從3減少到2:提取一起表示邊緣方向的水平和垂直邊緣(它們可以被視爲邊緣向量的水平和垂直分量)。簡單的想法是,邊緣向量的主導交叉點是你的角膜緣的中心。要找到交點,只需要兩個定向邊而不是三個定義圓的點。因此,維度從3減少到2.

您也不需要使用經典的霍夫圓變換和巨大的累加器以及大量的計算來找到這個相交點。隨機Hough將會快得多。以下是它的工作原理(〜RANSAC):您隨機選擇最小數量的定向邊(在您的情況2中),找到相交點,然後找到在大致相同位置相交的所有邊。這些是inlier。您只需迭代10-30次,即選擇一個不同的2個邊的隨機樣本,以確定具有最大內點數的集合。希望這些in子躺在角膜緣上。內線射線交點的中間值將會給出圓的中心,並且從中心到內點的中值距離就是半徑。

在下面的圖片中,鮮豔的顏色對應於內部線條,並且方向以小線段顯示。原始邊緣的集合顯示在中間(僅水平)。當原始邊緣沿着橢圓躺下時,通過仿射變換來變換霍夫邊緣以使屬於邊緣的那些躺在圓上。另請注意,邊緣方向非常嘈雜。

enter image description here

5

Duda and Hart (1971)具有霍夫變換一個非常明確的解釋和工作的例子。直接從該論文中直接生成實現並不困難,所以這是您開始的好地方。

2

ImageJ提供了一個Hough Circle plugin。過去我曾多次玩過它。 如果您需要或需要修改源代碼,您可以查看源代碼。