编程模拟自然(二):仿人工拼接碎片
序·女娲补天篇
另一个世界,擎天大柱倾倒,九州大地裂毁。
传有一个名叫 NvWa 的人,她炼出五色石补好了天空,万灵始得以安居。
...
第零章 需求分析
”一定要保证基类安全,这片天地是面向对象设计...要密切关注子类受波及的蔓延态势。“
事发两刻钟后,NvWa 接到了通知,当即成立了抢险指挥部并做了重要发言。
”天阙碎片散落人间,但有上古架构师盘古留下的设计文档,只要收集齐天地碎片并用五色石加以炼化就可以复原天空。“
NvWa 仔细听取了现场工程人员的说明。
”立刻落实碎片和五彩石收集工作,大家要在最短时间内完成代码重构,上下一心,尽最大努力挽回不必要的损失。“
NvWa 对现场的应急小组下达了指令。
...
碎片全部收集完毕。
图2-1 图像碎片
第一章 预处理
把碎片颜色信息二值化,即将图像上的像素点的灰度值设置为 0 或 255。
二值化
图像呈现出明显的只有黑和白的视觉效果
图2-2 二值化
“一言不发架构师。”
第二章 特征提取
获取碎片边缘向量信息,分别用 0 和 1 标记白色和黑色。
图2-3 边缘特征提取
“/*不是每个编译器都能看到这句话。*/”
第三章 特征比对
通常来说,如果两个碎片相连,它们对应的边缘特征相似度也就越高。
比较向量的相似度
可以用余弦定理计算两个向量的相似度
图2-4 比对特征值
“天阙碎片封印的这段代码似乎是上古程序员写的注释。”
第四章 匹配空间
想象有个工作桌,左边是零散的未拼好的碎片,右边是已经拼了的碎片。
图2-5 空白
“我会编程一个美丽的公主哦。”
第五章 迭代匹配
有了上面想象的空间,每拼好一张,就在拼好的基础上继续迭代,拼好的一整块碎片就会慢慢变大直至拼接完成。
图2-6 拼接图像
“周五了,不知道明天会不会加班。”
第六章 人工干预
程序部分已经完了,有时受限于匹配条件,迭代可能会无限地进行下去,此时就需要人工干预。
图2-8 手动拼接
“不周山被撞导致天地崩落说明基类遭到破坏的后果是灾难性的。”NvWa 在周六的灾后重建会议上发表重要讲话。
后记
“...元纪 24 年 6 月 5 日,星期天,天气晴。”
“...那只猿一动不动地蹲在树上,时间仿佛凝固了一万年,斜阳下是它以 PI/4 弧度仰望天空的剪影...”
...
“...10024 年 6 月 5 日...我们再也没见过那个猿,大概是从天空出现一道裂缝那天起...”
--《夏の日记》