我们常说,某某数码相机是若干万像素的,他们能生成宽xxx,高xxx的图像。像素值成了数码相机重要的一个参数。但是,相信很多朋友都知道,同样是3百万像素的输出图像,其真实分辨率可能差别相当大。所以,严格的分辨率测试是采用标准的ISO 12233分辨率测试图来进行的
什么是数码影象的插值本文作者:色墨
什么是插值,什么时候需要插值?
我们常说,某某数码相机是若干万像素的,他们能生成宽xxx,高xxx的图像。像素值成了数码相机重要的一个参数。但是,相信很多朋友都知道,同样是3百万像素的输出图像,其真实分辨率可能差别相当大。所以,严格的分辨率测试是采用标准的ISO 12233分辨率测试图来进行的(图1)。我们这篇文章不探讨照片实际信息量多少的问题,但是,关于分辨率的基础知识是我们进行后续讨论的基础。所以这里我们假定听众已经了解数字图像像素、分辨率的基本概念,如果您对此又不明白的地方,您可以先参考一下其他相关的书籍。
图一,ISO 12233分辨率测试图
我们现在要讨论的是另外一个问题,不管原始的图像是什么样子,当我们要改变图像尺寸的时候,就毕竟要增加新的像素,或者用更少的像素去表示原来的图像。那么,选择什么样的方法才能得到最好的结果呢?是否‘好’有用什么样的标准来衡定呢?在做出放大或者缩小处理后,图像原来包含的信息是否仍然保持呢?所有这些问题,在接下来,我们将从理论和实践上给出一个满意的解来。这就是本文的目的。
当我们试图改变图像的尺寸时候,就必定带来图像像素值的改变,新的生成图像的每一个像素都是通过对老的图像对应位置的像素做出某种运算得到的,所以从广义上讲,这样的操作都可以被称为插值,‘插’出新的像素来。
当然,放大图像的时候需要插值,缩小图像的时候,看起来是不需要的,直接取不就可以了吗?但实际上,为了更好的结果(我们稍候会讲到),新的图像像素往往不是直接从老的图像获得,仍然是通过对应位置周围若干像素计算出来的。所以,仍然是插值。
放大和缩小图片的目的
那么,放大图象又是为了什么呢?主要的用途是为了输出大幅面的图像,譬如打印。譬如你要打印8x6英寸的照片,打印机硬件需要每英寸300个点的像素,也就是需要2400x1800的图像,当然不可能每张图片都是这个大小,所以在打印的时候,视不同的软硬件的不同,不同的插值方法会被暗自应用,同样一张图片,出来的效果就有可能应为这个软硬件环境的不同而差别很大。以前的打印机,只支持最简单的临近像素插值法(此法有时候也被戏剧性的称为‘不做插值’),所以打印出来会有明显的锯齿现象(这是此种插值方法的缺点),现在,很多打印机支持‘无锯齿’打印,说白了,就是把硬件里面的‘临近像素插值’换成了别的相对高级的插值方法。当读完本文后,您会发现,打印机里面的这个特性,相比起最先进的插值方法来说,是在是个商业嗷头。同样道理,数码变焦无非是把这个插值工作在数码相机硬件里面事先作了,不过比打印机好一点,数码变焦起码可以利用到CCD的原始信息,所以效果上会好一些。但是,无论你采用何种放大的插值方法,不可能产生比原图更多的信息!所以我们有2个结论:1)如果你要输出图像,插值往往是必需的,所以尽可能采用你能选择的最好算法来进行插值,不要依赖硬件固有的算法,除非硬件固有的算法被证明比你所有的其他算法要好。2)插值不可能增加新的信息,甚至可能带来信息上的损害,所以不要迷信任何软件与相机所吹嘘的‘像素软件升级’功能。
图2、3
什么时候缩小图片?当你往网上贴图的时候,当你觉得某种应用不需要这么大的尺寸的时候。大的图像尺寸往往带来大的文件尺寸,所以,缩小图像也是常常用到。显然,缩小图像会丢失信息,当你把一个图像缩小到1个像素的时候,几乎所有的信息都没有了(最多只剩下照片的平均色彩信息),你永远不可能从极度缩小的图像恢复到原始图像。既然缩小后的图像无法通过放大恢复到跟原来一样,那么相反放大后图象是否有可能通过缩小恢复到原始的状态呢? 答案是否!怎么样,没想到吧?做个试验就清楚了,图2是一个极端的情况:屏幕拷贝图像,图3是将其放大两倍后再缩小两倍的样子,使用了所有的算法,这已经是最好的效果了。
如何判断插值结果的好坏
如何评断插值结果的好坏?
要明白这个问题,先搞明白‘走样’(Alias)这个概念。Photo Shop的用户就听说过’Anti Aliased’(反走样)这样一个概念。走样是指在图像处理或者图形光栅化过程中出现的异样信息。锯齿就是一种走样,有时候,走样还会形成条文干扰,下面贴几个例子(左边是有走样的情况,右边是走样很少的情况)。
图3,图形光栅化中的Alias
图4,放大图象算法不当造成的锯齿Alias
图5,缩小图像算法不当造成的条纹Alias
插值方法好坏的第一个标准:走样现象的轻重。放大图像的时候,要看边缘是否产生了锯齿,缩小图像的时候,看看是否有干扰条纹,边缘是否平顺。插值方法好坏的第二个标准:边缘是否清晰?同样贴两个例子,左边是差的算法,右边是好的算法。
图6,放大时边缘会因为算法的不同而锐利程度不同
图7,缩小时也边缘会因为算法的不同而锐利程度不同
插值方法好坏的第三个标准:过渡带的层次感细节感怎么样?贴两个例子,左边是差的算法,右边是好的算法。
图8,放大图像时层次与细节的不同
图9,缩小图像时层次与细节的不同(点击放大)
以上给出了三种判定方法,其明显程度是1>2>3。对于不同类型的图像,不同的算法有时候会各有千秋,在特定的方面可能非常突出。
常见的插值方法及其原理
常见的插值方法及其原理
这一节无可避免要接触一些数学知识,为了让本文通俗易懂,我们尽量绕开讨厌的公式等。为了进一步的简化难度,我们把讨论从二维图像降到一维上。
首先来看看最简单的‘最临近像素插值’。
A,B是原图上已经有的点,现在我们要知道其中间X位置处的像素值。我们找出X位置和A,B位置之间的距离d1,d2,如图,d2要小于d1,所以我们就认为X处像素值的大小就等于B处像素值的大小。
显然,这种方法是非常苯的,同时会带来明显的失真。在A,B中点处的像素值会突然出现一个跳跃,这就是为什么会出现马赛克和锯齿等明显走样的原因。最临近插值法唯一的优点就是速度快。
图10,最临近法插值原理
接下来是稍微复杂点的‘线性插值’(Linear)
线性插值也很好理解,AB两点的像素值之间,我们认为是直线变化的,要求X点处的值,只需要找到对应位置直线上的一点即可。换句话说,A,B间任意一点的值只跟A,B有关。由于插值的结果是连续的,所以视觉上会比最小临近法要好一些。线性插值速度稍微要慢一点,但是效果要好不少。如果讲究速度,这是个不错的折衷。
图11,线性插值原理
其他插值方法
立方插值,样条插值等等,他们的目的是试图让插值的曲线显得更平滑,为了达到这个目的,他们不得不利用到周围若干范围内的点,这里的数学原理就不再详述了。
图12,高级的插值原理
如图,要求B,C之间X的值,需要利用B,C周围A,B,C,D四个点的像素值,通过某种计算,得到光滑的曲线,从而算出X的值来。计算量显然要比前两种大许多。
好了,以上就是基本知识。所谓两次线性和两次立方实际上就是把刚才的分析拓展到二维空间上,在宽和高方向上作两次插值的意思。在以上的基础上,有的软件还发展了更复杂的改进的插值方式譬如S-SPline, Turbo Photo等。他们的目的是使边缘的表现更完美。
我们使用到的软件和测试方法
可以找到的几个软件
当我们知道几个基本概念后,特别是最临近法,线性插值,立方插值的区别后,基本上来说在实际应用中就能够按照自己需要选择合适的方法了。不过,不同软件在实现不同算法的时候,会有一些不同。有的软件,前面提到的S-Spline,Turbo Photo还有独特的算法。那么这些不同软件,不同算法之间差别究竟有多大呢?看来我们有必要来个实际的评测。
笔者手头上使用了这几个软件:
1) Photo Shop,最常见,最普及的图像处理软件
2) InfanView,免费看图软件。为什么不用ACDSee?因为InfanView支持B-Spline的算法,可以和下面的S-Spline比较。作为看图软件,图像处理不是重头,那么它的算法效果和专门的图像处理软件比是否会略逊一筹呢?
3) S-Spline,专门的插值放大为目的软件,那么效果是否更胜一筹呢?
4) Turbo Photo,国产面向普通用户的综合图像软件。也有自己的必杀技:Turbo Resize(超强缩放),看看国货的实力吧!
真刀真枪的评测和结论
我们的评测是通过两大类,各3个回合来进行。两大类是放大和缩小应用,3个回合是:测试走样,测试边缘细节,综合。由于最临近像素插值的效果实在太差,所以就不考虑在内了。两次线性在实现上没有什么讲究,各软件效果差不多,所以仅选择在Photo Shop里面进行测试一次。
第一回合 测试走样
第一回合,测试走样
我们采用的测试图为星状图,这是一个标准的测试图样,含有大量高频信息(大幅剧烈变换),很容易测出不同算法在走样这个方面的差异。
图13,测试走样用的星状图
首先来看缩小的表现,利用不同软件,不同算法把此图从360x360缩小到128x128。
PhotoShop 两次线性、Photo Shop两次立方和Infanview Lanczos(他支持的最牛的一种)
Infan View B-Spline、Turbo Photo 两次立方和Turbo Photo超强缩放
这一项总结:
可见走样最少的是Turbo Photo的两次立方运算,其次是InfanView的B-Spline和Lanczos。Photo Shop的两次立方运算在缩小尺度不大的时候还看不出区别,可是一旦尺度增大到2:1以上质量就会明显下降。这个结论在我们做实验的时候却是吃了一惊。一般数码像片的尺寸在2000线以上,用于Web输出一般是640线左右(3:1以上缩小),所以,Photo Shop的这个缺陷是很非常要命的。下图演示了在2:1的时候,PhotoShop两次立方表现尚好,但是到2.5:1的时候,就立刻糟糕了很多。
图14,Photo Shop两次立方的奇怪问题
再来看看放大方面,我们使用50x50的一个圆形来作为测试标本,放大到200x200。
PS 两次线性、PS 两次立方
Infanview Landzcos、Infanciew B-Spline
S-Spline、Turbo Photo 两次立方
Turbo Photo超强缩放
结论,B-Spline和以B-Spline为基础发展起来的S-Spline在放大图像的时候显然赢得了走样最小的桂冠。不过其他方法,除了两次线性外,表现都差不多,走样也不算太明显。
首轮综合结论:B-Spline算法是综合走样最小的插值算法。
第二回合 测试边缘表现 一
第二回合,测试边缘表现
首先还是来看看缩小图像的表现。
PS 两次线性、PS 两次立方
Infanview Landzcos、Infanview B-Spline
TurboPhoto两次立方、Turbo Photo超强缩放
看上去各个算法似乎在缩小图像时边缘表现都差不多,但是仔细比较车体上FUTURA字样和周围的反光花纹层次就不难发现,Turbo Photo的超强缩放在缩小图像时可以凸显出更多的细节。
第二回合 测试边缘表现 二
接下来是放大图像时后的表现。放大倍率是3倍
PS 两次线性
PS两次立方
Infanview Landzcos
Infanview B-Spline
S-Spline
Turbo Photo两次立方
Turbo Photo超强缩放
这一次的区别真是巨大。S-Spline和Turbo Photo的超强缩放不愧是专门开发的算法,再放大图像的时候,很好的保留了边缘的锐利性!Turbo Photo的结果层次感更强,而且没有S-Spline边缘上的杂色,这有利于表现例图中钢铁的质感。所以,略微胜出。
关于边缘和层次细节的表现,Turbo Photo的超强缩放是做得最好的。
最后回合 综合测试
最后一轮是综合测试,我们选择人想来作为综合测试的图片,应为人脸既有清晰的边缘又有缓慢的过渡和皮肤的质感。
通过上两轮的淘汰,我们基本上排除了Photo Shop的两次线性和两次立方,InfanView的Lanczos算法。因为他们在任何一项中均无突出表现。
还是先来看缩小效果,原图
下面是各种软件的效果:
Infanview B-Spline
Turbo Photo两次立方
Turbo Photo超强缩放
再来看放大2倍的效果(点击放大):
Infanview B-SplineS-Spline
Turbo Photo两次线性Turbo Photo超强缩放
综合结果的好坏,也许各有说法。S-Spline的结果更自然,但是超强缩放的结果更清晰。
评测到了这一步,该做结论了。
缩小类:
首推Turbo Phoro的超强缩放,但如果原始图像含有网格(譬如毛线衣),规则图形等,造成了干扰花纹时候,推荐使用B-Spline,如果没有,使用两次立方算法。
放大类:
首推S-Spline,如果没有的情况下,选用Turbo Photo的超强缩放代替。
网友评论