如何精准识别网格单元格内的4类卡片与空单元格?
网格板件卡片识别解决方案
场景说明
带网格的板件每个网格单元格可放置以下卡片或留空:



当前已完成板件图像变换处理,可独立裁剪出每个单元格区域,先后尝试直方图比对、模板匹配方案识别效果较差;后续采用平均HSV值区间判断的方案存在分类不稳定问题,典型问题为白色卡片的Hue值检测结果在350、1之间跳变,无法稳定分类。
现有方案失效核心原因
- 直方图比对、全尺寸模板匹配对光照波动、裁剪位置偏移、卡片轻微印刷色差的容忍度极低,只要实际拍摄图像和模板有轻微偏差就会匹配错误
- 直接使用全图平均HSV做判断存在两个硬伤:一是Hue通道是环形取值(0和360对应同一个红色端点,350和1本质属于相邻色相区间,线性区间判断必然会把同色分到两类);二是白、灰、黑这类低饱和度像素的Hue值本身是无意义的随机噪声,混入统计会直接带偏整体结果。
可直接落地的稳定识别方案
1. 单元格预处理消除基础干扰
- 对裁剪得到的单元格图像,先裁掉边缘10%~15%的区域,仅保留中心主体部分,彻底避开网格线、单元格边框、卡片边缘阴影、印刷白边的干扰
- 对保留的中心区域做光照归一化:将RGB三个通道的像素值做线性拉伸,把通道内亮度最低的0.5%像素映射为0,亮度最高的0.5%像素映射为255,抵消环境光强弱变化带来的整体明暗偏差
2. 优化HSV统计逻辑,解决数值跳变问题
不要直接计算全图平均HSV,先筛选有效像素再做分类统计
- 逐像素判定有效性:将饱和度低于10%、亮度低于15%、亮度高于95%的像素标记为无效像素——这类像素对应高光、阴影、白色印刷区域,本身没有明确色相,Hue值为随机噪声,不参与后续统计
- 对剩余有效彩色像素做环形Hue区间适配:判定色相时不要用线性区间切割,比如红色邻域同时覆盖Hue值
[0,20]和[340,360]两个段,从根源解决Hue值在0/360边界跳变导致的分类错误 - 基于三类统计特征做分类,不要仅依赖平均值:
- 无效像素占比:占比超过90%时,直接判定为白色卡片或空单元格,二者可通过平均亮度区分:空单元格为板件底色,平均亮度比白色卡片低15%以上
- 有效像素的Hue值众数(不要用平均值,平均值易被少量杂色拉偏):众数落在220250区间为蓝色卡片,落在4570区间为黄色卡片
- 有效像素占比:带图案的旅程卡彩色像素占比在30%~70%区间,远低于纯色蓝、黄卡片85%以上的彩色像素占比,且旅程卡的Hue值不会集中在单一区间,会出现多个明显的色相峰值,可和纯色卡明确区分
3. 低置信度兜底方案
当上述规则判断的置信度低于阈值(比如两类目标的特征差值小于10%),可采用轻量匹配兜底,不需要部署重模型:
- 将预处理后的单元格中心区域缩放到16*16分辨率的灰度图,和提前存储的5类标准样本(空、蓝卡、白卡、黄卡、旅程卡)计算像素差的绝对值之和,取差值最小的类别作为结果即可。该方法比全尺寸模板匹配运算速度快两个数量级,抗偏移、抗光照干扰能力更强,足够覆盖所有边缘场景。
内容的提问来源于stack exchange,提问作者Marvin Gornicec
相关产品推荐
相关产品推荐

