python滑动条来设置阈值houghcircle_python – 用于虹膜检测的OpenCV中HoughCircles的正确使用/参数值是什么?...

本文探讨了使用OpenCV的HoughCircles函数检测虹膜时如何调整参数,特别是累加器阈值param2。建议通过参数搜索找到最佳值,并结合预处理步骤如Canny边缘检测和高斯平滑减少噪声。代码示例展示了如何应用这些技巧来改善虹膜检测效果。
摘要由CSDN通过智能技术生成

HoughCircles可以有点棘手,我建议看看

this thread.一堆人,包括我在内)讨论如何使用它.关键参数是param2,即所谓的累加器阈值.基本上,越少圈越多.这些圈子有更高的正确概率.每个图像的最佳值是不同的.我认为最好的方法是在param2上使用参数搜索. IE浏览器.继续尝试值,直到您的条件得到满足(例如:有2个圈子或最多不重叠的圈子数等).我有一些代码对’param2’进行二进制搜索,所以它很快符合标准.

另一个关键因素是预处理,尝试降低噪音,并简化图像.模糊/阈值/坎尼的一些组合对此很有好处.

无论如何,我得到这个:

从您的lolo图像,使用此代码:

import cv

import numpy as np

def draw_circles(storage, output):

circles = np.asarray(storage)

for circle in circles:

Radius, x, y = int(circle[0][3]), int(circle[0][0]), int(circle[0][4])

cv.Circle(output, (x, y), 1, cv.CV_RGB(0, 255, 0), -1, 8, 0)

cv.Circle(output, (x, y), Radius, cv.CV_RGB(255, 0, 0), 3, 8, 0)

orig = cv.LoadImage('eyez.png')

processed = cv.LoadImage('eyez.png',cv.CV_LOAD_IMAGE_GRAYSCALE)

storage = cv.CreateMat(orig.width, 1, cv.CV_32FC3)

#use canny, as HoughCircles seems to prefer ring like circles to filled ones.

cv.Canny(processed, processed, 5, 70, 3)

#smooth to reduce noise a bit more

cv.Smooth(processed, processed, cv.CV_GAUSSIAN, 7, 7)

cv.HoughCircles(processed, storage, cv.CV_HOUGH_GRADIENT, 2, 32.0, 30, 550)

draw_circles(storage, orig)

cv.ShowImage("original with circles", orig)

cv.WaitKey(0)

更新

我意识到我有点想念你的问题!你其实是想找到虹膜边缘.他们不像学生那么明确.所以我们需要尽可能地帮助HoughCircles.我们可以这样做:

>指定虹膜的尺寸范围(我们可以从瞳孔尺寸中找出合理的范围).

>增加圆中心之间的最小距离(我们知道两个虹膜不能重叠,所以我们可以安全地将其设置为我们最小的虹膜尺寸)

然后我们需要再次对param2进行param搜索.用以下代码替换上述代码中的“HoughCircles”行:

cv.HoughCircles(processed, storage, cv.CV_HOUGH_GRADIENT, 2, 100.0, 30, 150,100,140)

得到我们这个:

哪个不是太糟糕

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值