6

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

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

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

ответ

1

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

+1

thx это работает:)) – iva123

0

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

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

+0

Для HOUGH трансформации, я могу обнаружить круги очень хорошо Для бинарного изображения, да я могу увидеть Iris очень хорошо (она отображается в виде белых точек на черном лице), но это края несколько искажены Для последний комментарий, я не понимаю:) Вы предлагаете более крупное обрезанное изображение? – iva123

+0

Не знакомы с cvHoughCircle - но обычно вам нужно дать алгоритму поиска круга hough диапазон (окно) радиусов для поиска. В противном случае он должен исследовать пространство решения x/y/radius 3d, чтобы найти вероятность. –

+0

Не обязательно, если он использует информацию о градиенте, достаточно двухмерного аккумулятора. – 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(); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^