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

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

相关文章

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

如何提高Redis服务器的最大打开文件数限制

《如何提高Redis服务器的最大打开文件数限制》文章讨论了如何提高Redis服务器的最大打开文件数限制,以支持高并发服务,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关