纸牌的识别

1.模板匹配

 #1 卡片识别:

         MATLAB函数识别区域

  #2 Corner 识别

          Edge detector

#3 Corner 编号

        通过找到卡片内部的暗区域来识别带有数字的角落,其质心最接近角落。 在所有标准卡片中,最靠近角落的暗区是标识卡片等级的数字或字母。 因此,最接近暗区质心的角可以标记为第一个角。 从那里,角之间的欧几里得距离用于找到短边和第二个角。

#4 简历变化

变换创建使用模板和目标图像中的四个有序角,找到将模板上的角映射到目标的角上的单应性。 方程 (1) 描述了使用我们想要找到的变换矩阵 A 的线性系统。 从 (1)、(2) 和 (3) 可以通过矩阵乘法和结果向量的归一化导出,使得第三个元素是 1。由于我们有 4 个角,每个角有 2 个方程,这给出了所需的数量 的方程来找到变换矩阵的所有元素。

#5 得分

使用在上一步中找到的变换,包含卡片的模板图像区域被映射到目标图像上。 然后对卡片内的所有像素求和平方差以获得匹配的分数(较低的分数是更好的匹配)。为了说明并非所有卡片都是旋转对称的,每个模板都计分两次。 第一次不旋转,第二次旋转 180 度。 这允许角落排序选择两个编号角中的任意一个作为第一个角,尽管卡片不是旋转对称的。

计算两个分数后,将两者中较小的一个报告为卡片和模板的匹配分数。

#6) 重复 对 52 个预训练模板中的每一个重复变换创建和评分。 得分最低的被选为最佳匹配,得分最低的模板被认为是正确的标识。

#7) 训练 这种方法的模板图像是按照数据收集部分中的描述获得的。 卡片检测、角查找和角排列步骤在训练图像上执行,与在目标图像上相同。 然后将生成的角和图像存储在数据库中以用于识别卡片。 对一副标准纸牌中的 52 张纸牌中的每一张重复此过程,以获得每张纸牌的模板图像。

SIFT失败原因分析:

SIFT 方法失败的原因 SIFT 方法可能无法准确识别卡片的首要原因是它的特征匹配不准确。 从图 5 中可以看出,vl_ubcmatch 将训练图像中的多个特征与目标图像中的相同特征进行匹配的情况并不少见。 这意味着如果训练图像中的 N 个关键点与目标图像中的同一点匹配,那么这些匹配中至少有 N-1 个是不正确的匹配。 此外,这意味着 RANSAC 经常发现最佳变换将模板中的所有点映射到单个点上。 这会导致匹配特征的数量不正确,从而导致错误的检测。

SIFT 有这个问题的原因是因为扑克牌的高度对称性。 扑克牌通常在卡片上多次重复出现相同的符号。 由于卡内的对称性,许多特征具有相似的特征描述符。 此外,由于 SIFT 将特征描述符按其主导方向对齐,因此某些特征描述符(例如菱形的角)几乎无法相互区分。 一个例子可以在图 6 中看到。在这个例子中,左侧菱形的顶角和底角都与右侧菱形的底角匹配。 这是因为当旋转到沿它们的主导方向时,钻石的顶角和底角看起来相同并且具有相似的 SIFT 特征描述符。

模板匹配的分析:

模板匹配非常适合检测和识别卡片。 然而,重要的是要注意这些结果是在理想情况下。 算法在非理想情况下的性能在第 V 节中介绍。
尽管该算法的准确性很高,但它并非没有缺陷。 总的来说,模板匹配的计算成本很高,识别一张卡片需要一分钟以上的时间。 主要费用是算法的评分部分,因为它对每张卡片运行 52 次(每个模板一次),并且需要对组成卡片的每个像素进行矩阵乘法。 这是一个需要进一步改进的领域,子采样等技术可以减少这个时间,但可能会牺牲准确性。

不理想情况下:

到目前为止,分析的图像具有自上而下的视角,卡片没有扭曲。 然而,情况并非总是如此,检查透视失真对算法准确性的影响很有趣。
图 7 是对具有透视失真的卡片进行操作的模板匹配算法的示例。该算法似乎没有遇到这种失真级别的任何困难,并且能够正确地将卡片识别为红心 A。

然而,对于如图 8 所示的更极端形式的失真,模板匹配算法会遇到错误,因为模板和目标图像之间的转换格式不正确。 这很可能是由于正确隔离卡片区域时出错,因为可能需要更改为最小区域大小和阈值等选择的常量以实现透视失真。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值