我的项目是提取失踪者虹膜的不变特征,并将其与找到的人进行比较以找到匹配。
我成功应用了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()
答案 0 :(得分:0)
如果你希望Hough算法每次产生相同的结果,你必须每次都用相似的图像喂它。基本上你想要做的是预处理瞳孔的图像,这样对于霍夫而言,它们看起来几乎完全相同。查看 Otsu的阈值,自适应Threhsolding 以及所有酷炫的东西,比如模糊,不清晰的遮蔽,碰撞等。
请记住在预处理的每一步控制图像和代码 - 它很容易失控和混乱。直观地比较图像并寻找定义良好(理想情况下没有噪声和其他圆圈),类似地查看瞳孔的二进制图像,以了解霍夫是否会看到图像几乎相同,从而检测具有相同参数的圆。
另一个想法是完全放弃霍夫的想法。查看“查找轮廓”及其功能(link1; link2)。没有数据就不能说,但它绝对是一个值得注意的替代方案。