Невозможно обнаружить зрачок глаза, используя круг hough в открытом резюме и python

Мой проект состоит в том, чтобы извлечь инвариантные характеристики радужной оболочки пропавшего человека и сравнить их с найденными людьми, чтобы найти совпадение.

Я успешно применил haar-cascade для обнаружения лица и глаз, а затем применил smooth() и canny() для удаления шума и обнаружения краев.

Теперь я застрял с кружком, чтобы определить зрачок и центр зрачка, то есть положение радужной оболочки. Я должен настроить параметры круга для каждого изображения, чтобы он обнаруживал зрачок. И я понятия не имею, как я получаю центр и приступаю к извлечению инвариантной функции радужной оболочки .. пожалуйста, помогите!

вот мой код

import numpy as np
import cv2
face_cascade =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye_tree_eyeglasses.xml')
img = cv2.imread('sheikha.jpg',0)
img = cv2.bilateralFilter(img, 5, 175, 175) 
edges = cv2.Canny(img, 100, 100)
faces = face_cascade.detectMultiScale(
        img, scaleFactor=1.3, minNeighbors=5, minSize=(30, 30))
print "Detected %d faces." % len(faces)
print "Drawing rectangles..."
for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x + w, y + h), (0,255,0), 2)
        eyes = eye_cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=5,minSize=(10,10))
        for (ex,ey,ew,eh) in eyes :
            #if neye < 3:
            imgCrop = edges[ey:ey+eh,ex:ex+ew]           
            circles = cv2.HoughCircles(imgCrop,cv2.cv.CV_HOUGH_GRADIENT,1,60,param1=90,param2=10,minRadius=10,maxRadius=20) 
            circles = np.uint16(np.around(circles))
            for i in circles[0,:]:
                cv2.circle(imgCrop,(i[0],i[1]),i[2],(255,255,0),2)

print "Drawn Rectangles."
#cv2.imshow('edge',edges)
cv2.imshow('image',imgCrop)
cv2.waitKey(0)
cv2.destroyAllWindows()

person sheikha    schedule 12.03.2017    source источник
comment
Где используется изображение?   -  person Jeru Luke    schedule 12.03.2017
comment
На самом деле это всего лишь часть моего проекта, когда он пойдет правильно, я объединю его с основным кодом проекта.. так что этот код должен работать для разных изображений.. изображение зависит от пользователя, который его загружает.. этот код, который я загружаю, только для картинки .. когда я даю другую картинку, она не обнаруживает зрачок, и это моя проблема   -  person sheikha    schedule 12.03.2017
comment
несколько примеров изображений помогут   -  person Jeru Luke    schedule 13.03.2017
comment
@JeruLuke для одного изображения circles =cv2.HoughCircles(imgCrop,cv2.cv.CV_HOUGH_GRADIENT,1,60,param1=90,param2=10,minRadius=10,maxRadius=20) определяет зрачок и это не работает для любых других изображений   -  person sheikha    schedule 14.03.2017


Ответы (1)


Если вы ожидаете, что алгоритм Хафа каждый раз будет давать один и тот же результат, вам придется каждый раз скармливать ему одно и то же изображение. По сути, вам нужно предварительно обработать изображение зрачка, чтобы для Хафа все они выглядели почти одинаково. Ознакомьтесь с Thresholding, Adaptive Threhsolding от Otsu и другими полезными функциями, такими как размытие, нерезкое маскирование, размытие и т. д.

Не забывайте контролировать изображение вместе с кодом на каждом этапе предварительной обработки — это может легко выйти из-под контроля и запутаться. Визуально сравните изображения и найдите четко определенное (в идеале без шума и других кругов), аналогично выглядящее бинарное изображение зрачка, чтобы узнать, увидит ли Хаф изображения почти идентичными и, таким образом, обнаружит круги с одинаковыми параметрами.

Другой идеей был бы полный отказ от идеи Хафа. Ознакомьтесь с разделом Поиск контуров и их характеристик (link1; ссылка2). Не могу сказать без данных, но это определенно альтернатива, о которой нужно знать.

person m3h0w    schedule 12.03.2017
comment
Картинки зависят от пользователя, который их загружает. т.е. картинки могут отличаться друг от друга - person sheikha; 12.03.2017