やりたいこと
OpenCV・Python初心者です。虹彩認識に関する研究のため、目の画像から虹彩に相当する部分(ドーナツ状)のみを切りだした画像を
生成したいです。
そこで、前段階として、目の画像から虹彩の外縁より内側(虹彩+瞳孔)部分を楕円で検出して、新たに画像として保存したいのですが、どのような
プログラムをつくればいいでしょうか。
現状
現段階では、画像の中からハフ変換で円検出をするところまではできていますが、プログラムのどこをどのように変えれば楕円で
検出できるかがわかりません。以下が、円検出のプログラムです。
Python
1import cv2 2import numpy as np 3 4img = cv2.imread('C:/Users/Sakamoto/UBIRIS_200_150_R/Sessao_1/1/Img_1_1_1.jpg',0) 5img = cv2.medianBlur(img,5) 6cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR) 7 8circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20, 9 param1=50,param2=60,minRadius=0,maxRadius=0) 10 11circles = np.uint16(np.around(circles)) 12for i in circles[0,:]: 13 # draw the outer circle 14 cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2) 15 # draw the center of the circle 16 cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3) 17 18cv2.imshow('detected circles',cimg) 19cv2.waitKey(0) 20cv2.destroyAllWindows()
元画像のフォーマット
元画像のサイズは200×150で、それぞれの画像が24ビットカラーの画像とグレースケールの画像があります。
以下は元画像の例です。
補足
現段階で考えている流れとしては、
1.元画像から虹彩の外縁より内側(虹彩+瞳孔)部分を楕円で検出して新たな画像Aを生成。
2.画像Aから瞳孔部分を削除した画像Bを生成。
3.すべての元画像について1と2を行い、すべての画像Bのサイズを正規化。
というところまで行いたいと考えています。