很早之前就有 Misc 拼图题的存在了,也出现了一些奇奇怪怪的解决方法,包括但不限于以下:
今年 HXB 也出了个 AI 拼图题,有点意思,所以今年圣诞节,我们 Venom 也安排的一场圣诞挑战。
本来是分 Easy,Middle,Hell 的,但是感觉 Easy 太简单了,就没安排了。
底图是这个样子的
Meta
Meta
Meta
看图说话,就是非常非常 easy。整个图片上除了 secret 文字就没有别的干扰了。因此解决方案就非常简单了
因为给出了底图和碎图,所以可以根据碎图去分割底图为同样大小的碎片。
可以通过分别对底图碎片和 secret 图碎片进行哈希,替换相同哈希的内容后得到哈希不同的碎片,即为 secret 文字的碎片。在组合为大图。
[+] Source : origin.png
[+] Part : easy/01JbXsY3sZ.png
[+] Output : easy.png
[+] ExtColor : #fff
[+] puzzleDiffHash
[+] m = 80, n = 80
[+] Cut and Hash Source Image
[+] Hash Part Image
[+] Hash Diff Num : 668
[+] Merge Image
[+] Success! And use 4.248577 s
[+] Source : origin.png
[+] Part : easyx/007Mgv3beP.png
[+] Output : easyx.png
[+] ExtColor : #fff
[+] puzzleDiffHash
[+] m = 160, n = 160
[+] Cut and Hash Source Image
[+] Hash Part Image
[+] Hash Diff Num : 1698
[+] Merge Image
[+] Success! And use 12.901666 s
碎片分割越小,secret文字越大,使用哈希对比的方法越准确。也可以用 Middle 或者 Hell 的方法。
Meta
复杂度瞬间上升 N 倍,主要是多了很多干扰,单纯的 hash 比对是不可能的了。
这时候考虑三种特殊的哈希算法
我这里是利用差异哈希算法实现的
[+] Source : origin.png
[+] Part : middle/00CJwpvuuk.png
[+] Output : middle.png
[+] ExtColor : #fff
[+] puzzleDiffHash
[+] m = 80, n = 80
[+] Cut and Hash Source Image
[+] Hash Part Image
[+] Compare Image
[+] Merge Image
[+] Success! And use 19.097951 s
虽然没能完全还原,但是 secret 已经清晰可见了。
Meta
解决方案应该不是,毕竟给的图都是高清无码无损大图。挑战难度主要在于验证机器低配,干扰复杂度++,最大干扰线粗细接近碎片高度,碎片数量多。
参考方案
反正我的解决方案是无脑比对全 RGB,逐个选用相似度最高的
[+] Source : origin.png
[+] Part : hell/03RVA5m7Pm.png
[+] Output : hell.png
[+] ExtColor : #fff
[+] puzzleDiffRGB
[+] m = 160, n = 160
[+] Cut and Hash Source Image
[+] Hash Part Image
[+] Compare Image
[+] Finish Compare
[+] Merge Image
[+] Success! And use 104.166225 s
我是在本地跑的
验证服务跑出的结果
么得图
Meta
解决方案大概是边界模糊匹配,具体我也不懂啊
大概了解了一下选手们的解决方案。结果我哭了。
选手甲
选手乙
大佬们都用CUDA,,,我很绝望啊。
我不懂算法、、所以不要吐槽哈、、机器学习???不存在的。