圖像縮放,在數字圖像處理甚至日常生活中再平常不過,特別是隨著Photoshop、ACDSee 一類專業圖像處理軟件的普及,任何一個瀏覽過網頁的人即使沒有操作圖像縮放,但一定看過縮放后的圖像。圖像縮放雖然如此平常,在一些專業軟件的操作中又是非常的簡單,但它真的如你所想那么簡單嗎?
我們看一個例子:圖1 和圖2 分別是512*512 的Lena 和Baboon 標準圖,圖3(下載地址:http://www.truemark.cn/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 (http://www.onlinedown.net/soft/6436.htm):最流行的印前插值軟件,它首先將圖像轉化成矢量編碼,再根據編碼不斷的改變計算規則,這種方法在理論上講基本無損。
Shortcut PhotoZoom Pro (http://www.newhua.com/soft/20473.htm) :一款新穎的、技術上具有革命性的對數碼圖片進行放大的工具。通過使用S-Spline 技術盡可能地提高放大圖片的品質,其最大特色是可以對圖片進行放大而沒有鋸齒。
SizeFixer (http://www.fixerlabs.com/EN/upsize/sizefixer/sizefixer_home.htm) : 第一款使用Super-Resolution 技術的商業軟件,可能是目前最好的用于打印輸出的插值軟件。其界面直觀簡單,提供多級圖像銳化工具可使圖像保持清晰銳利。
使用上述不同插值方法放大圖13 中的小旗,效果分別如圖14 至17 所示[2]。