Я пытался обнаружить область радужной оболочки глаза и затем нарисовал круг вокруг обнаруженной области. Мне удалось получить четкое черно-белое изображение глаза, содержащее только зрачок, линию верхнего века и бровь, используя пороговую функцию.
Как только это будет достигнуто HoughCircles
применяется для определения наличия кругов на изображении. Тем не менее, он никогда не обнаруживает никаких круговых областей. После прочтения HoughCircles
, говорится, что
Метод градиента Хафа работает следующим образом:
Сначала изображение необходимо пройти через фазу обнаружения края (в этом случае
cvCanny()
).
Затем я добавил хитрый детектор после пороговой функции. Это все еще производит нулевые обнаруженные круги. Если я уберу пороговую функцию, изображение глаза станет занятым ненужными линиями; следовательно я включил это в.
cv::equalizeHist(gray, img);
medianBlur(img, img, 1);
IplImage img1 = img;
cvAddS(&img1, cvScalar(70,70,70), &img1);
//converting IplImage to cv::Mat
Mat imgg = cvarrToMat(&img1);
medianBlur(imgg, imgg, 1);
cv::threshold(imgg, imgg, 120, 255, CV_THRESH_BINARY);
cv::Canny(img, img, 0, 20);
medianBlur(imgg, imgg, 1);
vector<Vec3f> circles;
/// Apply the Hough Transform to find the circles
HoughCircles(imgg, circles, CV_HOUGH_GRADIENT, 1, imgg.rows/8, 100, 30, 1, 5);
Также обратите внимание, что изображение получено непосредственно с веб-камеры.
Попробуйте использовать дифференциальный оператор Даугмана Integro. Он вычисляет центр радужки и зрачка и рисует точный круг на границах радужки и зрачка. Код MATLAB доступен здесь обнаружение границы радужной оболочки глаза методом Даугмана. Поскольку я не знаком с OpenCV, вы можете конвертировать его.
Двойное изображение глаза содержало три различных аспекта: ресницы, глаз и бровь. Основная цель — добраться до интересующей области, которая является глазом / радужной оболочкой, за исключением бровей и ресниц. Я выполнил следующие действия:
Шаг 1: Откажитесь от верхней половины изображения глаза, поэтому у нас остаются ресницы, область глаз и небольшие области теней.
Шаг 2: Найти контуры
Шаг 3: Найдите самый большой контур, чтобы у нас была только область глаза
Шаг 4: Используйте ограничивающий прямоугольник, чтобы создать прямоугольник вокруг области глаз
http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html
Теперь у нас есть область интереса. С этой точки зрения я теперь собираю эти изображения и использую нейронную сеть для обучения системы эмулировать свойства мыши. Сейчас я изучаю нейронную сеть link1 и как использовать его в opencv.
Использование предыдущих методов, которые включали в себя обнаружение точки радужной оболочки, создание вектора глаза, отслеживание его и вычисление ссадины на экране, отнимает много времени. Также на радужной оболочке отражается свет, что затрудняет ее обнаружение.