为什么在尝试检测虹膜时 HoughCircles returns 0 个圆圈?
Why HoughCircles returns 0 circles while trying to detect irises?
我正在尝试检测眼睛的虹膜,但是 HoughCircles
return 有 0 个圆圈。
输入图像(眼睛)为:
然后我用这张图片做了以下事情:
cvtColor(eyes, gray, CV_BGR2GRAY);
morphologyEx(gray, gray, 4,cv::getStructuringElement(cv::MORPH_RECT,cv::Size(3,3)));
threshold(gray, gray, 0, 255, THRESH_OTSU);
vector<Vec3f> circles;
HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 2, gray.rows/4);
if (circles.size())
cout << "found" << endl;
所以最终的灰度图像是这样的:
我找到了这个问题Using HoughCircles to detect and measure pupil and iris,但尽管与我的问题相似,但它对我没有帮助。
那么为什么在尝试检测虹膜时 HoughCircles
return 0 个圆圈?
如果有人知道找到鸢尾花的更好方法,欢迎您。
对于同样的问题,我遇到了完全相同的问题。事实证明,houghcircles 并不是检测形状不佳的圆圈的好方法。
MSER 等特征检测方法在这些情况下效果更好。
import cv2
import math
import numpy as np
import sys
def non_maximal_supression(x):
for f in features:
distx = f.pt[0] - x.pt[0]
disty = f.pt[1] - x.pt[1]
dist = math.sqrt(distx*distx + disty*disty)
if (f.size > x.size) and (dist<f.size/2):
return True
thresh = 70
img = cv2.imread(sys.argv[1])
bw = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
detector = cv2.FeatureDetector_create('MSER')
features = detector.detect(bw)
features.sort(key = lambda x: -x.size)
features = [ x for x in features if x.size > 70]
reduced_features = [x for x in features if not non_maximal_supression(x)]
for rf in reduced_features:
cv2.circle(img, (int(rf.pt[0]), int(rf.pt[1])), int(rf.size/2), (0,0,255), 3)
cv2.imshow("iris detection", img)
cv2.waitKey()
或者您可以尝试使用卷积滤波器。
编辑:
对于那些对 c++ MSER 有疑问的人,here 是基本要点。
我正在尝试检测眼睛的虹膜,但是 HoughCircles
return 有 0 个圆圈。
输入图像(眼睛)为:
然后我用这张图片做了以下事情:
cvtColor(eyes, gray, CV_BGR2GRAY);
morphologyEx(gray, gray, 4,cv::getStructuringElement(cv::MORPH_RECT,cv::Size(3,3)));
threshold(gray, gray, 0, 255, THRESH_OTSU);
vector<Vec3f> circles;
HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 2, gray.rows/4);
if (circles.size())
cout << "found" << endl;
所以最终的灰度图像是这样的:
我找到了这个问题Using HoughCircles to detect and measure pupil and iris,但尽管与我的问题相似,但它对我没有帮助。
那么为什么在尝试检测虹膜时 HoughCircles
return 0 个圆圈?
如果有人知道找到鸢尾花的更好方法,欢迎您。
对于同样的问题,我遇到了完全相同的问题。事实证明,houghcircles 并不是检测形状不佳的圆圈的好方法。
MSER 等特征检测方法在这些情况下效果更好。
import cv2
import math
import numpy as np
import sys
def non_maximal_supression(x):
for f in features:
distx = f.pt[0] - x.pt[0]
disty = f.pt[1] - x.pt[1]
dist = math.sqrt(distx*distx + disty*disty)
if (f.size > x.size) and (dist<f.size/2):
return True
thresh = 70
img = cv2.imread(sys.argv[1])
bw = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
detector = cv2.FeatureDetector_create('MSER')
features = detector.detect(bw)
features.sort(key = lambda x: -x.size)
features = [ x for x in features if x.size > 70]
reduced_features = [x for x in features if not non_maximal_supression(x)]
for rf in reduced_features:
cv2.circle(img, (int(rf.pt[0]), int(rf.pt[1])), int(rf.size/2), (0,0,255), 3)
cv2.imshow("iris detection", img)
cv2.waitKey()
或者您可以尝试使用卷积滤波器。
编辑: 对于那些对 c++ MSER 有疑问的人,here 是基本要点。