突发奇想,动手去做。 截图1920*1080。 HSV,一种颜色模型,类似于常见的红绿蓝RGB。 H:色调 S:饱满度 V:明度 在Matlab中将手机截图分解成这三个层次。如下图。 图1 原图 图2 HSV三个层次 从图上可以观察到:
去掉上下部分。如下图3。 图3 去掉上下 首先确定人物坐标,红点。 三个图中的人物明显区别周围区域,利用Matlab对人物区域数据进行统计分析。或者简单粗暴如下图4。 图4 H层人物区域部分数据 H层,人物主要落在范围A:0.6458—0.7222。 S层,人物主要落在范围B:0.3000—0.4500。(S层井盖落在0-0.1500)红色区域受到动物眼睛的干扰。 V层,人物主要落在范围C:0.2200—0.3400。红色区域受到动物眼睛的干扰。 由此,我们在三个图层加限制条件。 在H层找到值落在A的像素点,这些像素点都固定为0.7222。再找值不是0.7222的像素点全固定为0。 同理在S层,V层重复上一句话的操作。S层固定为1,V层固定为0.36。总体效果如下图5。
图6 取出人物 H层: S层:, V层: 红色区域为笑脸眼睛的干扰。发现H层并没有受到干扰。如果将H、S、V层点对点元素相乘,那么最后得到的矩阵Image_HSV在上图红色矩形框定的区域即为0了。因为H层红色矩形框定的区域框定的区域对应的像素值为0。0乘任何都为0。 Image_HSV = H .* S.* V; Image_HSV,如下图6。 图6 HSV三层再合成 可见,人物只有可怜的一点。 利用形态学的膨胀。 结构元素对象用15*15的正方形。 两次膨胀后的效果。 四次膨胀后的效果,并二值化。 接下来找到人物坐标(x,y) 从上往下,从左到右扫描,最后一个白点取y。 从左到右,从上到下扫描,最后一个白点取x。 特别地,当遇到井盖时,要对S层再附加一层约束条件,去除井盖。 H层井盖: V层井盖: S层加约束条件井盖: 可见,H,V层所出现的井盖,在S层加约束条件后消失。但S层出现点状带,而H,V层却没有。三层相乘,干扰消失。如下图。接下来确定跳台坐标。 我们采用HSV的S层来作为母板,进行处理。如下图7 图7 跳台母板 下一个跳台的随机性,会有时向左跳,有时向右跳。
故将图像转置。我们就不用判断左右了。如下图8。 转置:原来(x,y),转置后变成(y,x)。 图8 跳台母板转置 可以看到背景色是渐变的。如下图9。 图9 渐变的背景色 把背景色统一为一种颜色。只看第一行,统一的背景色规定为从左边黑色部分到第一次出现背景色的值。 用unique函数找到第一行中所有出现的背景色的值。则下图中统一的背景色的值为0.3412。 则遍历所有像素点,只要像素点的值不与统一背景色相同,则置为统一背景色。效果如下图10。 图10 统一背景色 我们只要如下图11,从左到右,从上到下找到第一个不与背景色相同的点(蓝点),则为跳台最左边的顶点。最左边的点里包含跳台的行坐标x3。接下来要确定列坐标y4。 图11 含背景区域 要确定列坐标y4还需要进一步处理图片。 固定在蓝点所在的行x3,从左往右,每次往右一个像素点(y3+m)。则点(x3,y3+m)垂直往上找最后一个不与背景色相同的点,则这个点的坐标应为(x3-n,y3+m)。如下图12。统计m个数据中,找到使n最大的点(红线最长的点)。第一个出现n最大的点(第一个红线最长的点)则为黄点。所以可以确定跳台的坐标(x3,y4)。测试得m取200合适所有情况,n取最大上限100合适。 图12 因为图片先前转置,所以得到的跳台坐标实际应为(y4,x3),记得加上开始删除分数那部分的坐标。此方法同样适用于圆形。 特别地,当人物目前所在跳台和下一个跳台之间过近,会出现人物头比跳台还靠左的现象。根据算法,则会找到人头顶的点。这是不正确的。 解决办法:将人物全部置为统一背景色,则不会对上述找跳台坐标产生影响。 因为之前在确定人物坐标的时候,经过四次膨胀。可见人物下部总比上部宽,则以下部宽为宽,人物长为长,用矩形选中人物。蓝色矩形区域全部置为统一背景色。效果如下图13。 图13 人物清除 综上,人物坐标(x,y),跳台坐标(y4,x3)。 根据勾股定理,距离dis,。 以上方法,经测试不能100%准确测量距离,当遇到诡异花纹时,将出现小范围跳动,恰好不能100%落入图像中间,也规避了作弊机制,但值得一提的是,连续跳入中点的概率越往后越高。 经过测试可得按压时间time(单位:毫秒)与距离dis的关系大致为: time = k × dis,其中k取1.3~1.5。 例子1: 跳台和人物的距离:406.6018 例子2: 跳台和人物的距离:384.8428 例子3: 魔方将会跳到顺着蓝线最远的那一格。 跳台和人物的距离:692.6074 例子4: 看看圆形的表现。 跳台和人物的距离: 302.7689 经过测试,跳到1000分没问题,超过1000分基本不会上榜。 vs2017 如何控制手机,调用 matlab函数部分,待更。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论