本文转自:http://www.wtoutiao.com/p/17bqT6G.html
图像处理知识库:http://www.wtoutiao.com/author/imageKB.html
导读
图像处理(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年代中期以前所有的电脑和电子游戏。另外,较老的桌面环境里的图标、小显示屏设备例如手机,都应用这类图片。由于那时的硬件条件限制,美工们被强迫用只有很少颜色分类的画板作图,并且要机械地手工设定每个像素的位置,而不是从更高分辨率作品自动缩放。
这些像素图实际上成为了一整代人的文化符号,如今虽然已经很少出现,但是由于每个像素手工布局使得每个像素都承载丰富的意义,是值得怀念的,情怀啊。如果能够将其重现至现在的各个分辨率的电子设备,岂不是也是一种乐趣?
这就引出了另外一种图:矢量图,也称为面向对象的图像或绘图图像。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,具有颜色、形状、轮廓、大小和位置等属性。
也就是说,矢量图是由很多独立的图像拼接起来的。放大后图像不会失真,和分辨率无关。
我们平常拍摄的图像,如果放大就会模糊。而一些条码里面的文字,logo打印出来的图像非常大,仍然非常清晰,就是因为我们拍摄的图像是位图,而一些设计出来的图像是矢量图。需要说明的是,矢量图只能通过软件设计来生成,因为设备拍照获取的图像是一个整体,不可能是相互独立分离的一些元素拼接成一幅图像。
矢量图是通过多个对象的组合生成的,对其中的每一个对象的纪录方式,都是以数学函数来实现的,也就是说,矢量图实际上并不是象位图那样纪录画面上每一点的信息,而是纪录了元素形状及颜色的算法,
当你打开一幅矢量图的时候,软件对图形象对应的函数进行运算,将运算结果[图形的形状和颜色]显示给你看。无论显示画面是大还是小,画面上的对象对应的算法是不变的,所以,即使对画面进行倍数相当大的缩放,其显示效果仍然相同[不失真]。
矢量图的主要格式有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的软件有很多,这里推荐G'MIC。它是GIMP图像编辑软件的一个插件,代码全部开源。
http://gmic.sourceforge.net/
六、消除杂物的算法
所谓"消除杂物",就是在照片上划出一块区域,然后用背景自动填补。Resynthesizer可以做到这一点,它也是GIMP的一个插件。
http://www.logarithmic.net/pfh/resynthesizer
七、美颜的算法
自动对容貌进行"美化"的算法。
http://www.leyvand.com/beautification2008/