Обнаружение зрачка в opencv

Я занимаюсь распознаванием радужной оболочки для моего проекта последнего года обучения. Теперь я смог обнаружить радужную оболочку с помощью преобразования круга Хафа, но это не работает при обнаружении зрачков, хотя я изменил свою веб-камеру на ИК-камеру. пытались использовать цвет HSV для обнаружения черного цвета в радужной оболочке, но он все еще не работает, так что какие алгоритмы я должен использовать?

IplImage *capturedImg = cvLoadImage("template.jpg",1);
  IplImage* imgHSV = cvCreateImage(cvGetSize(capturedImg), 8, 3);
cvCvtColor(capturedImg, imgHSV, CV_BGR2HSV);

  IplImage* imgThreshed = cvCreateImage(cvGetSize(capturedImg), 8, 1);
       cvInRangeS(imgHSV, cvScalar(0, 0,0, 0), cvScalar(179, 200, 50,77), imgThreshed);
       cvShowImage("HSV",imgThreshed);

введите здесь описание изображения


person Din Hee    schedule 11.12.2012    source источник
comment
Все зависит от того, как выглядят ваши входные кадры. Можете ли вы опубликовать пример кода, который вы используете и который не работает?   -  person Tobias Hermann    schedule 12.12.2012
comment
я использую веб-камеру logitech c920, и я сделал ее ИК-камерой, тогда коды являются частью моего проекта, который используется для обнаружения зрачка, однако проблема в cvScalar? большое спасибо......   -  person Din Hee    schedule 12.12.2012


Ответы (1)


Если вы хотите найти черный цвет, он будет присутствовать там, где значение близко к нулю. Вы можете изменить команду cvInRangeS на следующую:

cvInRangeS(imgHSV, cvScalar(0,0,0) , cvScalar(255, 255,27), imgThreshed);

Таким образом, вы исключаете пиксели, если их значение больше 27. Вы можете поиграть со значениями оттенка и насыщенности, чтобы увидеть, что работает лучше всего. Кроме того, поскольку каждый пиксель изображения имеет три канала, я не думаю, что имеет смысл использовать 4-канальный скаляр при использовании cvInRangeS.

В любом случае, когда я запустил этот код на своем компьютере, это было результатом:

Не совсем изолирует левую радужку

Вы можете использовать обнаружение блоба, чтобы изолировать левую радужную оболочку на этом изображении. Вы можете проверить эту библиотеку: http://code.google.com/p/cvblob/

person zackg    schedule 12.12.2012
comment
Если я обнаружу круг на изображении HSV, то как я обнаружу круг (зрачок)? Потому что я использую cvCanny, но он не работает... - person Din Hee; 12.12.2012
comment
Обнаружение границ Canny следует запускать на изображении в градациях серого. Имеет смысл запускать его на канале значений. После использования обнаружения хитрых краев вы, вероятно, захотите использовать обнаружение BLOB-объектов в результате, чтобы изолировать круг. Чтобы выделить форму круга, это может тебе помочь. - person zackg; 13.12.2012
comment
как выполнить хитрый край в изображении HSV? или мне нужно преобразовать его обратно в BGR? я вообще понятия не имею... - person Din Hee; 13.12.2012
comment
Вы можете выполнять обнаружение хитрых краев только на изображении в градациях серого. Я бы порекомендовал вам извлечь канал значений из вашего изображения и использовать его в качестве канала для обнаружения границ. См. это для синтаксиса разделения. Если вам нужен учебник по обнаружению границ, есть один здесь< /а> - person zackg; 14.12.2012