1

我一直在嘗試檢測眼睛的虹膜區域,然後在檢測區域周圍繪製一個圓圈。我設法使用閾值函數獲得包含瞳孔,上眼瞼線和眉毛的清晰黑白眼睛圖像。如何檢測並在眼睛虹膜區域周圍畫一個圓圈?

一旦這被實現HoughCircles施加如果有出現在圖像中圓圈來檢測。但是,它從不檢測任何圓形區域。上HoughCircles閱讀後,它指出

霍夫梯度法的原理如下:

首先,圖像需要通過邊緣檢測階段被傳遞(在這種情況下,cvCanny())。

我則閾值函數之後添加一個精明的檢測器。這仍然產生零圈檢測。如果我刪除閾值功能,眼睛圖像變得忙於不必要的線條;所以我包括進去。

cv::equalizeHist(gray, img); 
medianBlur(img, img, 1); 

IplImage img1 = img; 
cvAddS(&img1, cvScalar(70,70,70), &img1); 
//converting IplImage to cv::Mat 
Mat imgg = cvarrToMat(&img1); 

medianBlur(imgg, imgg, 1); 
cv::threshold(imgg, imgg, 120, 255, CV_THRESH_BINARY); 
cv::Canny(img, img, 0, 20); 

medianBlur(imgg, imgg, 1); 

vector<Vec3f> circles; 
/// Apply the Hough Transform to find the circles 
HoughCircles(imgg, circles, CV_HOUGH_GRADIENT, 1, imgg.rows/8, 100, 30, 1, 5); 
  • 我怎樣才能解決這個問題?
  • 難道圓法的工作?
  • 有沒有更好的解決方案來檢測虹膜區域?
  • 參數選擇是否正確?

另外請注意,圖像被直接用攝像頭獲得的。

+0

我正在做類似的項目,但我需要檢測許多小點,所有這些都是不完美的圈子,有很多噪音。我使用findContours()成功檢測到它們。之前,我需要應用二進制圖像和canny邊緣 – azer89

+0

我也認爲findContours()方法將成爲要走的路線。考慮到當人員放牧指向底部時,我的瞳孔會產生不完整的圓圈/半圓。我會嘗試這種方法,並會盡快發佈有關結果的更新。 -謝謝。 – Sade

+0

FindContours方法並不可靠,有時在眼部區域繪製一個隨機輪廓。是否有替代方案或改進? – Sade

回答

0

二進制眼睛圖像包含三個不同方面睫毛,眼睛和eyebrow.The主要目的是獲得與感興趣的區域,該區域是眼睛/虹膜,不包括眉毛和eyelashes.I遵循下列步驟: -

第1步:丟棄眼睛圖像的上半部分,因此我們留下了睫毛,眼部區域和小陰影區域。

第2步:找到輪廓

步驟3:找到最大的輪廓,使我們剛纔的眼睛區域

第4步:使用邊框打造眼部周圍區域的矩形 http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html

現在我們有了感興趣的區域。從這個角度來看,我現在嚴格了這些圖像並使用神經網絡來訓練系統來模擬鼠標的屬性。我目前正在學習神經網絡link1以及如何在opencv中使用它。

使用先前的方法,包括檢測虹膜點,創建一個眼睛矢量,跟蹤它並計算屏幕上的放牧是非常耗時的。另外還有光線反射在虹膜上,因此很難檢測到。

0

嘗試使用Daugman的Integro微分算子。它計算虹膜和瞳孔的中心,並在虹膜和瞳孔邊界上畫一個精確的圓。 MATLAB代碼在這裏可用iris boundary detection using Daugman's method。由於我不熟悉OpenCV,因此可以將其轉換。

+0

謝謝你的迴應我會看看它。 – Sade