О поиске ученика в видео

Сейчас я работаю над проектом по отслеживанию глаз. В этом проекте я слежу за глазами в видео с веб-камеры (разрешение 640X480).

Я могу найти и отследить глаз в каждом кадре, но мне нужно найти зрачок. Я прочитал много статей, и большинство из них относится к методу деформируемого шаблона Алана Юилла для извлечения и отслеживания особенностей глаза. Может ли кто-нибудь помочь мне с кодом этого метода на любых языках (matlab/OpenCV)?

Пробовал с разными порогами, но из-за низкого разрешения в области глаз работает не очень хорошо. Я буду очень признателен за любую помощь в поиске зрачка или даже радужки в видео.

Пример изображения


person noname noname    schedule 11.05.2012    source источник
comment
Думаю, с таким разрешением будет сложно. Можете ли вы загрузить один скриншот на imageshack.us и дать ссылку здесь?   -  person Abid Rahman K    schedule 11.05.2012
comment
Я не знаю, как прикрепить изображение. Не могли бы вы мне помочь...   -  person noname noname    schedule 11.05.2012
comment
Вы пока не можете этого сделать, потому что у вас недостаточно репутации на этом сайте.   -  person    schedule 11.05.2012
comment
Спасибо, Тибор, я тоже несколько раз пытался загрузить, но не получилось :(   -  person noname noname    schedule 11.05.2012
comment
перейти к http://imageshack.us/. Вы можете загрузить изображение туда. Тогда дайте ссылку на ваше изображение здесь.   -  person Abid Rahman K    schedule 11.05.2012
comment
Если изображение имеет хорошее разрешение, попробуйте следующее: stackoverflow.com/questions/8145725/track-eye-pupil-in-a-video   -  person Abid Rahman K    schedule 11.05.2012
comment
Привет Абид, большое спасибо за ссылку. Я пробовал по ссылке, которую вы дали, но она хорошо работает для высокого разрешения, но для меня это не работает. Я загрузил образец изображения по ссылке imageshack.us/photo/my-images. /585/eyea.jpg   -  person noname noname    schedule 14.05.2012
comment
Возможно, вы могли бы попробовать использовать функцию OpenCV CvHoughCircles? Это позволяет обнаружить различные круги в глазах. пример см. в справке по API.   -  person diip_thomas    schedule 18.05.2012


Ответы (4)


Что вам нужно сделать, так это преобразовать вашу веб-камеру в камеру ближнего инфракрасного диапазона. Для этого есть множество учебных пособий в Интернете. Попробуйте это.

Изображение, полученное с NIR-камеры, будет выглядеть примерно так:

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

Затем вы можете использовать OpenCV для порога.

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

Затем используйте функцию Erode.

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

После этого залейте изображение каким-либо цветом, взяв угол в качестве исходной точки.

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

Устраните дыры и инвертируйте изображение.

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

Используйте преобразование расстояния до ближайшего ненулевого значения.

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

Найдите координату максимального значения и нарисуйте круг.

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

person Anirudh    schedule 03.07.2012
comment
Привет, Анируд, спасибо за твой ответ. Проблема в том, что я не могу использовать инфракрасную камеру или любую другую модифицированную версию веб-камеры. Только нужно использовать простую веб-камеру. В любом случае, большое спасибо. - person noname noname; 09.07.2012
comment
Обычную веб-камеру можно очень легко преобразовать в NIR. Обратитесь по ссылке, указанной выше в ответе. - person Anirudh; 21.05.2015


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

Какой-то псевдокод:

box left_location = findlefteye()
box right_location = findrighteye()
image_matrix left = image[left_location]
image_matrix right = image[right_location]
image_matrix average = left + right
pixel min = min(average)
pixel left_pupil = left_location.corner + min
pixel right_pupil = right_location.corner + min
person vaebnkehn    schedule 11.05.2012
comment
Пробовал с самым темным пикселем. Но проблема в том, что иногда свет отражается на радужной оболочке, и тогда зрачок уже не является самой темной точкой. Я не знаю, как решить эту проблему. - person noname noname; 11.05.2012
comment
так что иногда он самый светлый, а иногда самый темный? Вы можете найти самую крайнюю точку, либо используя абсолютное значение градиента, либо просто найдя max(abs(eye_image - mean(eye_image))) - person vaebnkehn; 11.05.2012
comment
Привет, vaebnkehn, я попробовал этот подход вчера, но это не сработало. :( - person noname noname; 12.05.2012
comment
Возможно, если бы вы разместили несколько примеров изображений глаз, это помогло бы. Моей единственной другой мыслью было бы попытаться найти кольцо цветных пикселей, которое является радужной оболочкой, а центром этого должен быть зрачок. Я бы посмотрел на канал насыщения в пространстве HSV, чтобы найти радужную оболочку. - person vaebnkehn; 12.05.2012
comment
Привет, Vaebnkehn, я загрузил один образец изображения imageshack.us/photo/my -images/585/eyea.jpg - person noname noname; 14.05.2012
comment
Потрясающий. Найдите две самые большие белые области и разделите разницу. - person vaebnkehn; 15.05.2012
comment
Я не понимаю, не могли бы вы описать немного больше. - person noname noname; 15.05.2012
comment
Найдите все белые пиксели в области глаз. Пометьте области и оставьте две самые большие (это левый и правый белки глаза). Найдите центроид каждого регона, а затем возьмите среднее значение двух центроидов. Этой точкой должен быть зрачок. - person vaebnkehn; 06.06.2012
comment
Проблема с этим подходом заключается в том, что из-за качества изображения глаза не такие белые. Я думаю, будет сложно избежать ложных срабатываний. - person Rui Marques; 13.06.2012

В первом ответе, предложенном Анирудтом...
Просто примените функцию HoughCirles после пороговой функции (2-й шаг).
Затем вы можете напрямую рисовать круги вокруг зрачка и использовать радиус (r) и центр глаза ( x,y) вы можете легко узнать центр глаза..

person Aditya Byreddy    schedule 03.03.2015