编程模拟自然(二):仿人工拼接碎片

序·女娲补天篇

另一个世界,擎天大柱倾倒,九州大地裂毁。
传有一个名叫 NvWa 的人,她炼出五色石补好了天空,万灵始得以安居。

  ...

第零章 需求分析

  "基类崩了,这整个系统都是面向对象设计的...赶紧排查所有子类受影响的范围。"

  线上事故发生两刻钟后,技术负责人 NvWa 收到了告警,紧急拉起了一个战术群。

  "天阙碎片散落人间,好在上古架构师盘古留下了设计文档,只要收集齐天地碎片并用五色石加以炼化就可以复原天空。"

  NvWa 看完了现场工程师贴在群里的堆栈日志。

  "碎片和五彩石的收集工作排到最高优先级,大家加把劲,尽快完成代码重构,把这个 P0 修掉。"

  NvWa 在群里 @了所有人。

  ...

  碎片全部收集完毕。

图2-1 图像碎片

图2-1 图像碎片

第一章 预处理

  把碎片颜色信息二值化,即将图像上的像素点的灰度值设置为 0 或 255。

  二值化

  图像呈现出明显的只有黑和白的视觉效果

图2-2 二值化

图2-2 二值化

   "一言不发架构师。"

第二章 特征提取

  获取碎片边缘向量信息,分别用 0 和 1 标记白色和黑色。

图2-3 边缘特征提取

图2-3 边缘特征提取

  "/不是每个编译器都能看到这句话。/"

第三章 特征比对

  通常来说,如果两个碎片相连,它们对应的边缘特征相似度也就越高。

  比较向量的相似度

  可以用余弦定理计算两个向量的相似度

图2-4 比对特征值

图2-4 比对特征值

  "天阙碎片封印的这段代码似乎是上古程序员写的注释。"

第四章 匹配空间

  想象有个工作桌,左边是零散的未拼好的碎片,右边是已经拼了的碎片。

图2-5 空白

图2-5 空白

  "我会编程一个美丽的公主哦。"

第五章 迭代匹配

  有了上面想象的空间,每拼好一张,就在拼好的基础上继续迭代,拼好的一整块碎片就会慢慢变大直至拼接完成。

图2-6 拼接图像

图2-6 拼接图像

  "周五了,不知道明天会不会加班。"

第六章 人工干预

  程序部分已经完了,有时受限于匹配条件,迭代可能会无限地进行下去,此时就需要人工干预。

图2-8 手动拼接

图2-8 手动拼接

  "不周山被撞导致天地崩落,说明基类被破坏的后果是灾难性的。"NvWa 在周六的复盘会上总结道。

后记

  "...元纪 24 年 6 月 5 日,星期天,天气晴。"

  "...那只猿一动不动地蹲在树上,时间仿佛凝固了一万年,斜阳下是它以 PI/4 弧度仰望天空的剪影..."

  ...

  "...10024 年 6 月 5 日...我们再也没见过那个猿,大概是从天空出现一道裂缝那天起..."

  --《夏の日记》

附录

  预知后情,且看下回分解。了解更多请浏览目录导航

posted @ 2015-11-21 16:48  ExperDot  阅读(1836)  评论(5)    收藏  举报