6

나는 hough 변환을위한 코드를 작성 했으므로 잘 작동합니다. 또한 얼굴의 눈 위치를자를 수 있습니다. 이제 Hough 변환 (cvHoughCircle)을 적용하여 작물 이미지의 홍채를 감지하고 싶습니다. 그러나이 절차를 시도하면 시스템에서 이미지의 원을 찾을 수 없습니다.OpenCV에서 홍채 탐지를위한 허프 변환

어쩌면 이유는 이미지에 노이즈가 있지만 그게 이유라고 생각하지 않습니다. 그럼 어떻게 홍채를 감지 할 수 있습니까? 이진 thresholding 코드를 어쩌면 내가 그것을 사용할 수 있지만 어떻게 해야할지 모르겠다?

누구든지 도움을 주시면 감사하겠습니다. thx :)

답변

1

이진 thresold를 사용하면 순수한 흰색 인 아이리스를 얻을 수 있다고 말합니다. 그것은 원하는 것을 의미하지 않습니다. 아이리스의 가장자리 만 얻으려면 cvCanny와 같은 것을 사용하십시오.

+1

그것은 작동합니다 :)) – iva123

0

가장자리를 올바르게 감지하고 있습니까?
이진 이미지를 표시하고 아이리스를 명확하게 볼 수 있습니까?

원형 호핑 변환은 일반적으로 반지름 창이 있습니다 (그렇지 않으면 3d 솔루션 공간을 검색하는 중입니다). 적절한 값으로 창을 설정하고 있습니까?

+0

무릎 변환을 위해, 나는 그래 난 아주 잘 (그 검은 얼굴에 흰색 점으로 표시되는) 조리개를 볼 수 있습니다, 바이너리 이미지를 위해 아주 잘 을 원을 감지 할 수 있지만, 그것의 가장자리 일부가 들어 왜곡이다 마지막 코멘트, 나는 이해하지 못한다 :) 더 큰 자른 이미지를 제안 하시겠습니까? – iva123

+0

cvHoughCircle에 익숙하지 않지만, 일반적으로 검색 할 반경의 범위 (창) 알고리즘을 찾는 서클 원을 제공해야합니다. 그렇지 않으면 가능성을 찾기 위해 x/y/radius 3D 솔루션 공간을 탐험해야합니다. –

+0

그래도 그라디언트 정보를 사용하면 2D 누산기로 충분합니다. – WebMonster

-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(); 
    } 
}