美妙的绘图演算法
编者按绘图(image processing),用计算机系统对影像展开预测,以达至所需结论的控制技术。又称为影像处置。绘图通常指位数绘图。
Scriptol列举了三种奇妙的绘图演算法,让他们一同上看呵呵。
http://www.scriptol.com/programming/graphic-algorithms.php
一、画素图聚合矢量图的演算法位数黄金时代晚期的相片,解析度较低。特别是许多电脑游戏的相片,弱化后是无数个画素魔方。Depixelizing演算法能让高清晰度的画素图转化成为高效率的矢量图。
http://research.microsoft.com/en-us/um/people/kopf/pixelart/
(上面的图是画素图和转换后的矢量图,可见,聚合的矢量图/矢量图的效果更好)
画素图,也是他们通常讲的1280*720什么的,是每行多少个画素,每列多少个画素相片的画素数越多,颜色就越连贯美,影像就越清晰。这种相片被实际广泛应用于1990年代中期以前所有的电脑和电脑游戏。另外,较老的桌面环境里的图标、小显示屏设备例如手机,都应用这类相片。由于那时的硬件条件限制,美工们被强迫用只有很少颜色分类的画板作图,并且要机械地手工设定每个画素的位置,而不是从更高解析度作品自动缩放。
这些画素图实际上成为了一整代人的文化符号,如今虽然已经很少出现,但是由于每个画素手工布局使得每个画素都承载丰富的意义,是值得怀念的,情怀啊。如果能够将其重现至现在的各个解析度的电子设备,岂不是也是一种乐趣?
这就引出了另外一种图:矢量图,也称为面向对象的影像或绘图影像。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,具有颜色、形状、轮廓、大小和位置等属性。
也是说,矢量图是由很多独立的影像拼接起来的。弱化后影像不会失真,和解析度无关。
他们平常拍摄的影像,如果弱化就会模个整体,不可能是相互独立分离的许多元素拼接成一幅影像。
矢量图是通过多个对象的组合聚合的,对其中的每一个对象的纪录方式,都是以数学函数来实现的,也是说,矢量图实际上并不是象位图那样纪录画面上每一点的信息,而是纪录了元素形状及颜色的演算法,
当你打开一幅矢量图的时候,软件对图形象对应的函数展开运算,将运算结论[图形的形状和颜色]显示给你看。无论显示画面是大还是小,画面上的对象对应的演算法是不变的,所以,即使对画面展开倍数相当大的缩放,其显示效果仍然相同[不失真]。
矢量图的主要格式有EPS,CDR,WMF,emf等,通常用到的jpg,bmp,png通通不是矢量图,而写论文杂志社肯定是要求矢量图的。
换言之:你只要知道矢量图能任意弱化,不变色,不模糊就行了。而位图是由无数的色彩点组成的图案,当被无限弱化时会看到一块一块的画素色块,效果会失真。
那怎么从画素图导出一张光滑、与解析度无关的矢量图,它能任意弱化而不会失真。先上看看效果吧,是这样的。有没有觉得很奇妙?其实原理就一句话,检测边界并曲线拟合,但是过程是非常具有挑战性的。
此处简要介绍呵呵演算法的原理,结合例子来简要说明,特意将英文子图说明注释保留。
上图从左至右是基本的流程,中间四幅图展现的是弱化的耳朵部位。有几个部分需要注意:
1 保留有意义的画素。当有些画素与周围画素的颜色信息不同时,它是影像的典型特征,需要保留,如找出图中的耳朵部位。
2 区分需要展开连续处置的部分,与不需要展开连续处置的部分。如图嘴巴是不需要展开连续处置的,要保持波动。而脑袋的轮廓需要展开连续光滑处置。
3 区分哪些相似画素应该被联系起来,哪些不需要。如图嘴巴处,考虑2*2四个画素,比如嘴巴部位下面的四个画素,红色应该被连接起来构成特征曲线的部分,而白色不应该。(具体是采用启发的方法,过于复杂不提)
解决了上面的问题后,就得到了许多线条,对这些线条展开样条插值能得到最终的结论。(中间省略N多控制技术难题)。
二、黑白相片的着色演算法让老照片自动变成彩色的演算法。
http://www.cs.huji.ac.il/~yweiss/Colorization/index.html
当年一张黑白照片就珍贵的不行,现在手机拍出来的都是高清彩色图了。
好吧,那就当那当年的黑白相片,重新着个色可好?《Colorization using Optimization》。
该文章基于最简单的原理,那是灰度值差不多的画素,应该具有差不多的颜色。既然在灰度空间相似,在彩色空间也应该相似。
有没有觉得很奇妙,几乎是全自动的,用户只需要许多很简单的交互,就能将各个区域分割开来,然后分别上色。
比如下图,在需要上相同颜色的区域,用相同的笔触简要画出,就能识别各个区域,然后分别上色,毫无失真感有没有?!
当然,如果将各个区域平滑地分割出去,避免出现不连续的颜色边界,是问题的难点。那是影像分割的问题,堪称绘图领域最难的几个方向之一。
三、影像自动合成能把许多图自动拼接成一幅图:《Sketch2Photo: Internet Image Montage》,绝逼的黑科技。
根据一张草图,选择原始照片,然后把它们合成在一同,聚合新照片。这是清华大学的科研成果。
http://cg.cs.tsinghua.edu.cn/montage/main.htm
四、消除阴影的演算法不留痕迹地去掉照片上某件东西的阴影的演算法。
Pyramid-Based Shadow Removal
http://www.cs.huji.ac.il/~danix/ShadowRemoval/index.html
五、HDR照片的演算法所谓“HDR照片“,是扩大亮部与暗部的对比效果,亮的地方变得非常亮,暗的地方变得非常暗,亮暗部的细节都很明显。
实现HDR的软件有很多,这里推荐GMIC。它是GIMP影像编辑软件的一个插件,代码全部开源。
六、消除杂物的演算法所谓”消除杂物”,是在照片上划出一块区域,然后用背景自动填补。Resynthesizer能做到这一点,它也是GIMP的一个插件。
http://www.logarithmic.net/pfh/resynthesizer
七、美颜的演算法自动对容貌展开”美化”的演算法。
http://www.leyvand.com/beautification2008/
作者: 阮一峰
日期: 2011年8月13日
版权声明:自由转载–非商用–非衍生–保持署名(创意共享3.0许可证)
2016新春开工大吉!!