基于颜色的人眼检测

发布时间:2026/8/26 17:32:01
基于颜色的人眼检测 8.2 人眼检测红眼检测最主要的难点在于红眼状态变化极大。 在简单场景下瞳孔形状、大小正常和普通瞳孔唯一区别只是颜色。然而红色反光扩散到虹膜区域造成不自然亮度分布的情况也十分常见。通常还会存在一小块白色高光点它是闪光灯在眼球表面的直接反光会让眼睛看起来更加自然。典型的红眼检测方案一般包含红色区域提取再结合肤色提取、形状模板匹配以及 / 或者人脸检测。部分算法还会使用分类器对检测结果做进一步优化。8.2.1 基于颜色的检测算法基于颜色的算法是最简单的一类红眼检测方法。其原理是检出有可能属于红眼瑕疵的红色区块。 红眼位置的一项典型约束条件是算法同时检测人脸肤色区域再依据红眼与肤色之间的相对位置判定一般要求眼睛几乎完全被周边肤色包围。一些基于颜色的方案还会检测眼白巩膜将眼白和肤色区分开。同时还可对红色区块施加几何约束例如剔除拉长变形、不可能是红色瞳孔的候选区域。 该类方法实现简单但无法利用更加复杂的特征例如眼球各组成部位特征或者人脸检测信息。基于颜色检测技术最大痛点之一难以精准划定待搜寻目标的颜色范围。通常红色、肤色等感兴趣色彩区域会采用硬阈值划定边界也可以使用软边界输出该像素属于目标色块的模糊概率。但想要找到合适的色彩边界阈值十分困难。 红眼颜色受闪光灯类型、图像传感器以及图像处理链路的影响很大。虽然这个问题相对容易解决可以针对成像系统微调阈值参数但是还有很多外部因素同样会改变红眼颜色包括不限于人物年龄、瞳孔张开程度、相机拍摄距离、眼球‑闪光灯之间的夹角。红眼颜色的变异程度极高哪怕是同一张照片里的同一个人两只眼睛的红眼瑕疵颜色都可能不一样甚至一只眼睛出现红眼、另一只眼睛正常见图 8.4。 除此以外如果闪光灯亮度不足移动设备拍照经常出现该情况环境外部光源会给整张照片带来明显的色偏进一步加大红眼颜色的变化范围。肤色、眼白的颜色也存在同样的颜色波动问题。图 8.4图 (a) 两只眼睛红眼现象差异巨大图 (b) 一只眼睛红眼另一只眼睛正常。红色区域可以在不同色彩空间中定义。在 RGB 色彩空间中有文献给出了如下判定条件式 (8.1)实际工程中常常不使用硬阈值而是定义红度函数。该函数用来估算像素颜色与红眼瑕疵的相似程度以此实现红色区域软边界划分。下面列出几种已发表的红度计算公式另一种思路不直接划定红色色彩区间而是将红度函数与亮度函数对比舍弃亮度值明显高于红度值的像素公式如下红色区域搜索也可以在 RGB 以外的色彩空间执行例如 YCC、HSL 色彩空间。8.2.5 节给出了一份完整示例介绍如何在 HSL 色彩空间完成红眼搜索与图像块提取。选定红色区域判定规则之后就可以生成一张图像掩码图标记每个像素是否属于红色区域这类图称为红度图。 根据红色区域判定规则是硬阈值还是软边界红度图可以是二值黑白图像或者灰度图像灰度红度图需要将红度函数数值归一化到对应图像的最值区间。图 8.5、8.6 就是利用上面公式计算出来的红度图。肤色提取流程和红色区块提取类似肤色检测相关内容详见本书第 3、5 章。还可以利用其他颜色线索辅助红眼检测检测眼白巩膜区域筛选闪光灯明显造成图像反光的区域剔除远处背景等无效区域。配合阈值分割与形态学运算融合多张掩码图就可以高效提取红色瞳孔相关实现见 8.2.5 节。内容总结核心要点红眼检测难点红眼颜色、形态变化范围大反光可扩散至虹膜眼球表面常附带白色闪光高光点同一个体双眼红眼效果都可能不一致。通用检测方案红色区块提取 肤色、形状模板、人脸检测高阶方案引入分类器优化结果。基于颜色检测方案最基础方案原理筛选红色像素利用肤色位置约束、眼白信息、瞳孔几何形状筛选候选红眼缺点没有利用人脸、眼球精细结构等高阶特征最大痛点红眼颜色受闪光灯、传感器、拍摄距离、角度、环境光、人物状态等多重因素影响很难找到通用、稳定的颜色阈值。两类红色判定实现方式硬阈值RGB 固定数值区间判断软阈值红度函数量化像素红色程度输出灰度红度图得到平滑过渡的红色区域文中列举了 5 种经典红度计算公式还有红度‑亮度联合抑制方案。可选色彩空间除 RGB 外还可选用 YCC、HSL 空间生成红度图作为中间结果配合肤色掩码、眼白检测、形态学操作最终分割出红眼瞳孔。