Was sind die richtigen Verwendung/parameter-Werte für HoughCircles in OpenCV für die Iris-Erkennung?
Die ich gelesen habe über das Thema aber nicht auf die Idee kommen, in "verständlicher Sprache" über die Verwendung und die Parameter für HoughCircles
(speziell diejenigen, die nach CV_HOUGH_GRADIENT
).
Was ist ein Akku-Schwelle? 100 "Stimmen" einen richtigen Wert?
Ich finden konnte und die "Maske" der Schüler, und arbeitete mich durch die Canny
- Funktion, aber ich bin kämpfen, darüber hinaus und mein problem ist das HoughCircles
Funktion. Es scheint zu sein, scheitern bei der Suche nach der Iris " Kreis und ich weiß nicht, warum.
- Und dies ist die Funktion, die ich arbeite:
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)
InformationsquelleAutor pctroll | 2012-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
HoughCircles
kann etwas tricky, ich schlage vor, auf der Suche durch dieser thread. Wo eine Reihe von Menschen, einschließlich mir ;), diskutieren, wie es zu benutzen. Der key-parameter istparam2
, die so genannteaccumulator threshold
. Im Grunde, je höher es ist, desto weniger Kreise, die Sie erhalten. Und diese Kreise haben eine höhere Wahrscheinlichkeit der Richtigkeit. Der beste Wert für jedes Bild. Ich denke, der beste Ansatz ist die Verwendung einer parameter Suche aufparam2
. Dh. versuche es Werte, bis Ihre Kriterien erfüllt sind (wie: es gibt 2 Kreise, oder max. Anzahl der Kreise, die nicht überlappen, etc.). Ich habe einige code, der funktioniert eine binäre Suche auf 'param2', so dass es die Kriterien erfüllen schnell.Der andere entscheidende Faktor ist die pre-processing, versuchen, um das Rauschen zu reduzieren und zu vereinfachen, das Bild. Eine Kombination von Unschärfe/schwellenwertbestimmung/canny ist gut für diese.
Jedenfalls, bekomme ich diese:
Von Ihrem uploded Bild, mit diesem code:
Update
Ich begreife, dass ich etwas verpassen-deine Frage Lesen! Sie wirklich wollen, zu finden, die iris Kanten. Sie sind nicht so klar definiert, wie die Schülerinnen und Schüler. Also müssen wir helfen
HoughCircles
so viel wie möglich. Wir können dies tun, indem Sie:Und dann müssen wir ein param-Suche auf
param2
wieder. Ersatz der 'HoughCircles' - Zeile im obigen code mit diesem:Wird uns dies:
Das ist nicht zu schlecht.
sorry, ich vermisse deine Frage verstanden! Ich habe korrigiert meine Antwort zu tun, was Sie wollen :). Können Sie wahrscheinlich verwenden Sie Ihr Schwerpunkt-info, um die position der Kreise besser.
vielen Dank!. Und ja, ich kann gearbeitet aus der Mitte besser. Aber Es ist sehr interessant wie die Funktion findet den Kreis, trotz des Lärms (ich habe gelesen über Hough-Transformation, aber ich bin sehr visuell und ich hatte Canny und Glatt in der umgekehrten Reihenfolge).
InformationsquelleAutor fraxel
Mein alternativer Vorschlag ist die Verwendung von Schwellenwert und der Blob-Analyse. Es einfacher zu erkennen, die iris als die Verwendung von canny edge und hough-Transformation.
Meine Art ist... Sie Zuerst Schwelle. Pick-up alle threshold-Wert, bis die schwarz-weiß-Bild erzeugen nur (schwarze Farbe) iris und die Wimpern.
Dann trennen sich die iris und die Wimpern, indem Sie in blob-Analyse Wert min Länge auf XX und min-width auf YY. Der XX-und YY-Wert ist der Wert der iris, die Länge und die Breite.
InformationsquelleAutor Zulhilmi