Quelles sont les valeurs correctes d'utilisation / de paramètre pour HoughCircles dans OpenCV for Iris detection?
J'ai lu sur le sujet, mais ne peut pas obtenir de l'idée de "plain English" à propos de l'utilisation et des paramètres de la HoughCircles
(spécialement les uns après CV_HOUGH_GRADIENT
).
Qu'est ce qu'un accumulateur de seuil? Sont 100 "voix" d'une valeur de droite?
J'ai pu trouver et "masque" de l'élève, et travaillé mon chemin à travers la Canny
fonction, mais j'ai du mal au-delà et mon problème est le HoughCircles
fonction. Il semble y avoir, à défaut de trouver l'Iris cercle et je ne sais pas pourquoi.
Et c'est la fonction que je suis en train de travailler sur:
def getRadius(area):
r = 1.0
r = math.sqrt(area/3.14)
return (r)
def getIris(frame):
grayImg = cv.CreateImage(cv.GetSize(frame), 8, 1)
cv.CvtColor(frame,grayImg,cv.CV_BGR2GRAY)
cv.Smooth(grayImg,grayImg,cv.CV_GAUSSIAN,9,9)
cv.Canny(grayImg, grayImg, 32, 2)
storage = cv.CreateMat(grayImg.width, 1, cv.CV_32FC3)
minRad = int(getRadius(pupilArea))
circles = cv.HoughCircles(grayImg, storage, cv.CV_HOUGH_GRADIENT, 2, 10,32,200,minRad, minRad*2)
cv.ShowImage("output", grayImg)
while circles:
cv.DrawContours(frame, circles, (0,0,0), (0,0,0), 2)
# this message is never shown, therefore I'm not detecting circles
print "circle!"
circles = circles.h_next()
return (frame)
source d'informationauteur pctroll
Vous devez vous connecter pour publier un commentaire.
HoughCircles
peut être un peu délicate, je vous suggère de regarder à travers ce fil. Où un tas de gens, moi y compris ;), discuter de la façon de l'utiliser. Le paramètre clé estparam2
le soi-disantaccumulator threshold
. En gros, plus il est élevé, moins les cercles que vous obtenez. Et ces cercles ont une probabilité plus élevée d'être corrects. La meilleure valeur est différente pour chaque image. Je pense que la meilleure approche est d'utiliser un paramètre de recherche surparam2
. C'est à dire. continuer à essayer de valeurs jusqu'à ce que vos critères sont réunis (comme: il y a 2 cercles, ou max. nombre de cercles qui ne se chevauchent pas, etc.). J'ai un code qui fait une recherche binaire sur 'param2', de manière à satisfaire aux critères rapidement.L'autre facteur crucial est de pré-traitement, essayez de réduire le bruit, et de simplifier l'image. Une combinaison de flou/seuillage/savant est bon pour cela.
De toute façon, j'obtiens ceci:
De votre uploded image, à l'aide de ce code:
Mise à jour
Je réalise que j'ai un peu de miss lu votre question! Vous voulez vraiment trouver les iris bords. Ils ne sont pas aussi clairement définis, que les élèves. Nous avons donc besoin de l'aide
HoughCircles
autant que possible. Nous pouvons le faire, par:Et puis nous avons besoin de faire un param recherche sur
param2
de nouveau. Remplacer la " HoughCircles de la ligne dans le code ci-dessus avec ceci:Nous obtient ceci:
Qui n'est pas trop mauvais.
Mon autre suggestion est d'utiliser Seuil et à l'analyse Blob. Il est plus simple pour détecter les iris que l'utilisation habile de bord et de la transformation de hough.
Ma voie, c'est... d'Abord vous seuil. Ramasser une valeur de seuil jusqu'à ce que l'image en noir et blanc de produire seulement (de couleur noire) de l'iris et les cils.
Puis séparer les iris et les cils en les mettant dans l'analyse blob valeur min longueur au XX et largeur min à AA. Le XX et YY valeur est la valeur de l'iris de longueur et de largeur.