線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1753
推到 Plurk!
推到 Facebook!

jpeg壓縮比

尚未結案
ddaken
一般會員


發表:39
回覆:33
積分:19
註冊:2005-01-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-28 22:19:30 IP:61.229.xxx.xxx 未訂閱
請問各位大大 jpeg的壓縮比也就是100% or 90% or ....0% 等等~這些跟dc/ac的量化表有什麼樣的關係呢? 看了一些資料~好像都沒講到這個 只有單存的說 這是dc的量化表 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99 這是ac的量化表 17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 那~~這兩個table是對應到100%的嗎? 謝謝~
ddaken
一般會員


發表:39
回覆:33
積分:19
註冊:2005-01-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-03 14:06:33 IP:211.78.xxx.xxx 未訂閱
發覺都沒人回答.. 自己回答好了@@因為這幾天在網路上找 看到一個網頁有寫~ 不過沒有實際去驗證~所以不能確定到底是對的還是錯的 原本網址在這裡 http://www.cmlab.csie.ntu.edu.tw/~chenhsiu/tech/jpeg_quant.html 是台大一個博班的學生寫的 原文如下 之前蠻好奇當我們要壓 JPEG 檔案的時候 那些 50%, 70%, 90% 的壓縮比是怎麼算出來的 最近看到下面的作法: if (quality <= 0) quality = 1; if (quality > 100) quality = 100; if (quality < 50) quality = 5000 / quality; else quality = 200 - quality*2; 然後再用這個 quality 去 scale JPEG 標準的 quantization table 的每個係數 dct_block[i] = coeff[i] * quality / 100; 也就是說當我們用 50% 去壓的時候,用的才是標準的 quantization table 往上或是往下調壓縮率會根據下面的算法 (scale_factor 就是上面的 quality) for (i = 0; i < DCTSIZE2; i ) { temp = ((long) basic_table[i] * scale_factor 50L) / 100L; /* limit the values to the valid range */ if (temp <= 0L) temp = 1L; if (temp > 32767L) temp = 32767L; /* max quantizer needed for 12 bits */ if (force_baseline && temp > 255L) temp = 255L; /* limit to baseline range if requested */ (*qtblptr)->quantval[i] = (UINT16) temp; } 當調到 100% 的時候, 每個 quantization table 的值都會是 1 以下是 JPEG 標準的 quantization table 參考值 static const unsigned int std_luminance_quant_tbl[DCTSIZE2] = { 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99 }; static const unsigned int std_chrominance_quant_tbl[DCTSIZE2] = { 17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 }; 我看的 source 是 Independent JPEG Group (http://www.ijg.org/) 所提供的 這份程式雖然是 C 寫成的, 可是程式本身卻非常 OO 用 C 的傳統語法, 實作出很多 OO 的概念, 精簡易懂的好程式 ============================================================================= 現在的數位相機預設的 quantization table 都非常的小 例如 OLYMPUS C2100UZ 照出來的 quantization table (luminance) 1 1 1 1 1 2 2 2 1 1 1 1 1 2 2 2 1 1 1 1 2 2 3 2 1 1 1 1 2 3 3 2 1 1 1 2 3 4 4 3 1 1 2 3 3 4 5 4 2 3 3 3 4 5 5 4 3 4 4 4 4 4 4 4 另外一台 Canon S45 更誇張, 整個 table 全部都是 1 (也就是 100%) 所以現在數位相機照出來的照片, 其實是傾向幾乎無失真的
系統時間:2024-05-13 17:57:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!