首页 > 范文大全 > 正文

图像缩放的秘密

开篇:润墨网以专业的文秘视角,为您筛选了一篇图像缩放的秘密范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

图像缩放,在数字图像处理甚至日常生活中再平常不过,特别是随着Photoshop、ACDSee 一类专业图像处理软件的普及,任何一个浏览过网页的人即使没有操作图像缩放,但一定看过缩放后的图像。图像缩放虽然如此平常,在一些专业软件的操作中又是非常的简单,但它真的如你所想那么简单吗?

我们看一个例子:图1 和图2 分别是512*512 的Lena 和Baboon 标准图,图3(下载地址:www.省略/download/LenaBaboon.bmp)是图1 和图2 通过软件合成的结果。合成方法是将图1 的所有奇数行和奇数列数据用图2 对应的行与列数据替换,文件存储为BMP格式。在Photoshop中打开图3,将图像大小调整为256*256 像素,重定图像像素方法选择“邻近”(见图4),我们竟然得

到了如图1 所示的效果。

如果我们将图3 的大小分别调整为253*253、254*254、255*255 和257*257、258*258、259*259 将得到如图5 至图10 的效果(打开上述下载网址,用鼠标调整网页大小,亦可观察到相似效果)。结果是否有点匪夷所思?那我们接下来就从图像的缩放原理讲起,介绍常见的自适应和非自适用插值方法。

图像缩放原理

图像缩放就是源图像到目标图像的空间变换,在大多数应用中,要求保持图像中曲线型特征的连续性和各物体的连通性,一个约束较少的空间变换算法很可能会弄断直线和打碎图像,从而使图像内容“支离破碎”。图像的几何运算可采用如下两种方法[1] :

把几何运算想象成将输入图像的像素(指像素的灰度值或者颜色值,以下同)一个一个地转移到输出图像中,如果一个输入像素被映射到四个输出像素之间的位置,则其值就按插值算法在四个输出像素之间进行分配。我们称之为像素移交(Pixel Carry-over) 或称为向前映射(如图11)。

另一个方法是将输出像素一次一个地映射回输入图像中,如果一个输出像素被映射到四个输入像素之间则其值就按插值算法确定。此方法称之为像素填充(Pixel Filling)或者向后映射或者逆向映射(如图12)。

由于许多输入像素可能映射到输出图像的边界之外,故向前映射算法有些浪费,并且每个输出像素的值可能要由许多输入像素的值来决定,因而要涉及多次计算。而向后映射算法是逐像素、逐行地生成输出图像,每个像素的值由四个像素参与的插值所唯一确定。当然,输入图像必须允许按空间变换所定义的方式随机访问,因而可能有些复杂,虽然如此,该方法对一般的应用更为切实可行。

插值方法

输出像素通常被映射到输入图像中的非整数位置,即位于四个输入像素之间。因此,为了决定与该位置相对应的像素值,必须进行插值运算。根据是否平等对待每一个像素可分为两类插值方法:一类是如Photoshop、ACDSee 等通用软件采用的非自适应插值方法;另一类是如Genuine Fractals 等专业软件使用的自适应插值方法,根据所要插值的内容和像素的颜色分布,使有些地方强化结构处理,有些地方模糊处理,其目的在于放大输出照片时最大限度显示细节。

非自适应插值算法

最近邻插值 (Nearest Neighbor) :最简单的插值方法,输出像素的值等于离它所映射到的位置最近的输入像素的值。其计算十分简单,在许多情况下其结果也可令人接受。由于这种简单的方法不能产生抗模糊的效果,因此会产生锯齿现象。本文引言中的例子就是最近邻插值算法的一个特例。

双线性插值 (Bilinear) :或称之为两次线性插值,根据输出像素所映射到的最近的4个输入像素的值作线性插值计算,在大多数情况下其准确度要高于最近邻法,效果也要好得多,最明显的就是在放大时图像边缘的锯齿比最近邻法小许多。

双三次插值 (Bicubic) :亦称之为两次立方插值,是一种更加复杂的插值方式,它能创造出比双线性插值更平滑的图像边缘,每个输出像素的值由映射的像素附近的4x4 个像素值推算得来,因此精确度较高。

双三次插值方法通常运用在图像处理软件、打印机驱动程序和数码相机中,对原图像或原图像的某些区域进行放大。Photoshop 还为用户提供了两种不同的双三次插值方法:双三次插值平滑化(Bicubic Smoother) 和双三次插值锐化(Bicubic Sharper),一般建议放大使用平滑化,缩小使用锐化。

高阶插值 (High Order) :双线性插值的平滑作用可能会使图像的细节产生退化,尤其是在进行放大处理时,另外在有些应用中,双线性插值的斜率不连续会产生不希望得到的结果。这两种情况都可以通过高阶插值得到修正,当然这需要增加计算量。使用高阶插值的方法有:Spline(S 样条)、Legendre 中心函数和Sinc 函数等插值方法。

与Photoshop 相比,ACDSee( 本文使用的版本为8.1)提供了更多的插值方法,主要有Box、Triangle、Bicubic、Bell、B-Spline、Lanczos、Mitchell、ClearIQZ 等方法。其中Mitchell 在放大自然图像时能提供一个比较平滑的过渡,它能在振铃效应(ringing effect)和模糊效应(blurring effect) 之间取得一个比较好的折衷;ClearIQZ 要比Bicubic 和Lanczos 慢,但它能提供最好的效果。

至于Photoshop 与ACDSee 缩放操作哪个效果更理想,没有一个绝对的标准。一方面要考虑图像的内容,另一方面还要考虑图像处理的场合和最终用途, 如果只是简单浏览一下缩放的效果就用ACDSee(Photoshop 还没启动完成ACDSee 就已经收工了!),如果用于印刷出版最好还是用Photoshop。

从感觉上讲2 的幂次方倍(2n)数缩小可以每隔n-1 个点取一个像素值而不必内插有利于保持质量,放大则可保持原来像素值不变也有利于保持质量。但实际并非如此,因为一方面现实应用中不一定恰巧2n 倍数缩放,另一方面Photoshop、ACDSee 等软件亦非如此处理:同样缩小一半,在Photoshop中使用最近邻和双线性、在ACDSee 中使用Triangle、Bicubic、Bell 时才是如此,其它情况如缩小四分之一或者放大一倍均非如此。

自适应插值算法

自适应插值算法不是平等地对待所有的像素,而是基于图像的内容进行插值,从而使得图像的边缘部分更加平滑[3]。采用自适用插值的图像处理软件有:

Genuine Fractals (www.省略/soft/6436.htm):最流行的印前插值软件,它首先将图像转化成矢量编码,再根据编码不断的改变计算规则,这种方法在理论上讲基本无损。

Shortcut PhotoZoom Pro (www.省略/soft/20473.htm) :一款新颖的、技术上具有革命性的对数码图片进行放大的工具。通过使用S-Spline 技术尽可能地提高放大图片的品质,其最大特色是可以对图片进行放大而没有锯齿。

SizeFixer (www.省略/EN/upsize/sizefixer/sizefixer_home.htm) : 第一款使用Super-Resolution 技术的商业软件,可能是目前最好的用于打印输出的插值软件。其界面直观简单,提供多级图像锐化工具可使图像保持清晰锐利。

使用上述不同插值方法放大图13 中的小旗,效果分别如图14 至17 所示[2]。