gpt4 book ai didi

c++ - OpenCV 虹膜检测 C++

转载 作者:IT王子 更新时间:2023-10-29 01:23:58 26 4
gpt4 key购买 nike

目标:我正在尝试使用视频作为输入来获取虹膜的大小(宽度/半径)。

我已经尝试过 HoughCircles,但它似乎并不精确,因为虹膜圆似乎不太准确。我已经掌握的信息是眼睛瞳孔的中心点及其半径。

Grayscale Eye

有人建议我找到虹膜边缘,以尝试测量从瞳孔中心开始向外的梯度大小。然后使用使用梯度最大值累积的直方图来找到虹膜宽度。从特定点开始,我不确定以何种方式实现这一点。

我在眼睛 ROI 上使用了 Sobel 算子来尝试获得梯度,输出如下所示。

Sobel Eye

索贝尔图片代码:

void irisFind(Mat gradMat, Point2i pupCenter, int pupRad){

imshow("original", gradMat);


Mat gradX;
Mat gradY;
Mat absGradX;
Mat absGradY;

GaussianBlur(gradMat, gradMat, Size(3, 3), 0, 0, BORDER_DEFAULT);
equalizeHist(gradMat, gradMat);

//Generate Gradient along x
Sobel(gradMat, gradX, CV_16S, 1, 0, 3, 1, 0, BORDER_DEFAULT);
convertScaleAbs(gradX, absGradX);

//Generate Gradient along y
Sobel(gradMat, gradY, CV_16S, 0, 1, 3, 1, 0, BORDER_DEFAULT);
convertScaleAbs(gradY, absGradY);

addWeighted(absGradX, .5, absGradY, .5, 0, gradMat);

imshow("Sobel", gradMat);
}

我不太确定下一步该怎么做。任何建议或意见表示赞赏。如果我遗漏了任何信息或者我对某些事情含糊不清,也请告诉我。非常感谢!

编辑:我应该更好地解释我的应用程序的上下文,所以我为此道歉。我正在通过视频输入的帧测量眼睛的瞳孔扩张。我已经知道了瞳孔中心点的位置和瞳孔的半径。我试图找到虹膜的大小,以便可以使用从眼睛到相机的距离的变化来补偿瞳孔大小的误解值,因为如果眼睛靠近相机,瞳孔当然会出现没有膨胀的更大。我也可能会尝试其他方法来解释这一点,例如眼角,但我想既然我已经有了几个瞳孔特征,我将从虹膜开始。

再次抱歉之前遗漏了这个细节。谢谢!

最佳答案

澄清您在问题中谈论的建议:

“有人建议我找到虹膜边缘,尝试测量从瞳孔中心开始向外的梯度幅度。然后使用使用梯度最大值累积的直方图来找到虹膜宽度。我是从特定点开始,不确定以何种方式实现这一点。”

您具体可以做的是从您的瞳孔中心开始,并执行区域增长算法,其中您的停止条件而不是蜂鸣,例如灰度值差异太大,是梯度幅度的阈值。一些伪代码:

initalize list of points with center of your pupil
initialize a mask image to zero
while list of point is not empty
point pt = pop()
set maskImage at pt to 255
for pt2 in pt neighbourhood
if (gradientMagnitude at pt2 < THRESHOLD and maskImage at pt2 == 0)
list of points.add (pt2)

关于c++ - OpenCV 虹膜检测 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12844479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com