虹膜识别内圆检测 精定位 求最大比率

2023-10-27 22:30

本文主要是介绍虹膜识别内圆检测 精定位 求最大比率,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文和下文介绍如何对一个虹膜图像进行分割提取出虹膜,在虹膜分割中,最重要的是检测两个圆,一个内圆,一个是外圆。下面是两个圆的示意图。


本文先讲解如何检测内圆,在我的方法中,内圆的检测可分为四步:

1. 用Canny边缘检测和Hough变换从经过高斯平滑处理后的图片中检测圆。在此步操作,我故意把Hough变换的阈值设得比较小,这样我们就可以检测出很多圆了。下图就是用cvHoughCircle检测出的圆。


可以看到,在此步中,我们检测到了圆,但是有很多圆,我们现在要想办法找到我们要的那个内圆。下面的步骤就是我找内圆的方法。

2. 把原图二值化,这个可以通过cvThreshold很容易实现,阈值设在五十左右就可以了。阈值化后的图像如下:


这个二值化后得到的图像是为了后面计算每个圆中包含的瞳孔点比率做准备的。

3. 计算第一步中得到的每个圆的一个比率,计算是根据第二步中二值图像进行。比率的定义如下

PupilInclusion Rate = Number of black points / Area of circle
即:用每一个circle中包含的黑点的个数除以圆的面积
4. 在计算出每一个圆的比率后,找到比率最大的那个,并把那个作为最后的内圆,这样就可以完美得检测出内圆了。

 

opencv代码如下:

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;int main()
{Mat srcImage=imread("C://1.bmp");Mat midImage,dstImage,edge;imshow("原始图",srcImage);threshold(srcImage, srcImage, 30, 200.0, CV_THRESH_BINARY);//二值化int cn=0;//cn是圆的个数int radius=0;float ratio = 0;float maxratio = 0;float result[3];cvtColor(srcImage,midImage,COLOR_BGR2GRAY);blur(midImage,edge,Size(3,3));Canny(edge,edge,3,9,3);GaussianBlur(midImage,midImage,Size(9,9),2,2);vector<Vec3f> circles;HoughCircles(midImage,circles,CV_HOUGH_GRADIENT,2,10,200,80,0,0);for(cn=0;cn<circles.size();cn++){Point center(cvRound(circles[cn][0]),cvRound(circles[cn][1]));radius=cvRound(circles[cn][2]);//	circle(srcImage,center,3,Scalar(0,255,0),-1,8,0);//	circle(srcImage,center,radius,Scalar(155,50,255),3,8,0);//int width = srcImage.cols;int height = srcImage.rows;	int value; //pixel valueint count = 0;for(int i=0;i<height;i++){for(int j=0;j<width;j++){if (sqrt(pow(float(center.x-j),2)+pow(float(center.y-i),2))< radius){//获得某点的像素值value = srcImage.at<Vec3b>(i,j)[2];  //cvGetReal2D(img,i,j);if(value == 0)count++;}}ratio = float(count)/(3.14*radius*radius);if (ratio >= maxratio){result[0] = circles[cn][0];result[1] = circles[cn][1];result[2] = radius;maxratio = ratio;}}printf("黑色点像素的个数:%d\n",count);printf("瞳孔重合比率:%f\n",ratio);Point center1(cvRound(result[0]),cvRound(result[1]));circle(srcImage,center1,3,Scalar(0,255,0),-1,8,0);circle(srcImage,center1,result[2],Scalar(155,50,255),3,8,0);}if(cn==0){printf("No Circle Detected!!Please Check!!\n");system("pause");}imshow("效果图",srcImage);waitKey(0);return 0;
}

一定要注意这段代码是在循环里面的:

 if (ratio >= maxratio){result[0] = circles[cn][0];result[1] = circles[cn][1];result[2] = radius;maxratio = ratio;}

而且result[0]=cricles[cn][0];
最后的运行结果如下所示:
在这里插入图片描述
这样就把所有可能的霍夫圆的重合的最大比率的圆画出来了,输出统计到黑色像素点的总个数。

这篇关于虹膜识别内圆检测 精定位 求最大比率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/288849

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

CSS Anchor Positioning重新定义锚点定位的时代来临(最新推荐)

《CSSAnchorPositioning重新定义锚点定位的时代来临(最新推荐)》CSSAnchorPositioning是一项仍在草案中的新特性,由Chrome125开始提供原生支持需... 目录 css Anchor Positioning:重新定义「锚定定位」的时代来了! 什么是 Anchor Pos

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.