编辑“︁
JPEG
”︁(章节)
跳转到导航
跳转到搜索
Template:Editnotice load/content
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
== JPEG编/解码器示例 == === 編碼 === JPEG標準中许多選項很少使用,大多数图像软件在创建JPEG文件时使用更简单的JFIF格式。當應用到一個擁有每個[[像素]]24位元(24 bits per pixel,紅、藍、綠各有八位元)的輸入時,這邊只有針對更多普遍編碼方法之一的簡潔描述。這個特定的選擇是一種[[失真資料壓縮]]方法。 ==== 色彩空間轉換 ==== 首先,影像由[[三原色光模式|RGB]](紅綠藍)轉換為一種稱為[[YUV]]的不同[[色彩空間]]。这与模拟[[PAL制式]]彩色电视传输所使用的[[色彩空间]]相似,但是更类似于[[MAC电视传输系统]]运作的方式。但不是模拟[[NTSC]],模拟NTSC使用的是YIQ色彩空间。 * Y成份表示一個像素的[[亮度]] * U和V成份一起表示[[色調]]與[[飽和度]]。 YUV分量可以由PAL制系统中归一化(经过[[伽马校正]])的R',G',B'经过下面的计算得到: * Y=0.299R'+0.587G'+0.114B' * U=-0.147R'-0.289G'+0.436B' * V=0.615R'-0.515G'-0.100B' 這種編碼系統非常有用,因為人眼對亮度差異的敏感度高於色彩變化。在此前提下可以设计更加高效压缩图像的編碼器(encoder)。 ==== 縮減取樣(Downsampling) ==== 经过RGB到YUV颜色空间的转换后,开始进行缩减采样来減少U和V的成份(稱為"縮減取樣"或"[[色度抽样]]"(chroma subsampling)。在JPEG上這種縮減取樣的比例可以是[[YUV 4:4:4|4:4:4]](無縮減取樣),[[YUV 4:2:2|4:2:2]](在水平方向2的倍數中取一個),以及最普遍的[[YUV 4:2:0|4:2:0]](在水平和垂直方向2的倍數中取一個)。對於壓縮過程的剩餘部份,Y、U、和V都是以非常類似的方式來個別地處理。 ==== 離散餘弦變換(Discrete cosine transform) ==== [[File:JPEG example image.jpg|thumb|256px|以8-位元灰階所顯示的8x8子影像]] 下一步,將影像中的每個成份(Y, U, V)生成三個區域,每一個區域再劃分成如瓷磚般排列的一個個的8×8子區域,每一子區域使用二維的[[离散余弦变换|離散餘弦變換]](DCT)轉換到頻率空間。 如果有一個如這樣的8×8的8-位元(0~255)子區域: :<math> \begin{bmatrix} 52 & 55 & 61 & 66 & 70 & 61 & 64 & 73 \\ 63 & 59 & 55 & 90 & 109 & 85 & 69 & 72 \\ 62 & 59 & 68 & 113 & 144 & 104 & 66 & 73 \\ 63 & 58 & 71 & 122 & 154 & 106 & 70 & 69 \\ 67 & 61 & 68 & 104 & 126 & 88 & 68 & 70 \\ 79 & 65 & 60 & 70 & 77 & 68 & 58 & 75 \\ 85 & 71 & 64 & 59 & 55 & 61 & 65 & 83 \\ 87 & 79 & 69 & 68 & 65 & 76 & 78 & 94 \end{bmatrix} </math> 接著推移128,使其範圍變為 -128~127,得到結果為 :<math> \begin{bmatrix} -76 & -73 & -67 & -62 & -58 & -67 & -64 & -55 \\ -65 & -69 & -73 & -38 & -19 & -43 & -59 & -56 \\ -66 & -69 & -60 & -15 & 16 & -24 & -62 & -55 \\ -65 & -70 & -57 & -6 & 26 & -22 & -58 & -59 \\ -61 & -67 & -60 & -24 & -2 & -40 & -60 & -58 \\ -49 & -63 & -68 & -58 & -51 & -60 & -70 & -53 \\ -43 & -57 & -64 & -69 & -73 & -67 & -63 & -45 \\ -41 & -49 & -59 & -60 & -63 & -52 & -50 & -34 \end{bmatrix} </math> 且接著使用[[離散餘弦變換]],和捨位取最接近的整數,得到結果為 :<math> \begin{bmatrix} -415 & -30 & -61 & 27 & 56 & -20 & -2 & 0 \\ 4 & -22 & -61 & 10 & 13 & -7 & -9 & 5 \\ -47 & 7 & 77 & -25 & -29 & 10 & 5 & -6 \\ -49 & 12 & 34 & -15 & -10 & 6 & 2 & 2 \\ 12 & -7 & -13 & -4 & -2 & 2 & -3 & 3 \\ -8 & 3 & 2 & -6 & -2 & 1 & 4 & 2 \\ -1 & 0 & 0 & -2 & -1 & -3 & 4 & -1 \\ 0 & 0 & -1 & -4 & -1 & 0 & 1 & 2 \end{bmatrix} </math> 左上角之相當大的數值称为[[DC係數]](直流系数);其他63个值称为AC系数(交流系数)。下面将对所有8×8表格中的DC系数使用[[差分编码]],对AC系数使用[[行程编码]]。<ref>{{cite book |author=吕凤军 |title=数字图像处理编程入门 |year=1999 |publisher=清华大学出版社}}</ref> ==== [[量化 (訊號處理)|量化]](Quantization) ==== 人类眼睛在一個相對大範圍區域,辨別[[亮度]]上細微差異是相當的好,但是在一個高頻率亮度變動之確切強度的分辨上,卻不是如此地好。這個事實讓我們能在高頻率成份上極佳地降低資訊的數量。簡單地把頻率領域上每個成份,除以一個對於該成份的常數就可完成,且接著捨位取最接近的整數。這是整個過程中的主要失真運算。以這個結果而言,經常會把很多更高頻率的成份捨位成為接近0,且剩下很多會變成小的正或負數。 一個普遍的量化矩陣是: :<math> \begin{bmatrix} 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 \end{bmatrix} </math> 使用這個量化矩陣與前面所得到的DCT係數矩陣逐項相除,得到結果為: :<math> \begin{bmatrix} -26 & -3 & -6 & 2 & 2 & -1 & 0 & 0 \\ 0 & -2 & -4 & 1 & 1 & 0 & 0 & 0 \\ -3 & 1 & 5 & -1 & -1 & 0 & 0 & 0 \\ -3 & 1 & 2 & -1 & 0 & 0 & 0 & 0 \\ 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix} </math> 舉個例子,使用−415(DC係數)且捨位得到最接近的整數 :<math> \mathrm{round} \left( \frac{-415}{16} \right) = \mathrm{round} \left( -25.9375 \right) = -26 </math> ==== 熵編碼技術(entropy coding) ==== [[File:JPEG_ZigZag.svg|thumb|Z字型掃描矩陣的順序]] 熵編碼是[[無失真資料壓縮]]的一個特別形式。它牽涉到將影像成份以Z字型(zigzag)排列,把相似頻率群組在一起(矩陣中往左上方向是越低頻率之係數,往右下較方向是較高頻率之係數),插入長度編碼的零,且接著對剩下的使用[[哈夫曼树|霍夫曼編碼]]。 JPEG標準也允許(但是並不要求)在數學上優於霍夫曼編碼的[[算术编码]]之使用。然而,這個特色幾乎很少獲使用,因為它被[[專利]]所涵蓋,且它相較於霍夫曼編碼在編碼和解碼上會更慢。使用算術編碼一般會讓檔案更小約5%。 對於前者量化的係數所作的Z字型序列會是: −26,<br /> −3, 0,<br /> −3, −2, −6,<br /> 2, −4, 1, −3,<br /> 1, 1, 5, 1, 2,<br /> −1, 1, −1, 2, 0, 0,<br /> 0, 0, 0, −1, −1, 0, 0,<br /> 0, 0, 0, 0, 0, 0, 0, 0,<br /> 0, 0, 0, 0, 0, 0, 0,<br /> 0, 0, 0, 0, 0, 0,<br /> 0, 0, 0, 0, 0,<br /> 0, 0, 0, 0,<br /> 0, 0, 0,<br /> 0, 0,<br /> 0 當剩下的所有係數都是零,對於過早結束的序列,JPEG有一個特別的霍夫曼編碼用詞。使用這個特殊的編碼用詞,EOB,該序列變為 −26,<br /> −3, 0,<br /> −3, −2, −6,<br /> 2, −4, 1 −3,<br /> 1, 1, 5, 1, 2,<br /> −1, 1, −1, 2, 0, 0,<br /> 0, 0, 0, −1, −1, EOB ==== 壓縮比率與不自然痕跡(artifact) ==== [[File:JPEG example artifact.png|thumb|200px|失真壓縮導致的人為現象(上)與原圖(下),200%放大]] 按:artifact在這個領域又解釋為赝像、非自然信號、人為現象。 在量化階段時,依照除數的不同,會使結果的壓縮比率可能有很多變化。10:1通常可得到無法使用肉眼分辨與原圖差異的影像。100:1壓縮通常是可行的,但與原圖相較,會看出明顯的[[壓縮人為現象|不自然痕跡]]。壓縮的適當等級是依據要壓縮那一種影像而定。 使用[[全球資訊網]]的人,可能熟悉這種出現在JPEG數位影像,已知[[壓縮人為現象]]的不規則現象。這是由於JPEG演算法的量化步驟所造成的結果。這種現象在臉部照片中的眼睛四周特別明顯。他們可以藉由選擇[[影像壓縮|壓縮]]的較低水平(使用較低的壓縮率)來減少這種現象;他們可能藉由使用[[無失真資料壓縮|無失真]]檔案格式來儲存一個影像來消除這種現象,然而針對照片影像,這樣通常會使檔案大小增加。 === 解碼 === 解碼來顯示影像,包含反向作以上所有的過程 取DCT係數矩陣(在把DC係數差異加回去之後) :<math> \begin{bmatrix} -26 & -3 & -6 & 2 & 2 & -1 & 0 & 0 \\ 0 & -2 & -4 & 1 & 1 & 0 & 0 & 0 \\ -3 & 1 & 5 & -1 & -1 & 0 & 0 & 0 \\ -3 & 1 & 2 & -1 & 0 & 0 & 0 & 0 \\ 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix} </math> 且以前面的量化矩陣乘以它,得到 :<math> \begin{bmatrix} -416 & -33 & -60 & 32 & 48 & -40 & 0 & 0 \\ 0 & -24 & -56 & 19 & 26 & 0 & 0 & 0 \\ -42 & 13 & 80 & -24 & -40 & 0 & 0 & 0 \\ -42 & 17 & 44 & -29 & 0 & 0 & 0 & 0 \\ 18 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix} </math> 左上角的部份與原本DCT係數矩陣非常接近地相似。使用反向DCT得到一個有數值的影像(仍然受移位128) {{multiple image | align = right | direction = vertical | width = 256 | image1 = JPEG example image.jpg | image2 = JPEG example image decompressed.jpg | footer = 注意原來(上)與解壓縮影像(下)的些微差異,在角落处可以輕易地看出來 }} :<math> \left[ \begin{array}{rrrrrrrr} -66 & -63 & -71 & -68 & -56 & -65 & -68 & -46 \\ -71 & -73 & -72 & -46 & -20 & -41 & -66 & -57 \\ -70 & -78 & -68 & -17 & 20 & -14 & -61 & -63 \\ -63 & -73 & -62 & -8 & 27 & -14 & -60 & -58 \\ -58 & -65 & -61 & -27 & -6 & -40 & -68 & -50 \\ -57 & -57 & -64 & -58 & -48 & -66 & -72 & -47 \\ -53 & -46 & -61 & -74 & -65 & -63 & -62 & -45 \\ -47 & -34 & -53 & -74 & -60 & -47 & -47 & -41 \end{array} \right] </math> 且對每一個項目加上128 :<math> \left[ \begin{array}{rrrrrrrr} 62 & 65 & 57 & 60 & 72 & 63 & 60 & 82 \\ 57 & 55 & 56 & 82 & 108 & 87 & 62 & 71 \\ 58 & 50 & 60 & 111 & 148 & 114 & 67 & 65 \\ 65 & 55 & 66 & 120 & 155 & 114 & 68 & 70 \\ 70 & 63 & 67 & 101 & 122 & 88 & 60 & 78 \\ 71 & 71 & 64 & 70 & 80 & 62 & 56 & 81 \\ 75 & 82 & 67 & 54 & 63 & 65 & 66 & 83 \\ 81 & 94 & 75 & 54 & 68 & 81 & 81 & 87 \end{array} \right]. </math> 這是解壓縮的子影像,且可以用來与原本子影像相比(也可以看右方的影像),藉由取兩者之間的差異(原本—解壓縮)得到誤差值。 :<math> \left[ \begin{array}{rrrrrrrr} -10 & -10 & 4 & 6 & -2 & -2 & 4 & -9 \\ 6 & 4 & -1 & 8 & 1 & -2 & 7 & 1 \\ 4 & 9 & 8 & 2 & -4 & -10 & -1 & 8 \\ -2 & 3 & 5 & 2 & -1 & -8 & 2 & -1 \\ -3 & -2 & 1 & 3 & 4 & 0 & 8 & -8 \\ 8 & -6 & -4 & -0 & -3 & 6 & 2 & -6 \\ 10 & -11 & -3 & 5 & -8 & -4 & -1 & -0 \\ 6 & -15 & -6 & 14 & -3 & -5 & -3 & 7 \end{array} \right] </math> 每個像素大約是5的平均絕對誤差,也就是說,<math>\frac{1}{64} \sum_{x=1}^8 \sum_{y=1}^8 |e(x,y)| = 4.8750</math>。誤差在左下角顯而易見,左下方的像素變得比它鄰近右方的像素還更暗。
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息