6

我編寫了用於霍夫變換的代碼,它效果很好。我也可以裁剪一張臉的眼睛位置。現在我想通過應用霍夫變換(cvHoughCircle)來檢測裁剪圖像的虹膜。但是,當我嘗試此過程時,系統無法在圖像上找到任何圓圈。Hough變換用於OpenCV中的虹膜檢測

也許,原因是,圖像中有噪音,但我不認爲這是它的原因。 那麼,我該如何檢測虹膜?我有二進制閾值的代碼也許我可以使用它,但我不知道該怎麼辦?

如果有人幫助,我真的很感激它。 thx :)

回答

1

你說二元thresold你得到一個純白色的虹膜:這不是你想要的。使用類似cvCanny的東西來獲得虹膜的邊緣。

+1

thx it works:)) – iva123 2010-05-23 13:43:50

0

您是否正確檢測到邊緣?
你能顯示二進制圖像並清楚地看到虹膜嗎?

圓形霍夫變換通常有一個半徑窗口(否則你正在搜索一個3d解決方案空間)你是否將窗口設置爲一個合理的值?

+0

對於霍夫變換,我能察覺圓得很好 對於二進制圖像,是的,我可以看到光圈非常好(它顯示爲白色圓點的黑色面),但它的邊緣有一些扭曲 對於最後的評論,我不明白:)你建議更大的 裁剪圖像? – iva123 2010-05-21 20:24:52

+0

不熟悉cvHoughCircle - 但通常你必須給半徑範圍(窗口)半徑搜索算法。否則,它必須探索x/y /半徑3d解決方案空間以查找可能性。 – 2010-05-22 02:21:49

+0

不是必需的,如果它使用梯度信息,2D累加器就足夠了。 – WebMonster 2012-06-13 08:31:23

-2
void houghcircle() 
{ 
    //cvSmooth(graybin,graybin, CV_GAUSSIAN, 5,5); 
    CvMemStorage* storage = cvCreateMemStorage(0); 

    // smooth it, otherwise a lot of false circles may be detected 
    CvSeq* circles = cvHoughCircles(edge, storage, CV_HOUGH_GRADIENT, 5, edge->height/4,1,1,2,50, 70); 
    int i; 
    for(i = 0; i < circles->total; i++) 
    { 
     float* p = (float*)cvGetSeqElem(circles, i); 
     cvCircle(img, cvPoint(cvRound(p[0]),cvRound(p[1])), 2, CV_RGB(0,255,0), -1, 2, 0); 
     cvCircle(img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 1, 2, 0); 
     cvNamedWindow("circles", 1); 
     cvShowImage("circles", img); 
     cvWaitKey(); 
    } 
}