由於存儲空間的限製,還有存儲器帶寬的限製,我們不得不在數字相機上應用圖象壓縮技術。好在低壓縮率的JPEG效果還過得去。現在的相機上大都有分辨率選擇功能,比如“Super Fine”、“Fine”等等,但你知道他們使用的壓縮率嗎?方法之一比較文件大小,比如一部300萬像素的機器,8bit x 3 RGB,應該大約是9M的數據,你得到的jpg文件大小是1.8M,那麼壓縮率就是5:1左右。還有另一方法:Exif信息。Exif實際上是一些放置在jpg文件頭部的記錄,有一個日文軟件“Exif Viewer”可以讀出這些數據,用ACDSee也可以:看文件屬性的時候有一項叫做“元數據”(Meta Data)的,裏麵列出了相機記錄在圖片上的信息,比如機型、時間、光圈快門等等。注意看一項名為“壓縮的BPP”(Compressed BPP),它表明每像素所用的bit數。因為8bit、3通道需要24bit表示一個像素,那麼用24除以該數就是壓縮率了。eg. BPP=5,壓縮率=24/5=4.8。一般而言,數字相機大多設置BPP=5作為最高質量,3或者2作為普通質量。
在我關於“理想數字相機”的那篇帖子裏,我提到了新的JPEG2000壓縮算法(下簡稱jp2),那時我希望10:1的jp2能強過5:1的JPEG(下簡稱jpg)後來做了些實驗,證明在低壓縮率(5:1)下jpg與jp2兩者在伯仲之間,jp2略微勝出;中等壓縮率(10:1)下jp2好;高壓縮率(>20:1)時jp2遠遠好於jpg。下麵描述一下我所做的對比實驗。
低壓縮比的實驗比較難做,其原因是難找到細節足夠多的原始圖片。後來我想了一個方法:在photoshop裏先把背景充滿噪聲(選Filter->Noise->Add Noise),這樣的噪聲圖象包含有豐富的高頻分量,不信你用LZW無損壓縮的TIFF格式存儲一下就知道,它根本無法壓縮。基於任何有損壓縮都會導致信噪比下降的原理,為了做對比,我們得弄點“信號”上去,用字符工具以純黑色寫一行大字,我用的是字型較複雜的行楷,72點陣的,注意Font Aliasing(反鋸齒)要設置為“None”,否則Photoshop會把字型邊緣模糊掉,這會影響我們的觀察。把此圖片存成24bit bmp格式作為我們的原始數據(注意!這隻是一種近似的方法,可能不正確!)。然後,用jp2演示軟件按5:1、10:1、20:1和50:1分別壓縮,再用jpg以同樣比率壓縮(我用的是ACDSee)。注意保持兩者大小盡量相近且jpg文件不小於對應的jp2文件。
對比的時候,請注意觀察漢字筆畫裏有沒有雜色點,理想的情況應該是純黑色並且邊緣絕對清楚。在10:1的條件下,jp2和jpg的對比就比較明顯了:jp2生成的圖片上沒有淺色的噪聲點,而jpg的圖片上的淺色點開始大量出現。5:1時兩者看來都沒什麼淺色點。至於背景上的噪聲點的變化比較有意思,jpg的結果似乎比jp2更逼真!前者看起來還是一個個的噪聲點,後者則象是局部融化了一樣。why?其實我們看到的是在噪聲上疊加噪聲的情形,jpg的噪聲看起來雖然還是噪聲,但已經不是原先的信號了,jp2則是嚴格地砍除高頻噪聲,這導致其結果比較類似“融化”的效果。在這裏我們應該隻比較漢字的還原情形。
認真想了一想,我覺得該實驗存在一個缺陷。漢字是從TTF字型產生的,也就是通過有限的矢量生成的,那麼漢字輪廓本身的高頻信息恐怕也很有限。我們這裏比較的隻是噪聲背景在不同壓縮算法處理下對圖象的影響而已。
至於真實圖象的對比,我手頭上隻有一些5:1的jpg照片,於是隻能做10:1以上的實驗了。jpg生成的結果在20:1以前還可接受,超過50:1之後就出現大量的色斑;jp2則從10:1到100:1都不會出現大塊色斑,隻是感覺圖象在“漫漫融化”一樣。觀察可見,低壓縮率下jpg似乎比jp2更銳利一些,但當把jp2的結果在Photoshop裏適度銳化後便同樣銳利,但細節要稍多一些。在超過50:1的高壓縮率下jpg所呈現出的色斑會讓眼睛感到明顯的不舒服,即便遠離屏幕眯起眼睛也是如此,jp2看起來則要舒服得多。
在這裏我不禁聯想起了壇子裏曠日持久的德頭日頭風格之爭,這jpg有點象日頭,jp2則象德頭——人眼所看察覺到的“清晰度”並不代表圖象的細節是否豐富,清晰的感覺實際上更依賴物體邊緣的對比度。現在電視機裏有所謂“勾邊電路”,它的作用就是增強物體的邊緣對比度的,本質上這是一種失真,因此勾邊的處理一般不在電視台一方進行。我又想起了音響發燒裏所謂的“膽石之爭”,電子管產生的諧波失真多為偶次諧波,晶體管則產生較多的奇次諧波,同樣是失真,但人耳對前者感覺比較遲鈍而對後者就比較敏感了。也許可以說jp2是膽jpg是石?嗬嗬,扯太遠了。但圖象文件作為一種媒體,我覺得講究細節的保留比講究清晰度來的重要。你總是可以在最終輸出的時候再做銳化處理,但想把損失的細節彌補回來那就門都沒有了。
下麵從jpg和jp2的工作原理上試圖解釋一下。jpg的基礎是8x8點陣上的DCT,即所謂“離散餘弦變換”,我已離開大學多年,關於DCT早已忘記是怎麼回事了,有興趣的可以找找《多媒體編碼技術》之類的書翻一下。但大致上jpg是在8x8像素的小塊上做的壓縮,這可以解釋為什麼壓縮比一高就出現色斑了。至於jp2,他是基於Wavelet壓縮,wavelet就是“小波”了,我沒學過《小波分析》這門課,但記得wavelet壓縮大致上是對整個二維圖象進行處理,丟掉高頻細節從而實現壓縮的,這可以解釋為什麼jp2引起的失真看起來更像焦外成像的原因。由於傳統小波壓縮的工作方式需要緩衝整個圖象,比較消耗內存,因此JPEG工作組在最終的JPEG2000方案裏把它修改為漸進(progressive/scan line based)的方式,我用的演示軟件一次隻緩衝5行即可,不曉得多緩衝一點會否進一步優化低壓縮比的表現。
結論:雖然低壓縮比時jp2對jpg優勢不明顯,但它作為一種替代jpg的算法還是能勝任的。
說了這麼多關於壓縮的,這裏再說說還原。這裏的還原不是指jpg的解壓縮,我說的是通過打印機還原,就是如何把像素有限的圖片放大輸出的問題。現在人們普遍認為,300萬像素(大約2048x1536)的數字圖片打印在A4紙上的結果基本可以接受,再大一些就不行了,也就是說,2048個點分布在長邊為297mm的A4紙上的線密度大約是7l/mm即3.5lp/mm,175dpi。而較高精度的印刷品要超過300dpi,因此其結果僅僅是“可接受”而已。與此同時,一篇報告(http://www.luminous- landscape.com/d30_vs_film.htm)指出,9MB的D30數據(300萬像素)比掃描Provia 100F膠片得到的34MB數據產生的結果更好,這的確是個疑問。文中作者提到,他在打印輸出之前用一個名為Genuine Fractals Pro 的軟件把9M圖片插值放大到了34M以匹配膠片數據的大小,我懷疑這就是原因所在了:一個聰明的放大程序能“欺騙”人的眼睛,讓結果看起來更逼真。我不了解這個軟件的機密所在,但猜一猜無妨:88414227
1,在插值放大之後再銳化比先銳化再插值要好。這一點是毫無疑問的。銳化本身就是引進失真,前麵也已提到。但如果我們先銳化,等放大以後,這本應讓我們感覺到更清晰的銳化邊緣也一同被放大變“軟”了(在相同觀察距離下)
2,PhotoShop和很多打印機驅動程序的插值放大算法也不過bicubic(雙向立方?)而已,這主要是出於速度方麵的考慮。假如能擴大取樣點的範圍,甚至使用人工智能來做模式匹配,其結果將更能滿足人眼的視覺特征,那將是一個質的飛躍。我們在傳統放大的時候非常注重放大鏡頭的素質,怎麼到了數字領域反而不那麼講究了?
作為本文的結尾,我想說當把數字技術應用到人的感官刺激方麵時,比如聲音和圖象,數學上的精確與人的感覺始終是兩回事。在保存固定的信息量的前提下也許能適當偷機取巧讓結果更能取悅人類感官?在聲音領域,杜比降噪器有點象圖象去雜點的濾鏡;勁度加強器類同圖象邊緣的銳化;MP3則相當於JPEG2000,可見耳朵和眼睛的相通之處還是滿多的。