目标:我正在尝试使用视频作为输入来获取虹膜的大小(宽度/半径)。
我尝试过 HoughCircles,但它似乎并不精确,因为虹膜圈似乎不太准确。我已经掌握的信息是眼睛瞳孔的中心点及其半径。
有人建议我找到虹膜边缘以尝试从瞳孔中心向外测量梯度幅度。然后使用直方图使用梯度最大值的累积来找到虹膜宽度。从特定点开始,我不确定以哪种方式实现这一点。
我在眼睛 ROI 上使用了 Sobel 算子来尝试获得梯度,输出如下所示。
索贝尔图像代码:
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);
}
我不完全确定下一步如何进行。任何建议或意见表示赞赏。如果我错过了任何信息或者我对某事含糊不清,请告诉我。非常感谢提前!
编辑:我应该更好地解释我的应用程序的上下文,所以我为此道歉。我正在测量来自视频输入的帧上眼睛的瞳孔扩张。我已经知道瞳孔中心点的位置和瞳孔的半径。我试图找到虹膜的大小,以便可以使用从眼睛到相机的距离的变化来补偿对瞳孔大小的误解值,因为如果眼睛变得更靠近相机,瞳孔当然会出现更大而不膨胀。我也可能会尝试其他方法来解决这个问题,例如眼角,但我认为既然我已经有几个瞳孔特征,我将从虹膜开始。
再次,很抱歉之前遗漏了这个细节。谢谢!