1006
需用时 02:00
修复年少时红白机上的“薄码”

还记得独属于咱们80后的红白机时代么?超级马里奥、魂斗罗,这些经典的游戏角色是不是经常从你的记忆中浮现。Flash和脚本驱动等新技术也曾重现过这些游戏,但无论规则关卡设计多么相似,都无法重现往日的温存。时过境迁,当那些粗糙的8位图再次出现,你的心中是否仍旧会心潮澎湃难以自抑呢?

这不,象牙塔里的学究们又引领了一次8位图复古风。这是一项来自校园的科研项目。微软研究院的乔纳斯研究员和希伯来大学的达尼教授合作研究一种算法,可以将极低分辨率的8位图变得线条清晰,也就是矢量化。

在如下的两张例图中,下图是放大后8位图的显示结果,可以看到通过简单的邻点插值算法,图像信息损失严重。上图是本文将要介绍的矢量化算法结果,渲染出的矢量图完好地保存了8位图的图像信息。

/gkimage/1e/rd/z5/1erdz5.png

看到这样的结果,你也许会很不屑地说,这有什么难的,打眼一看就明白了。可是你明白,计算机不明白呀。计算机内只能以矩阵的形式,孤立地保存着每个像素点的位置和色彩信息,它怎么知道哪些像素点对应着边界哪些像素点对应着填充色彩呢。

为了实现矢量化效果,研究者结合了像素点特征分析和样条曲线的技术。这两项技术都不是新方法,Adobe公司就有专门制作和处理矢量图的软件Illustrator。而这篇文章的制胜点在于研究对象,8位图的某些独有特征决定了它与普通图像处理方式的不同。

首先,8位图的每个像素信息都很重要,4×4个像素点就可以表现有效的角色信息,很可能每个像素位置的颜色有所偏差就变成为另外一个含义。其次,对于8位图,如果当前像素点的颜色和周围点的颜色完全不同,它就可以被认为是一个重要特征,而在普通图片中则被认为是瑕疵点。所以,需要先确定像素之间的关联关系,判断出对角相邻的像素是否构成一条轮廓曲线。然后,将同属于一条曲线的像素位置进行适当的矫正,用一条光滑的样条曲线来逼近它。最后对轮廓线和轮廓线内部区域填色渲染,就可以呈现出最终的矢量结果图了。

但是该算法存在两个明显的弱点:1. 8位图多由艺术师手工绘制,多会掺杂许多艺术设计中的主观因素,因而该算法成功率受到了限制。2.因为用光滑的样条曲线进行逼近,所以会损失原有图像中需要保留的尖锐点。所以用户很难得到棱角分明的长方形,只能是一个近乎于圆鼓鼓的形状。这样武断的平滑处理很可能损失图像中原有的重要信息。并且由于用到了迭代优化的方法,其计算时间可能会比较长,所以只能对于场景十分简单的游戏实现实时矢量化。

当然了,这只是象牙塔里的研究,我们真心希望任天堂公司能组织人力来参与到这个工作的研发中。毕竟我们这代人,对于超级玛丽奥这个水管工是有着特殊感情的。如果他能从红白机里一下子清晰地蹦出来,一定可以唤醒许许多多与往事有关的记忆。


信息和图片来源: extremetech

The End

发布于2011-06-01, 本文版权属于果壳网(guokr.com),禁止转载。如有需要,请联系果壳

举报这篇文章

唯一

数字图像处理博士

pic