解决QR拼图的算法 [英] Algorithm to solve QR puzzle
问题描述
我正在构建算法,以从相同大小的瓦片数量自动解决/重建QR码。
我的方法:
- 获取3个正方形中的一个:位置正方形
- 使用ImageMagic以某种方式获取外部黑色边框的宽度
对于给定示例,其中14px x 14px (更新:它可能是13px乘13px)
- 将其设置为常量:BLOCK_SIZE
- 开始循环匹配VALID磁贴和已编译的QR码块
VALID为:不匹配而不是任何3个角落瓷砖(大黑方块)
4.1。渲染已编译的qr块和1个随机有效磁贴的所有可能组合,直到找到匹配为止
4.2如果找到匹配(可以通过已编译的一侧放置磁贴/组合块的QR码)然后记录匹配
4.3匹配条件:
没有黑色区域宽度和高度符合以下公式:
AREA_HEIGHT%BLOCK_SIZE == 0&& AREA_WIDTH%BLOCK_SIZE == 0
现在出现了一些实施问题:
- 如何实现匹配tile到tile的算法(OR已经编译/组合的QR码块)?
我认为ImageMagic可以解决它。
目标是获取原始二维码。
存档包含:
-
无效的join.png
-
有效的join.png
-
src1.png
-
src2-invalid.png
-
src2-valid.png
-
invalid.png
如果您的算法将加入 src1.png
和 src2-invalid.png
它失败了。这是关于连接的瓷砖最终会产生有效的QR。我希望你明白我的观点。
UPDATE4
我会接受答案在我测试并获得正确的解决方案后。可能需要一些时间....
更新5:测试
Mark的解决方案似乎一切都是正确的。
我试过这个如下。
-
浏览所有PNG并提取其北,东,南和西边缘。如果任何PNG有两个白边,告诉用户它是一个角落。如果任何PNG有一个白边,告诉用户它是一个边缘。
-
浏览所有边缘部分。将每个转换为PBM格式文件并剥离标题和新行,使其只是一个80位长的字符串,每个数字为零或一个为黑色或白色。计算字符串的校验和,然后反转字符串以考虑正在翻转或旋转的图像,然后重新计算校验和。打印出校验和并输入
sort
,以便匹配边缘一起出现。
以下是代码:
#!/ bin / bash
#删除此脚本先前运行中生成的任何边缘
rm * _ [NESW] * png 2> / dev / null
rm * _ [NESW] * txt 2> / dev / null
DEBUG = 1
#处理所有PNG
for f。* .png; do
echo处理$ f ...
#获取图像的基本名称
base = $(basename -s .png$ f)
#获取宽度和高度 - 目前尚未实际使用
读取wh<<< $(识别-format%w%h$ f)
[$ DEBUG -gt 0]&& echowidth:$ w
[$ DEBUG -gt 0]&& echoheight:$ h
#Extract North edge
convert$ f+ repage -crop x1 + 0 + 0 + repage$ {base} _N.png
[$ DEBUG -gt 0]&& echoNorth edge extracted
#Extract East edge
convert$ f+ repage -gravity east -crop 1x + 0 + 0 -rotate 90 + repage$ {base} _E .png
[$ DEBUG -gt 0]&& echo东缘提取
#提取南边缘
转换$ f+ repage -gravity south -crop x1 + 0 + 0 + repage$ {base} _S.png
[$ DEBUG -gt 0]&& echoSouth edge extracted
#Extract West edge
convert$ f+ repage -gravity west -crop 1x + 0 + 0 -rotate 90 + repage$ {base} _W .png
[$ DEBUG -gt 0]&& echoWest edge extracted
#测试N e S W中的边角或边块
n = 0
; do
name =$ {base} _ $ {edge} .png
min = $(identify -format%[min]$ name)
if [$ min -gt 0];那么
((n ++))
e = $ name
fi
done
[$ n -eq 1]&& echo$ e is edge-piece
[$ n -eq 2]&& echo$ name is corner-piece
done
从这里编辑---
#现在将所有边缘转换为文本,向前和向后以允许旋转
for f in * _ [NESW] .png; do
base = $(basename -s png$ f)
#转换为PBM格式,删除2个标题行并制作成一行字符串
str = $(转换为$ f -compress none pbm:| sed1,2d| tr -d\ n)
echo$ str:$ f
str = $(rev<<< $ str)
echo$ str:$ f(翻转)
完成| sort
部分输出(节省空间)
处理4555-18116-29.png ...
宽度:80
高度:80
北边提取
东边缘提取
南边缘提取
西边缘提取
4555-18116-29_S.png是边缘块
处理5004-10810-17642.png .. 。
宽度:80
高度:80
北边缘提取
东边缘提取
南边缘提取
西边缘提取
5004-10810 -17642_W.png是角落
处理5167-27533-24066.png ...
宽度:80
高度:80
北边缘提取
东缘提取
南边缘提取
西边缘提取
处理5774-30645-16062.png ...
宽度:80
高度:80
北边缘提取
东边缘提取
南边缘提取
西边缘提取
0a7bb6f610c0f1a6da4794ea7ae00f00:10297-1 3918-3702_W.png(翻转)
0a7bb6f610c0f1a6da4794ea7ae00f00:11976-7751-26756_E.png(翻转)< - 此图像与上面的图像相同,因为左边的md5校验和是相同的
0ce419e072c7ea5d14e3525d4afe150e:11976-7751-26756_W.png(翻转)
0ce419e072c7ea5d14e3525d4afe150e:13858-18007-13070_E.png(翻转)< - 此图像与上面的图像相同,因为左边的md5校验和是相同的
0ce419e072c7ea5d14e3525d4afe150e:20056-20936-29071_S.png
0ce419e072c7ea5d14e3525d4afe150e:24658-20374-23042_E.png(翻转)
0ce419e072c7ea5d14e3525d4afe150e:24658-20374-23042_S.png
0ce419e072c7ea5d14e3525d4afe150e:27206- 10104-18226_N.png
0ce419e072c7ea5d14e3525d4afe150e:30261-16558-25650_N.png
注释
请注意,这假设您没有在@YvesDaoust标识的QR码的各个字段之间完全平铺图像。
此外,t的某些部分他的代码是多余的,因为我在编写代码的同时开发算法 - 我认为 -rotates
和 + repages
是不必要的,可以对事情进行更多优化,但问题中没有明确的速度需求。北,东,南和西边缘也可以在单个IM命令中提取。我获得的宽度和高度未使用,因此可以从代码中删除。
此外,md5校验和不是必需的, sort
将 0001110001010110
放在另一个字符串旁边,无需校验和。
根据请求,我正在上传完整的解决方案。我删除了md5校验和的东西,因为它是不必要的。您需要向右滚动才能看到下面的文件名:
00000000000000000000000000000000000000000000000000000000000000000000000000000000:10297-13918-3702_N.png
00000000000000000000000000000000000000000000 :10297-13918-3702_N.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:11976-7751-26756_N.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:11976-7751-26756_N.png(翻转)
000000000000000000000000000000000000000000000000000000000000000000000000000000000000:13858-18007- 13070_N.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:13858-18007-13070_N.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:16369-21469-8252_E.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:16369-21469-8252_E.png(翻转)
0 0000000000000000000000000000000000000000000000000000000000000000000000000000000:18056-16294-30425_S.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:18056-16294-30425_S.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:20021-11440-20836_S.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:20021-11440-20836_S。 png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:20056-20936-29071_W.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:20056-20936-29071_W.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:21875-14159-1067_E.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:21875-14159-1067_E.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:22 806-3380-17484_W.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:22806-3380-17484_W.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:24426-18830-5627_E.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:24426-18830-5627_E.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:24658-20374-23042_N.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:24658-20374-23042_N.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:24658-20374-23042_W.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000: 24658-20374-23042_W.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:27206-10104-18226_S.png
000000000000000000000000000000000000000000000000000000000 00000000000000000000000:27206-10104-18226_S.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:27206-10104-18226_W.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:27206-10104-18226_W.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:30261-16558 -25650_W.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:30261-16558-25650_W.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:31250-3578-9750_E.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:31250-3578-9750_E.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:31250-3578-9750_N.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:31250-3578-9750_N.png(翻转)
0000000000000000000000000 0000000000000000000000000000000000000000000000000000000:4555-18116-29_S.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:4555-18116-29_S.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:5004-10810-17642_E.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:5004-10810-17642_E。 png(翻转)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:5004-10810-17642_S.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:5004-10810-17642_S.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000111111111111100:21875-14159-1067_S.png(翻转)
00000000000000000000000000000000000000000000000000000000000000000111111111111100:5004-10810-17642_N.png(翻转)
00000000000000000000000000000000000000000000000000000000000001111111111111111111:28824-13023-24184_W.png(fli pped)
00000000000000000000000000000000000000000000000000000000000001111111111111111111:5774-30645-16062_E.png(翻转)
00000000000000000000000000000000000000000000000000000000000011111111111111111111:13789-10513-4721_E.png
00000000000000000000000000000000000000000000000000000000000011111111111111111111:32078-14314-1511_W.png
00000000000000000000000000000000000000000000000000000001111111111111000000000000: 11976-7751-26756_W.png
00000000000000000000000000000000000000000000000000000001111111111111000000000000:13858-18007-13070_E.png
00000000000000000000000000000000000000000000000000000001111111111111000000000000:20056-20936-29071_S.png(翻转)
00000000000000000000000000000000000000000000000000000001111111111111000000000000:24658-20374-23042_E.png
00000000000000000000000000000000000000000000000000000001111111111111000000000000:24658-20374-23042_S.png(翻转)
00000000000000000000000000000000000000000000000000000001111111111111000000000000:27 206-10104-18226_N.png(翻转)
00000000000000000000000000000000000000000000000000000001111111111111000000000000:30261-16558-25650_N.png(翻转)
00000000000000000000000000000000000000000000000000000001111111111111000000000000:31250-3578-9750_W.png
00000000000000000000000000000000000000000000000000000011111111111110000000000000:16369-21469-8252_N .png
000000000000000000000000000000000000000000000000000000000011111111111110000000000000:18056-16294-30425_W.png(翻转)
00000000000000000000000000000000000000000000000000000011111111111110000000000000:27206-10104-18226_E.png(翻转)
00000000000000000000000000000000000000000000000000000011111111111110000000000000:31250-3578-9750_S.png
00000000000000000000000000000000000000000000001111111111111111111111111111111111:10297-13918-3702_S.png
00000000000000000000000000000000000000000000001111111111111111111111111111111111:28824-13023-24184_N.png
00000000000000000000000000000000000001111111111111111111111 111000000000000000000:20021-11440-20836_N.png(翻转)
00000000000000000000000000000000000001111111111111111111111111000000000000000000:26507-21853-11958_S.png(翻转)
00000000000000000000000000000000000001111111111111111111111111111111111111100000:15816-4564-31665_W.png
00000000000000000000000000000000000001111111111111111111111111111111111111100000:17636-24599 -1877_E.png
00000000000000000000000000000000000001111111111111111111111111111111111111111111:21875-14159-1067_W.png
00000000000000000000000000000000000001111111111111111111111111111111111111111111:26507-21853-11958_E.png
00000000000000000000000000000000000011111111111111111111111110000000000000000000:13789-10513-4721_S.png
00000000000000000000000000000000000011111111111111111111111110000000000000000000:17636 -24599-1877_N.png
00000000000000000000000000000001111111111111000000000000000000000000001111111111:22161-18187-20222_W.png
0000000000000000000000000000000111111111111100000000000000 00000000000000001111111111:28824-13023-24184_E.png
00000000000000000000000000000011111111111111111111111111111111111111100000000000:15816-4564-31665_E.png(翻转)
00000000000000000000000000000011111111111111111111111111111111111111100000000000:26507-21853-11958_W.png(翻转)
00000000000000000000000000000111111111111111111111111111111111111111000000000000:20056-20936 -29071_N.png(翻转)
00000000000000000000000000000111111111111111111111111111111111111111000000000000:22806-3380-17484_S.png(翻转)
00000000000000000000000000001111111111111111111111111111111111111110000000000000:18056-16294-30425_E.png(翻转)
00000000000000000000000000001111111111111111111111111111111111111110000000000000:4555-18116-29_W .png(翻转)
00000000000000000000000000111111111111100000000000001111111111111000000000000011:16369-21469-8252_S.png(翻转)
00000000000000000000000000111111111111100000000000001111111111111000000000000011:24426-18830-5627_N.png(翻转d)
00000000000000000000000001111111111111111111111111111111111111110000000000000000:10297-13918-3702_W.png(翻转)
00000000000000000000000001111111111111111111111111111111111111110000000000000000:11976-7751-26756_E.png(翻转)
00000000000000000000000111111111111100000000000001111111111111111111111111111111:13789-10513-4721_N.png
00000000000000000000000111111111111100000000000001111111111111111111111111111111:5774-30645-16062_S.png
00000000000000000000111111111111100000000000000000000000000111111111111100000000:15816-4564-31665_N.png
00000000000000000000111111111111100000000000000000000000000111111111111100000000:32078-14314-1511_S.png
00000000000000000000111111111111100000000000001111111111111111111111111100000000:13789-10513-4721_W.png(翻转)
00000000000000000000111111111111100000000000001111111111111111111111111100000000:22806-3380-17484_E.png(翻转)
00000000000000000001111111111111111111111111000000000000000000000000000000000000 :13789-10513-4721_S.png(翻转)
00000000000000000001111111111111111111111111000000000000000000000000000000000000:17636-24599-1877_N.png(翻转)
00000000000000000011111111111100000000000000000000000000111111111111111111111111:22161-18187-20222_S.png
00000000000000000011111111111100000000000000000000000000111111111111111111111111:5167-27533- 24066_N.png
00000000000000000011111111111111111111111110000000000000000000000000000000000000:20021-11440-20836_N.png
00000000000000000011111111111111111111111110000000000000000000000000000000000000:26507-21853-11958_S.png
00000000000000001111111111111111111111111111111111111110000000000000000000000000:10297-13918-3702_W.png
00000000000000001111111111111111111111111111111111111110000000000000000000000000:11976- 7751-26756_E.png
00000000000001111111111111000000000000000000000000000000000000000000000000000000:16369-21469-8252_N.png(翻转)
000000000000011111111111110000000000000000000000000000000000000000 00000000000000:18056-16294-30425_W.png
00000000000001111111111111000000000000000000000000000000000000000000000000000000:27206-10104-18226_E.png
00000000000001111111111111000000000000000000000000000000000000000000000000000000:31250-3578-9750_S.png(翻转)
00000000000001111111111111000000000000011111111111110000000000000111111111111111:21875-14159-1067_N。 PNG(翻转)
00000000000001111111111111000000000000011111111111110000000000000111111111111111:24426-18830-5627_S.png(翻转)
00000000000001111111111111000000000000011111111111111111111111111111111111111100:20021-11440-20836_W.png
00000000000001111111111111000000000000011111111111111111111111111111111111111100:4555-18116-29_E.png
00000000000001111111111111111111111111111111111111110000000000000000000000000000:18056-16294-30425_E.png
00000000000001111111111111111111111111111111111111110000000000000000000000000000:4555-18116-29_W.png
0000000000000111111111111111111111111111111111111111111111 1111111111111111111100:20021-11440-20836_E.png
00000000000001111111111111111111111111111111111111111111111111111111111111111100:5004-10810-17642_W.png
00000000000011111111111110000000000000000000000000000000000000000000000000000000:11976-7751-26756_W.png(翻转)
00000000000011111111111110000000000000000000000000000000000000000000000000000000:13858-18007-13070_E。 png(翻转)
00000000000011111111111110000000000000000000000000000000000000000000000000000000:20056-20936-29071_S.png
00000000000011111111111110000000000000000000000000000000000000000000000000000000:24658-20374-23042_E.png(翻转)
00000000000011111111111110000000000000000000000000000000000000000000000000000000:24658-20374-23042_S.png
00000000000011111111111110000000000000000000000000000000000000000000000000000000:27206-10104-18226_N.png
00000000000011111111111110000000000000000000000000000000000000000000000000000000:30261-16558-25650_N.png
0000000000001111111111111000000000000000 0000000000000000000000000000000000000000:31250-3578-9750_W.png(翻转)
00000000000011111111111110000000000000111111111111111111111111111111111111111000:22806-3380-17484_N.png
00000000000011111111111110000000000000111111111111111111111111111111111111111000:30261-16558-25650_S.png
00000000000011111111111111111111111111000000000000011111111111111111111111111111:10297-13918-3702_E。 PNG(翻转)
00000000000011111111111111111111111111000000000000011111111111111111111111111111:13858-18007-13070_W.png(翻转)
00000000000011111111111111111111111111111111111111100000000000000000000000000000:20056-20936-29071_N.png
00000000000011111111111111111111111111111111111111100000000000000000000000000000:22806-3380-17484_S.png
00000000000111111111111100000000000000000000000000000000000000111111111111100000:17636-24599-1877_W.png
00000000000111111111111100000000000000000000000000000000000000111111111111100000:20056-20936-29071_E.png
00000000000111111111111100 000000000001111111111111000000000000111111111111111111:13858-18007-13070_S.png(翻转)
00000000000111111111111100000000000001111111111111000000000000111111111111111111:22161-18187-20222_N.png(翻转)
00000000000111111111111111111111111111111111111111000000000000000000000000000000:15816-4564-31665_E.png
00000000000111111111111111111111111111111111111111000000000000000000000000000000:26507-21853 -11958_W.png
00000000001111111111111000000000000000000000000000000000000001111111111111000000:30261-16558-25650_E.png(翻转)
00000000001111111111111000000000000000000000000000000000000001111111111111000000:5774-30645-16062_W.png(翻转)
00000000001111111111111000000000000000000000000001111111111111111111111111000000:17636-24599-1877_S.png
00000000001111111111111000000000000000000000000001111111111111111111111111000000:18056-16294-30425_N.png
00000000001111111111111000000000000011111111111110000000000001111111111111000000:11976-7751-26756_S.png
00000000001111111111111000000000000011111111111110000000000001111111111111000000:5774-30645-16062_N.png
00000000001111111111111000000000000011111111111111111111111110000000000000111111:16369-21469-8252_W.png(翻转)
00000000001111111111111000000000000011111111111111111111111110000000000000111111:22161-18187-20222_E.png(翻转)
00000000111111111111100000000000000000000000000111111111111100000000000000000000:15816-4564 -31665_N.png(翻转)
00000000111111111111100000000000000000000000000111111111111100000000000000000000:32078-14314-1511_S.png(翻转)
00000000111111111111100000000000000000000000000111111111111111111111111110000000:15816-4564-31665_S.png(翻转)
00000000111111111111100000000000000000000000000111111111111111111111111110000000:4555-18116-29_N .png(翻转)
00000000111111111111100000000000001111111111111000000000000011111111111110000000:32078-14314-1511_E.png
000000001111111111111000000000000011111111111110000000000000111111111111 1110000000:5167-27533-24066_W.png
00000000111111111111111111111111110000000000000000000000000000000000000001111111:28824-13023-24184_S.png(翻转)
00000000111111111111111111111111110000000000000000000000000000000000000001111111:32078-14314-1511_N.png(翻转)
00000000111111111111111111111111110000000000000111111111111100000000000000000000:13789-10513 -4721_W.png
00000000111111111111111111111111110000000000000111111111111100000000000000000000:22806-3380-17484_E.png
00000001111111111111000000000000011111111111110000000000000111111111111100000000:32078-14314-1511_E.png(翻转)
00000001111111111111000000000000011111111111110000000000000111111111111100000000:5167-27533-24066_W.png(翻转)
00000001111111111111111111111111100000000000000000000000000111111111111100000000:15816-4564-31665_S.png
00000001111111111111111111111111100000000000000000000000000111111111111100000000:4555-18116-29_N.png
000000111111111111100000000000000000000000000000000 00000011111111111110000000000:30261-16558-25650_E.png
00000011111111111110000000000000000000000000000000000000011111111111110000000000:5774-30645-16062_W.png
00000011111111111110000000000001111111111111000000000000011111111111110000000000:11976-7751-26756_S.png(翻转)
00000011111111111110000000000001111111111111000000000000011111111111110000000000:5774-30645-16062_N。 PNG(翻转)
00000011111111111111111111111110000000000000000000000000011111111111110000000000:17636-24599-1877_S.png(翻转)
00000011111111111111111111111110000000000000000000000000011111111111110000000000:18056-16294-30425_N.png(翻转)
00000111111111111100000000000000000000000000000000000000111111111111100000000000:17636-24599-1877_W.png(翻转)
000001111111111111000000000000000000000000000000000000000000111111111111100000000000:20056-20936-29071_E.png(翻转)
00000111111111111111111111111100000000000001111111111111111111111111111111111111:26507-21853-11958_N.png
000001 11111111111111111111111100000000000001111111111111111111111111111111111111:5167-27533-24066_S.png
00000111111111111111111111111111111111111110000000000000000000000000000000000000:15816-4564-31665_W.png(翻转)
00000111111111111111111111111111111111111110000000000000000000000000000000000000:17636-24599-1877_E.png(翻转)
00011111111111111111111111111111111111111100000000000001111111111111000000000000:22806-3380 -17484_N.png(翻转)
00011111111111111111111111111111111111111100000000000001111111111111000000000000:30261-16558-25650_S.png(翻转)
00111111111111100000000000000000000000000000000000000000000000000000000000000000:21875-14159-1067_S.png
001111111111111000000000000000000000000000000000000000000000000000000000000000000000:5004-10810-17642_N.png
00111111111111111111111111111111111111111000000000000011111111111110000000000000:20021-11440-20836_W.png(翻转)
00111111111111111111111111111111111111111000000000000011111111111110000000000000:4 555-18116-29_E.png(翻转)
00111111111111111111111111111111111111111111111111111111111111111110000000000000:20021-11440-20836_E.png(翻转)
00111111111111111111111111111111111111111111111111111111111111111110000000000000:5004-10810-17642_W.png(翻转)
11000000000000011111111111110000000000000111111111111100000000000000000000000000:16369- 21469-8252_S.png
11000000000000011111111111110000000000000111111111111100000000000000000000000000:24426-18830-5627_N.png
11111100000000000001111111111111111111111111000000000000011111111111110000000000:16369-21469-8252_W.png
11111100000000000001111111111111111111111111000000000000011111111111110000000000:22161-18187-20222_E.png
11111110000000000000000000000000000000000000001111111111111111111111111100000000: 28824-13023-24184_S.png
1111111000000000000000000000000000000000000000001111111111111111111111111100000000:32078-14314-1511_N.png
1111111000000000000000000000000001111111111111111111111111111111111111111 111111111:24426-18830-5627_W.png(翻转)
11111110000000000000000000000000011111111111111111111111111111111111111111111111:5167-27533-24066_E.png(翻转)
11111111110000000000000000000000000011111111111110000000000000000000000000000000:22161-18187-20222_W.png(翻转)
11111111110000000000000000000000000011111111111110000000000000000000000000000000: 28824-13023-24184_E.png(翻转)
11111111111111100000000000001111111111111000000000000011111111111110000000000000:21875-14159-1067_N.png
11111111111111100000000000001111111111111000000000000011111111111110000000000000:24426-18830-5627_S.png
11111111111111111100000000000011111111111110000000000000111111111111100000000000:13858-18007-13070_S.png
11111111111111111100000000000011111111111110000000000000111111111111100000000000:22161-18187-20222_N.png
11111111111111111110000000000000000000000000000000000000000000000000000000000000:28824-13023-24184_W.png
1111111111111111111000000000000000000000000000000 00000000000000000000000000000000000:5774-30645-16062_E.png
11111111111111111111000000000000000000000000000000000000000000000000000000000000:13789-10513-4721_E.png (flipped)
11111111111111111111000000000000000000000000000000000000000000000000000000000000:32078-14314-1511_W.png (flipped)
11111111111111111111111100000000000000000000000000111111111111000000000000000000:22161-18187-20222_S.png (flipped)
11111111111111111111111100000000000000000000000000111111111111000000000000000000:5167-27533-24066_N.png (flipped)
11111111111111111111111111111000000000000011111111111111111111111111000000000000:10297-13918-3702_E.png
11111111111111111111111111111000000000000011111111111111111111111111000000000000:13858-18007-13070_W.png
11111111111111111111111111111110000000000000111111111111100000000000000000000000:13789-10513-4721_N.png (flipped)
11111111111111111111111111111110000000000000111111111111100000000000000000000000:5774-30645-16062_S.png (flipped)
11 111111111111111111111111111111110000000000000000000000000000000000000000000000:10297-13918-3702_S.png (flipped)
11111111111111111111111111111111110000000000000000000000000000000000000000000000:28824-13023-24184_N.png (flipped)
11111111111111111111111111111111111110000000000000111111111111111111111111100000:26507-21853-11958_N.png (flipped)
11111111111111111111111111111111111110000000000000111111111111111111111111100000:5167-27533-24066_S.png (flipped)
11111111111111111111111111111111111111111110000000000000000000000000000000000000:21875-14159-1067_W.png (flipped)
11111111111111111111111111111111111111111110000000000000000000000000000000000000:26507-21853-11958_E.png (flipped)
11111111111111111111111111111111111111111111111000000000000000000000000001111111:24426-18830-5627_W.png
11111111111111111111111111111111111111111111111000000000000000000000000001111111:5167-27533-24066_E.png
I am building algorithm to automatically solve / rebuild QR code from number of tiles of equal size.
My approach:
- Get one of 3 side squares : Position squares
- Get the width of outer black border somehow using ImageMagic
Which for given example is 14px x 14px (UPDATE: it might be 13px by 13px)
- Set it as a constant: BLOCK_SIZE
- Start cycle matching VALID tiles and already compiled block of QR code
VALID is : unmatched AND not any of 3 corner tiles (big black squares)
4.1. Render all possible combinations of already compiled qr block AND 1 random valid tile from until the match found
4.2 If match found (tile can be placed by one of sides of already compiled/combined block of QR code) then record match
4.3 Match conditions:
There are no BLACK areas which have width and height conform to this equation:
AREA_HEIGHT % BLOCK_SIZE == 0 && AREA_WIDTH % BLOCK_SIZE == 0
Now there are some implementation complications arise:
- How to implement algorithm which matches a tile to tile (OR already compiled/combined block of QR code)?
I think ImageMagic can solve it. The goal is to get original QR code.
UPDATE
As I see the solution narrows down to make ImageMagick scan and find if two tiles can be put together without breaking rules of QR code. Algorithm should try to put 2 tiles side by side and scan border areas. The trick is to measure width and height of black lines/blocks of joined tiles. How to do it?
UPDATE2
Comparison if tiles match using 2 columns of width 1px is not enough in some cases. For example, both algorithms will join this 2 tiles into:
VALID
and
INVALID
As you seen in INVALID, there is part of 2nd tile (the one on the right) was removed as denoited by red arrows, but since comparison done by 1px - algorithm doesn't care abuot this case. Hance invalid QR.
UPDATE3
Archive containing:
invalid join.png
valid join.png
src1.png
src2-invalid.png
src2-valid.png
invalid.png
If your algorith will join src1.png
and src2-invalid.png
it fails. It's about if joined tiles will produce valid QR in the end. I hope you got my point.
UPDATE4
I will accept an answer after I test and get correct solution. It might take some time....
UPDATE 5 : TESTING
Everything seems correct with Mark's solution.
I had a try at this as follows.
Go through all PNGs and extract their North, East, South and West edges. If any PNG has two white edges, tell user it is a corner-piece. If any PNG has one white edge, tell user it is an edge-piece.
Go through all edge pieces. Convert each one into a PBM format file and strip the headers and new lines so that it will just be an 80 digit long string, each digit a zero or a one for black or white. Calculate checksum of the string and then reverse the string to account for the image being flipped or rotated and then recalculate the checksum. Print out the checksums and pipe into
sort
so that matching edges come out together.
Here is the code:
#!/bin/bash
# Remove any edges generated in previous runs of this script
rm *_[NESW]*png 2> /dev/null
rm *_[NESW]*txt 2> /dev/null
DEBUG=1
# Process all PNGs
for f in *.png; do
echo "Processing $f ..."
# Get basename of image
base=$(basename -s .png "$f")
# Get width and height - not actually used at the moment
read w h <<< $(identify -format "%w %h" "$f")
[ $DEBUG -gt 0 ] && echo " width:$w"
[ $DEBUG -gt 0 ] && echo " height:$h"
# Extract North edge
convert "$f" +repage -crop x1+0+0 +repage "${base}_N.png"
[ $DEBUG -gt 0 ] && echo " North edge extracted"
# Extract East edge
convert "$f" +repage -gravity east -crop 1x+0+0 -rotate 90 +repage "${base}_E.png"
[ $DEBUG -gt 0 ] && echo " East edge extracted"
# Extract South edge
convert "$f" +repage -gravity south -crop x1+0+0 +repage "${base}_S.png"
[ $DEBUG -gt 0 ] && echo " South edge extracted"
# Extract West edge
convert "$f" +repage -gravity west -crop 1x+0+0 -rotate 90 +repage "${base}_W.png"
[ $DEBUG -gt 0 ] && echo " West edge extracted"
# Test if corner or edge piece
n=0
for edge in N E S W; do
name="${base}_${edge}.png"
min=$(identify -format "%[min]" "$name")
if [ $min -gt 0 ]; then
((n++))
e=$name
fi
done
[ $n -eq 1 ] && echo " $e is edge-piece"
[ $n -eq 2 ] && echo " $name is corner-piece"
done
EDITED FROM HERE ---
# Now convert all edges to text, forwards and backwards to allow rotation
for f in *_[NESW].png; do
base=$(basename -s png "$f")
# Convert to PBM format, remove 2 header lines and make into one line string
str=$(convert "$f" -compress none pbm: | sed "1,2d" | tr -d "\n ")
echo "$str:$f"
str=$(rev <<< $str)
echo "$str:$f (flipped)"
done | sort
Partial Output (to save space)
Processing 4555-18116-29.png ...
width:80
height:80
North edge extracted
East edge extracted
South edge extracted
West edge extracted
4555-18116-29_S.png is edge-piece
Processing 5004-10810-17642.png ...
width:80
height:80
North edge extracted
East edge extracted
South edge extracted
West edge extracted
5004-10810-17642_W.png is corner-piece
Processing 5167-27533-24066.png ...
width:80
height:80
North edge extracted
East edge extracted
South edge extracted
West edge extracted
Processing 5774-30645-16062.png ...
width:80
height:80
North edge extracted
East edge extracted
South edge extracted
West edge extracted
0a7bb6f610c0f1a6da4794ea7ae00f00:10297-13918-3702_W.png (flipped)
0a7bb6f610c0f1a6da4794ea7ae00f00:11976-7751-26756_E.png (flipped) <-- this image is identical to the one above as the md5 checksum on the left is the same
0ce419e072c7ea5d14e3525d4afe150e:11976-7751-26756_W.png (flipped)
0ce419e072c7ea5d14e3525d4afe150e:13858-18007-13070_E.png (flipped) <-- this image is identical to the one above as the md5 checksum on the left is the same
0ce419e072c7ea5d14e3525d4afe150e:20056-20936-29071_S.png
0ce419e072c7ea5d14e3525d4afe150e:24658-20374-23042_E.png (flipped)
0ce419e072c7ea5d14e3525d4afe150e:24658-20374-23042_S.png
0ce419e072c7ea5d14e3525d4afe150e:27206-10104-18226_N.png
0ce419e072c7ea5d14e3525d4afe150e:30261-16558-25650_N.png
Notes
Note that this assumes you have not tiled the images EXACTLY between the individual "fields" of the QR codes as identified by @YvesDaoust.
Also, some parts of the code are redundant, as I was developing the algorithm at the same time as the code - I think the -rotates
and +repages
are unnecessary and things could be optimised more but there was no indicated need for speed in the question. The North, East, South and West edges could be extracted in a single IM command too. The width and height that I obtained are unused so could be removed from the code.
Also, the md5 checksum is not really necessary, sort
will place 0001110001010110
next to another string the same anyway without needing to checksum them.
Per request, I am uploading the complete solution. I removed the md5 checksum stuff as it was unnecessary. You will need to scroll right to see the filenames below:
00000000000000000000000000000000000000000000000000000000000000000000000000000000:10297-13918-3702_N.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:10297-13918-3702_N.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:11976-7751-26756_N.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:11976-7751-26756_N.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:13858-18007-13070_N.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:13858-18007-13070_N.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:16369-21469-8252_E.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:16369-21469-8252_E.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:18056-16294-30425_S.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:18056-16294-30425_S.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:20021-11440-20836_S.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:20021-11440-20836_S.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:20056-20936-29071_W.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:20056-20936-29071_W.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:21875-14159-1067_E.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:21875-14159-1067_E.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:22806-3380-17484_W.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:22806-3380-17484_W.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:24426-18830-5627_E.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:24426-18830-5627_E.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:24658-20374-23042_N.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:24658-20374-23042_N.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:24658-20374-23042_W.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:24658-20374-23042_W.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:27206-10104-18226_S.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:27206-10104-18226_S.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:27206-10104-18226_W.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:27206-10104-18226_W.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:30261-16558-25650_W.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:30261-16558-25650_W.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:31250-3578-9750_E.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:31250-3578-9750_E.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:31250-3578-9750_N.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:31250-3578-9750_N.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:4555-18116-29_S.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:4555-18116-29_S.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:5004-10810-17642_E.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:5004-10810-17642_E.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000000000000000000:5004-10810-17642_S.png
00000000000000000000000000000000000000000000000000000000000000000000000000000000:5004-10810-17642_S.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000111111111111100:21875-14159-1067_S.png (flipped)
00000000000000000000000000000000000000000000000000000000000000000111111111111100:5004-10810-17642_N.png (flipped)
00000000000000000000000000000000000000000000000000000000000001111111111111111111:28824-13023-24184_W.png (flipped)
00000000000000000000000000000000000000000000000000000000000001111111111111111111:5774-30645-16062_E.png (flipped)
00000000000000000000000000000000000000000000000000000000000011111111111111111111:13789-10513-4721_E.png
00000000000000000000000000000000000000000000000000000000000011111111111111111111:32078-14314-1511_W.png
00000000000000000000000000000000000000000000000000000001111111111111000000000000:11976-7751-26756_W.png
00000000000000000000000000000000000000000000000000000001111111111111000000000000:13858-18007-13070_E.png
00000000000000000000000000000000000000000000000000000001111111111111000000000000:20056-20936-29071_S.png (flipped)
00000000000000000000000000000000000000000000000000000001111111111111000000000000:24658-20374-23042_E.png
00000000000000000000000000000000000000000000000000000001111111111111000000000000:24658-20374-23042_S.png (flipped)
00000000000000000000000000000000000000000000000000000001111111111111000000000000:27206-10104-18226_N.png (flipped)
00000000000000000000000000000000000000000000000000000001111111111111000000000000:30261-16558-25650_N.png (flipped)
00000000000000000000000000000000000000000000000000000001111111111111000000000000:31250-3578-9750_W.png
00000000000000000000000000000000000000000000000000000011111111111110000000000000:16369-21469-8252_N.png
00000000000000000000000000000000000000000000000000000011111111111110000000000000:18056-16294-30425_W.png (flipped)
00000000000000000000000000000000000000000000000000000011111111111110000000000000:27206-10104-18226_E.png (flipped)
00000000000000000000000000000000000000000000000000000011111111111110000000000000:31250-3578-9750_S.png
00000000000000000000000000000000000000000000001111111111111111111111111111111111:10297-13918-3702_S.png
00000000000000000000000000000000000000000000001111111111111111111111111111111111:28824-13023-24184_N.png
00000000000000000000000000000000000001111111111111111111111111000000000000000000:20021-11440-20836_N.png (flipped)
00000000000000000000000000000000000001111111111111111111111111000000000000000000:26507-21853-11958_S.png (flipped)
00000000000000000000000000000000000001111111111111111111111111111111111111100000:15816-4564-31665_W.png
00000000000000000000000000000000000001111111111111111111111111111111111111100000:17636-24599-1877_E.png
00000000000000000000000000000000000001111111111111111111111111111111111111111111:21875-14159-1067_W.png
00000000000000000000000000000000000001111111111111111111111111111111111111111111:26507-21853-11958_E.png
00000000000000000000000000000000000011111111111111111111111110000000000000000000:13789-10513-4721_S.png
00000000000000000000000000000000000011111111111111111111111110000000000000000000:17636-24599-1877_N.png
00000000000000000000000000000001111111111111000000000000000000000000001111111111:22161-18187-20222_W.png
00000000000000000000000000000001111111111111000000000000000000000000001111111111:28824-13023-24184_E.png
00000000000000000000000000000011111111111111111111111111111111111111100000000000:15816-4564-31665_E.png (flipped)
00000000000000000000000000000011111111111111111111111111111111111111100000000000:26507-21853-11958_W.png (flipped)
00000000000000000000000000000111111111111111111111111111111111111111000000000000:20056-20936-29071_N.png (flipped)
00000000000000000000000000000111111111111111111111111111111111111111000000000000:22806-3380-17484_S.png (flipped)
00000000000000000000000000001111111111111111111111111111111111111110000000000000:18056-16294-30425_E.png (flipped)
00000000000000000000000000001111111111111111111111111111111111111110000000000000:4555-18116-29_W.png (flipped)
00000000000000000000000000111111111111100000000000001111111111111000000000000011:16369-21469-8252_S.png (flipped)
00000000000000000000000000111111111111100000000000001111111111111000000000000011:24426-18830-5627_N.png (flipped)
00000000000000000000000001111111111111111111111111111111111111110000000000000000:10297-13918-3702_W.png (flipped)
00000000000000000000000001111111111111111111111111111111111111110000000000000000:11976-7751-26756_E.png (flipped)
00000000000000000000000111111111111100000000000001111111111111111111111111111111:13789-10513-4721_N.png
00000000000000000000000111111111111100000000000001111111111111111111111111111111:5774-30645-16062_S.png
00000000000000000000111111111111100000000000000000000000000111111111111100000000:15816-4564-31665_N.png
00000000000000000000111111111111100000000000000000000000000111111111111100000000:32078-14314-1511_S.png
00000000000000000000111111111111100000000000001111111111111111111111111100000000:13789-10513-4721_W.png (flipped)
00000000000000000000111111111111100000000000001111111111111111111111111100000000:22806-3380-17484_E.png (flipped)
00000000000000000001111111111111111111111111000000000000000000000000000000000000:13789-10513-4721_S.png (flipped)
00000000000000000001111111111111111111111111000000000000000000000000000000000000:17636-24599-1877_N.png (flipped)
00000000000000000011111111111100000000000000000000000000111111111111111111111111:22161-18187-20222_S.png
00000000000000000011111111111100000000000000000000000000111111111111111111111111:5167-27533-24066_N.png
00000000000000000011111111111111111111111110000000000000000000000000000000000000:20021-11440-20836_N.png
00000000000000000011111111111111111111111110000000000000000000000000000000000000:26507-21853-11958_S.png
00000000000000001111111111111111111111111111111111111110000000000000000000000000:10297-13918-3702_W.png
00000000000000001111111111111111111111111111111111111110000000000000000000000000:11976-7751-26756_E.png
00000000000001111111111111000000000000000000000000000000000000000000000000000000:16369-21469-8252_N.png (flipped)
00000000000001111111111111000000000000000000000000000000000000000000000000000000:18056-16294-30425_W.png
00000000000001111111111111000000000000000000000000000000000000000000000000000000:27206-10104-18226_E.png
00000000000001111111111111000000000000000000000000000000000000000000000000000000:31250-3578-9750_S.png (flipped)
00000000000001111111111111000000000000011111111111110000000000000111111111111111:21875-14159-1067_N.png (flipped)
00000000000001111111111111000000000000011111111111110000000000000111111111111111:24426-18830-5627_S.png (flipped)
00000000000001111111111111000000000000011111111111111111111111111111111111111100:20021-11440-20836_W.png
00000000000001111111111111000000000000011111111111111111111111111111111111111100:4555-18116-29_E.png
00000000000001111111111111111111111111111111111111110000000000000000000000000000:18056-16294-30425_E.png
00000000000001111111111111111111111111111111111111110000000000000000000000000000:4555-18116-29_W.png
00000000000001111111111111111111111111111111111111111111111111111111111111111100:20021-11440-20836_E.png
00000000000001111111111111111111111111111111111111111111111111111111111111111100:5004-10810-17642_W.png
00000000000011111111111110000000000000000000000000000000000000000000000000000000:11976-7751-26756_W.png (flipped)
00000000000011111111111110000000000000000000000000000000000000000000000000000000:13858-18007-13070_E.png (flipped)
00000000000011111111111110000000000000000000000000000000000000000000000000000000:20056-20936-29071_S.png
00000000000011111111111110000000000000000000000000000000000000000000000000000000:24658-20374-23042_E.png (flipped)
00000000000011111111111110000000000000000000000000000000000000000000000000000000:24658-20374-23042_S.png
00000000000011111111111110000000000000000000000000000000000000000000000000000000:27206-10104-18226_N.png
00000000000011111111111110000000000000000000000000000000000000000000000000000000:30261-16558-25650_N.png
00000000000011111111111110000000000000000000000000000000000000000000000000000000:31250-3578-9750_W.png (flipped)
00000000000011111111111110000000000000111111111111111111111111111111111111111000:22806-3380-17484_N.png
00000000000011111111111110000000000000111111111111111111111111111111111111111000:30261-16558-25650_S.png
00000000000011111111111111111111111111000000000000011111111111111111111111111111:10297-13918-3702_E.png (flipped)
00000000000011111111111111111111111111000000000000011111111111111111111111111111:13858-18007-13070_W.png (flipped)
00000000000011111111111111111111111111111111111111100000000000000000000000000000:20056-20936-29071_N.png
00000000000011111111111111111111111111111111111111100000000000000000000000000000:22806-3380-17484_S.png
00000000000111111111111100000000000000000000000000000000000000111111111111100000:17636-24599-1877_W.png
00000000000111111111111100000000000000000000000000000000000000111111111111100000:20056-20936-29071_E.png
00000000000111111111111100000000000001111111111111000000000000111111111111111111:13858-18007-13070_S.png (flipped)
00000000000111111111111100000000000001111111111111000000000000111111111111111111:22161-18187-20222_N.png (flipped)
00000000000111111111111111111111111111111111111111000000000000000000000000000000:15816-4564-31665_E.png
00000000000111111111111111111111111111111111111111000000000000000000000000000000:26507-21853-11958_W.png
00000000001111111111111000000000000000000000000000000000000001111111111111000000:30261-16558-25650_E.png (flipped)
00000000001111111111111000000000000000000000000000000000000001111111111111000000:5774-30645-16062_W.png (flipped)
00000000001111111111111000000000000000000000000001111111111111111111111111000000:17636-24599-1877_S.png
00000000001111111111111000000000000000000000000001111111111111111111111111000000:18056-16294-30425_N.png
00000000001111111111111000000000000011111111111110000000000001111111111111000000:11976-7751-26756_S.png
00000000001111111111111000000000000011111111111110000000000001111111111111000000:5774-30645-16062_N.png
00000000001111111111111000000000000011111111111111111111111110000000000000111111:16369-21469-8252_W.png (flipped)
00000000001111111111111000000000000011111111111111111111111110000000000000111111:22161-18187-20222_E.png (flipped)
00000000111111111111100000000000000000000000000111111111111100000000000000000000:15816-4564-31665_N.png (flipped)
00000000111111111111100000000000000000000000000111111111111100000000000000000000:32078-14314-1511_S.png (flipped)
00000000111111111111100000000000000000000000000111111111111111111111111110000000:15816-4564-31665_S.png (flipped)
00000000111111111111100000000000000000000000000111111111111111111111111110000000:4555-18116-29_N.png (flipped)
00000000111111111111100000000000001111111111111000000000000011111111111110000000:32078-14314-1511_E.png
00000000111111111111100000000000001111111111111000000000000011111111111110000000:5167-27533-24066_W.png
00000000111111111111111111111111110000000000000000000000000000000000000001111111:28824-13023-24184_S.png (flipped)
00000000111111111111111111111111110000000000000000000000000000000000000001111111:32078-14314-1511_N.png (flipped)
00000000111111111111111111111111110000000000000111111111111100000000000000000000:13789-10513-4721_W.png
00000000111111111111111111111111110000000000000111111111111100000000000000000000:22806-3380-17484_E.png
00000001111111111111000000000000011111111111110000000000000111111111111100000000:32078-14314-1511_E.png (flipped)
00000001111111111111000000000000011111111111110000000000000111111111111100000000:5167-27533-24066_W.png (flipped)
00000001111111111111111111111111100000000000000000000000000111111111111100000000:15816-4564-31665_S.png
00000001111111111111111111111111100000000000000000000000000111111111111100000000:4555-18116-29_N.png
00000011111111111110000000000000000000000000000000000000011111111111110000000000:30261-16558-25650_E.png
00000011111111111110000000000000000000000000000000000000011111111111110000000000:5774-30645-16062_W.png
00000011111111111110000000000001111111111111000000000000011111111111110000000000:11976-7751-26756_S.png (flipped)
00000011111111111110000000000001111111111111000000000000011111111111110000000000:5774-30645-16062_N.png (flipped)
00000011111111111111111111111110000000000000000000000000011111111111110000000000:17636-24599-1877_S.png (flipped)
00000011111111111111111111111110000000000000000000000000011111111111110000000000:18056-16294-30425_N.png (flipped)
00000111111111111100000000000000000000000000000000000000111111111111100000000000:17636-24599-1877_W.png (flipped)
00000111111111111100000000000000000000000000000000000000111111111111100000000000:20056-20936-29071_E.png (flipped)
00000111111111111111111111111100000000000001111111111111111111111111111111111111:26507-21853-11958_N.png
00000111111111111111111111111100000000000001111111111111111111111111111111111111:5167-27533-24066_S.png
00000111111111111111111111111111111111111110000000000000000000000000000000000000:15816-4564-31665_W.png (flipped)
00000111111111111111111111111111111111111110000000000000000000000000000000000000:17636-24599-1877_E.png (flipped)
00011111111111111111111111111111111111111100000000000001111111111111000000000000:22806-3380-17484_N.png (flipped)
00011111111111111111111111111111111111111100000000000001111111111111000000000000:30261-16558-25650_S.png (flipped)
00111111111111100000000000000000000000000000000000000000000000000000000000000000:21875-14159-1067_S.png
00111111111111100000000000000000000000000000000000000000000000000000000000000000:5004-10810-17642_N.png
00111111111111111111111111111111111111111000000000000011111111111110000000000000:20021-11440-20836_W.png (flipped)
00111111111111111111111111111111111111111000000000000011111111111110000000000000:4555-18116-29_E.png (flipped)
00111111111111111111111111111111111111111111111111111111111111111110000000000000:20021-11440-20836_E.png (flipped)
00111111111111111111111111111111111111111111111111111111111111111110000000000000:5004-10810-17642_W.png (flipped)
11000000000000011111111111110000000000000111111111111100000000000000000000000000:16369-21469-8252_S.png
11000000000000011111111111110000000000000111111111111100000000000000000000000000:24426-18830-5627_N.png
11111100000000000001111111111111111111111111000000000000011111111111110000000000:16369-21469-8252_W.png
11111100000000000001111111111111111111111111000000000000011111111111110000000000:22161-18187-20222_E.png
11111110000000000000000000000000000000000000001111111111111111111111111100000000:28824-13023-24184_S.png
11111110000000000000000000000000000000000000001111111111111111111111111100000000:32078-14314-1511_N.png
11111110000000000000000000000000011111111111111111111111111111111111111111111111:24426-18830-5627_W.png (flipped)
11111110000000000000000000000000011111111111111111111111111111111111111111111111:5167-27533-24066_E.png (flipped)
11111111110000000000000000000000000011111111111110000000000000000000000000000000:22161-18187-20222_W.png (flipped)
11111111110000000000000000000000000011111111111110000000000000000000000000000000:28824-13023-24184_E.png (flipped)
11111111111111100000000000001111111111111000000000000011111111111110000000000000:21875-14159-1067_N.png
11111111111111100000000000001111111111111000000000000011111111111110000000000000:24426-18830-5627_S.png
11111111111111111100000000000011111111111110000000000000111111111111100000000000:13858-18007-13070_S.png
11111111111111111100000000000011111111111110000000000000111111111111100000000000:22161-18187-20222_N.png
11111111111111111110000000000000000000000000000000000000000000000000000000000000:28824-13023-24184_W.png
11111111111111111110000000000000000000000000000000000000000000000000000000000000:5774-30645-16062_E.png
11111111111111111111000000000000000000000000000000000000000000000000000000000000:13789-10513-4721_E.png (flipped)
11111111111111111111000000000000000000000000000000000000000000000000000000000000:32078-14314-1511_W.png (flipped)
11111111111111111111111100000000000000000000000000111111111111000000000000000000:22161-18187-20222_S.png (flipped)
11111111111111111111111100000000000000000000000000111111111111000000000000000000:5167-27533-24066_N.png (flipped)
11111111111111111111111111111000000000000011111111111111111111111111000000000000:10297-13918-3702_E.png
11111111111111111111111111111000000000000011111111111111111111111111000000000000:13858-18007-13070_W.png
11111111111111111111111111111110000000000000111111111111100000000000000000000000:13789-10513-4721_N.png (flipped)
11111111111111111111111111111110000000000000111111111111100000000000000000000000:5774-30645-16062_S.png (flipped)
11111111111111111111111111111111110000000000000000000000000000000000000000000000:10297-13918-3702_S.png (flipped)
11111111111111111111111111111111110000000000000000000000000000000000000000000000:28824-13023-24184_N.png (flipped)
11111111111111111111111111111111111110000000000000111111111111111111111111100000:26507-21853-11958_N.png (flipped)
11111111111111111111111111111111111110000000000000111111111111111111111111100000:5167-27533-24066_S.png (flipped)
11111111111111111111111111111111111111111110000000000000000000000000000000000000:21875-14159-1067_W.png (flipped)
11111111111111111111111111111111111111111110000000000000000000000000000000000000:26507-21853-11958_E.png (flipped)
11111111111111111111111111111111111111111111111000000000000000000000000001111111:24426-18830-5627_W.png
11111111111111111111111111111111111111111111111000000000000000000000000001111111:5167-27533-24066_E.png
这篇关于解决QR拼图的算法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!