Hough трансформация для обнаружения радужной оболочки в OpenCV - PullRequest
6 голосов
/ 22 мая 2010

Я написал код для грубого преобразования, и он работает хорошо. Также я могу обрезать расположение глаз на лице. Теперь я хочу определить радужную оболочку изображения с применением преобразования Хафа (cvHoughCircle). Однако, когда я пытаюсь выполнить эту процедуру, система не может найти круг на изображении.

Возможно, причина в том, что на изображении есть шумы, но я не думаю, что причина в этом. Итак, как я могу обнаружить радужную оболочку? У меня есть код двоичного порога, может быть, я могу использовать его, но Я не знаю, как это сделать?

Если кто-нибудь поможет, я действительно ценю это. спасибо:)

Ответы [ 3 ]

1 голос
/ 23 мая 2010

Вы говорите, что с бинарным порогом вы получаете ирис, который чисто белый: это не то, что вы хотите иметь. Используйте что-то вроде cvCanny, чтобы получить только край радужной оболочки.

0 голосов
/ 03 августа 2010
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();
    }
}
0 голосов
/ 22 мая 2010

Правильно ли вы определяете края?
Можете ли вы отобразить двоичное изображение и четко увидеть радужную оболочку?

Круговые преобразования Хафа обычно имеют окно радиуса (в противном случае вы ищете трехмерное пространство решения) Вы устанавливаете для окна разумное значение?

...