基于HSV色彩空间的图像颜色识别与自动分割提取系统
项目简介
本项目是一个基于MATLAB开发的计算机视觉仿真系统,专注于实现特定颜色(特别是红色)的自动识别、分割与提取。系统利用HSV(色调、饱和度、亮度)色彩空间对光照变化鲁棒性强的特点,通过一系列图像处理算法,实现了从复杂背景中精准分离目标物体的功能。该程序不仅具备标准的图像处理流程,还包含了鲁棒的错误处理机制(自动生成测试图像)和详细的结果统计分析,适用于机器视觉算法验证、颜色分拣模拟及目标检测教学演示。
核心功能特性
- 智能图像加载与容错机制:系统优先加载标准测试图像,若未找到文件,则自动调用内部算法生成包含红、绿、蓝几何图形的合成图像,确保程序在任何环境下均可运行。
- RGB至HSV空间转换:将图像色彩模型从RGB转换为HSV,利用色调(H)分量进行颜色区分,有效降低了亮度变化对识别结果的干扰。
- 双区间颜色阈值分割:针对红色在HSV色环上跨越0度和360度的特性,采用了双区间阈值逻辑(Hue趋近0和Hue趋近1),实现了对红色目标的精确锁定。
- 高级形态学滤波:集成数学形态学处理模块,通过开运算去除噪点,闭运算连接断裂区域,以及孔洞填充算法,保证生成的掩膜平滑且完整。
- 特定目标独立提取:基于优化后的二值掩膜,通过逻辑运算将目标物体从原图中完整“抠图”并独立显示,背景自动置为黑色。
- 连通域分析与可视化:自动统计识别到的目标数量、总像素面积及占比,并在原图上绘制绿色边界框(Bounding Box)及中心点,实时标注各区域面积。
实现原理与算法逻辑
本项目的主要执行逻辑严格按照计算机视觉的处理流水线进行设计,具体步骤如下:
1. 图像获取与预处理
程序启动后首先清理运行环境。在加载图像阶段,采用
try-catch结构检测本地是否有标准测试图(如
peppers.png)。如果无法读取,系统会触发
generateSyntheticImage逻辑,动态绘制一张包含红、绿、蓝圆形及灰色背景的合成图像,确保后续流程有图可依。
2. 色彩空间转换
读取的RGB图像被转换为HSV色彩空间。程序分离出H(色调)、S(饱和度)、V(亮度)三个通道。系统专门生成并显示了H通道的热力图,以便直观分析颜色的分布情况。
3. 基于阈值的颜色分割
为了识别红色目标,程序定义了严格的阈值范围:
- Hue (色调):由于红色位于色轮的起始和结束位置,程序定义了两个区间(0.94-1.0 和 0.0-0.08),通过逻辑“或”运算覆盖整个红色色域。
- Saturation (饱和度):设定下限(0.40)以排除白色或灰色的低饱和度区域。
- Value (亮度):设定下限(0.20)以排除过暗的黑色区域。
通过逻辑“与”运算结合上述条件,生成初始的二值化掩膜。
4. 数学形态学优化
初始掩膜通常包含噪点或内部空洞。系统采用半径为4像素的圆形结构元素进行以下处理:
- 开运算 (Open):先腐蚀后膨胀,有效移除背景中的细小噪点。
- 闭运算 (Close):先膨胀后腐蚀,用于平滑目标边界并连接断裂的区域。
- 孔洞填充 (Fill):识别并填充闭合轮廓内部的空洞,确保提取出的物体是实心的。
5. 目标提取 (抠图)
利用处理好的逻辑掩膜(Logical Mask),将其转换为无符号整型格式,并分别与原图的R、G、B三个通道进行点乘运算。掩膜为1(白色)的区域保留原像素值,掩膜为0(黑色)的区域被置零,从而实现背景移除和目标的独立提取。
6. 统计分析与标记
利用连通域标记算法(
bwlabel)识别分离出的各个独立目标区域,并通过
regionprops获取每个区域的属性(面积、中心点坐标、边界框)。
- 过滤机制:仅对面积大于50像素的区域进行标记,以过滤残留的微小噪点。
- 可视化绘图:遍历所有有效目标,在原图上绘制绿色矩形框标示位置,用蓝色十字标记几何中心,并以黄色文字实时显示该区域的像素面积。
- 数据汇总:计算所有目标的总面积及在整幅图像中的占比,并在控制台输出详细报告。
系统要求
- 软件环境:MATLAB R2016a 或更高版本。
- 工具箱支持:必须安装 Image Processing Toolbox (图像处理工具箱),用于支持
rgb2hsv, imopen, imclose, regionprops等核心函数。
使用方法
- 确保MATLAB环境中已安装Image Processing Toolbox。
- 将包含主逻辑的脚本文件(
main.m)放置于MATLAB的当前工作路径下。 - 直接运行
main函数。 - 程序将自动执行所有步骤,并弹出包含6个子图的综合结果窗口,分别显示:
* 原始RGB图像
* HSV色调分量热力图
* 原始二值化掩膜(含噪点)
* 形态学优化后的掩膜
* 提取的独立目标(背景移除)
* 最终识别可视化的标记结果
- MATLAB命令行窗口将输出识别到的目标数量、总面积及占比等统计数据。