基于MATLAB的掌纹ROI智能提取与图像分割系统
项目介绍
本项目是一个用于生物特征识别预处理阶段的MATLAB系统,专注于从原始手掌图像中自动提取感兴趣区域(ROI)。该系统能够处理复杂的背景,通过一系列图像处理算法实现手掌的分割、关键点定位、几何校正,最终输出标准化的掌纹中心区域图像。该工具旨在通过自动化流程消除平移、旋转和光照变化对特征提取的影响,为后续的模式匹配提供高质量的数据基础。
功能特性
- 灵活的图像获取:支持通过文件对话框选择多种格式(jpg, png, bmp, tif)的手掌图像;若用户取消选择,系统自动生成合成的手掌数据用于功能演示。
- 图像增强与预处理:包含灰度化处理与高斯滤波去噪,有效提升图像质量。
- 鲁棒的图像分割:结合Otsu自适应阈值分割与形态学操作(闭运算、开运算、孔洞填充),能够精准分离手掌前景,并利用最大连通区域算法去除背景噪点。
- 关键点智能定位:基于轮廓-质心距离曲线分析,自动检测指间谷底(主要是食指-中指、无名指-小指连接点)作为几何校正的参考点。
- 几何校正与归一化:根据关键点连线计算旋转角度,对手掌图像进行平面旋转校正,消除姿态偏差。
- ROI自动裁剪:建立局部坐标系,截取固定大小(默认为128x128像素)的掌纹中心区域,并具备边界越界自动补零保护机制。
- 全流程可视化:提供包含6个子图的详细结果展示,涵盖从原图、分割掩膜、距离分析曲线到最终ROI的完整处理过程。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
使用方法
- 在MATLAB环境中打开包含脚本的文件夹。
- 直接运行主函数。
- 在弹出的文件选择窗口中选择一张手掌图片。
- 若想查看演示效果,在文件选择窗口点击“取消”,系统将自动生成模拟数据运行。
- 程序运行结束后,将显示处理结果窗口,并在命令行输出“处理完成”。
详细功能与实现逻辑
本项目的主程序通过以下步骤实现完整的ROI提取流程:
1. 图像获取与初始化
程序启动后首先初始化参数(高斯模糊sigma=1.0,ROI尺寸128x128)。系统尝试调用文件选择接口。如果未读取到文件,则调用内置的合成函数生成包含椭圆(模拟手掌中心)和旋转椭圆(模拟手指)的二值图像,确保逻辑可测试。
2. 预处理
将输入图像转换为双精度浮点型。如果图像是彩色的,则转换为灰度图。随后应用高斯滤波器(
imgaussfilt)平滑图像,减少高频噪声对后续分割的影响。
3. 分割与形态学处理
- 阈值分割:使用
graythresh 计算全局Otsu阈值,并进行二值化。 - 形态学优化:
* 填充二值图像中的孔洞。
* 使用半径为5的圆盘结构元素进行开运算(断开细小连接)和闭运算(平滑轮廓边缘)。
- 去噪:通过
bwareafilt 仅保留面积最大的连通区域,确保提取的是手掌本体而非背景杂物。
4. 关键点定位(核心算法)
系统通过以下逻辑定位用于校正的手指谷底点:
- 提取二值掩膜的最外层轮廓,并计算区域质心。
- 距离变换分析:计算轮廓上所有点到质心的欧氏距离,形成距离曲线。
- 曲线平滑:对距离曲线进行移动平均平滑,消除锯齿干扰。
- 极值检测:在距离曲线中寻找局部极小值(谷底)和局部极大值(指尖)。
- 筛选策略:
* 根据点到质心的距离阈值排除过远或过近的噪点。
* 通过角度排序或距离特征,从候选谷底中筛选出分别代表“食指-中指”和“无名指-小指”连接处的两个关键点(P1和P2)。
5. 几何校正
- 角度计算:计算P1和P2两点连线相对于水平线的倾斜角度。
- 图像旋转:以图像中心为原点,使用双三次插值(原图)和最近邻插值(掩膜)将图像旋转,使得关键点连线在校正后保持水平。
- 坐标变换:计算旋转矩阵,将原始关键点P1、P2的中点坐标映射到旋转后的新图像坐标系中。
6. ROI定位与裁剪
- 以变换后的两关键点连线中点为基准。
- 根据两关键点间的欧氏距离,按一定比例(系数0.2)向手掌内侧(垂直于连线方向)偏移,确定ROI的中心坐标。
- 根据预设尺寸(128x128)计算裁剪矩形框。
- 执行裁剪操作,若裁剪区域超出图像边界,则调用填充函数用黑色背景补齐,防止程序报错。
7. 结果展示
程序最终生成一个包含六个子图的图形窗口:
- 原始采集图像:显示原图及提取的绿色轮廓和质心。
- 分割掩膜与关键点:显示二值化结果,标出P1、P2关键点及连线。
- 轮廓-质心距离曲线:展示用于特征点检测的距离波形图。
- 旋转校正后图像:显示几何校正后的手掌及ROI选取框。
- 提取ROI:最终截取的原始灰度ROI区域。
- ROI增强效果:对提取的ROI进行直方图均衡化(HE),展示增强后的纹理细节。