㈠ jpeg圖片壓縮的原理(談談怎麼個壓縮法怎麼個有損法)
JPEG壓縮過程
JPEG壓縮分四個步驟實現:
1.顏色模式轉換及采樣;
2.DCT變換;
3.量化;
4.編碼。
二.
1.顏色模式轉換及采樣 RGB色彩系統是我們最常用的表示顏色的方式。JPEG採用的是YCbCr色彩系統。想要用JPEG基本壓縮法處理全彩色圖像,得先把RGB顏色模式圖像數據,轉換為YCbCr顏色模式的數據。Y代表亮度,Cb和Cr則代表色度、飽和度。通過下列計算公式可完成數據轉換。 Y=0.2990R+0.5870G+0.1140B Cb=-0.1687R-0.3313G+0.5000B+128 Cr=0.5000R-0.4187G-0.0813B+128 人類的眼晴對低頻的數據比對高頻的數據具有更高的敏感度,事實上,人類的眼睛對亮度的改變也比對色彩的改變要敏感得多,也就是說Y成份的數據是比較重要的。既然Cb成份和Cr成份的數據比較相對不重要,就可以只取部分數據來處理。以增加壓縮的比例。JPEG通常有兩種采樣方式:YUV411和YUV422,它們所代表的意義是Y、Cb和Cr三個成份的數據取樣比例。
2.DCT變換 DCT變換的全稱是離散餘弦變換(Discrete Cosine Transform),是指將一組光強數據轉換成頻率數據,以便得知強度變化的情形。若對高頻的數據做些修飾,再轉回原來形式的數據時,顯然與原始數據有些差異,但是人類的眼睛卻是不容易辨認出來。 壓縮時,將原始圖像數據分成8*8數據單元矩陣,例如亮度值的第一個矩陣內容如下:
JPEG將整個亮度矩陣與色度Cb矩陣,飽和度Cr矩陣,視為一個基本單元稱作MCU。每個MCU所包含的矩陣數量不得超過10個。例如,行和列采樣的比例皆為4:2:2,則每個MCU將包含四個亮度矩陣,一個色度矩陣及一個飽和度矩陣。 當圖像數據分成一個8*8矩陣後,還必須將每個數值減去128,然後一一代入DCT變換公式中,即可達到DCT變換的目的。圖像數據值必須減去128,是因為DCT轉換公式所接受的數字范圍是在-128到+127之間。 DCT變換公式:
x,y代表圖像數據矩陣內某個數值的坐標位置f(x,y)代表圖像數據矩陣內的數個數值u,v代表DCT變換後矩陣內某個數值的坐標位置F(u,v)代表DCT變換後矩陣內的某個數值 u=0 且 v=0 c(u)c(v)=1/1.414 u>0 或 v>0 c(u)c(v)=1 經過DCT變換後的矩陣數據自然數為頻率系數,這些系數以F(0,0)的值最大,稱為DC,其餘的63個頻率系數則多半是一些接近於0的正負浮點數,一概稱之為AC。
3、量化 圖像數據轉換為頻率系數後,還得接受一項量化程序,才能進入編碼階段。量化階段需要兩個8*8矩陣數據,一個是專門處理亮度的頻率系數,另一個則是針對色度的頻率系數,將頻率系數除以量化矩陣的值,取得與商數最近的整數,即完成量化。 當頻率系數經過量化後,將頻率系數由浮點數轉變為整數,這才便於執行最後的編碼。不過,經過量化階段後,所有數據只保留整數近似值,也就再度損失了一些數據內容,JPEG提供的量化表如下:
4、編碼 Huffman編碼無專利權問題,成為JPEG最常用的編碼方式,Huffman編碼通常是以完整的MCU來進行的。 編碼時,每個矩陣數據的DC值與63個AC值,將分別使用不同的Huffman編碼表,而亮度與色度也需要不同的Huffman編碼表,所以一共需要四個編碼表,才能順利地完成JPEG編碼工作。 DC編碼 DC是彩採用差值脈沖編碼調制的差值編碼法,也就是在同一個圖像分量中取得每個DC值與前一個DC值的差值來編碼。DC採用差值脈沖編碼的主要原因是由於在連續色調的圖像中,其差值多半比原值小,對差值進行編碼所需的位數,會比對原值進行編碼所需的位數少許多。例如差值為5,它的二進製表示值為101,如果差值為-5,則先改為正整數5,再將其二進制轉換成1的補數即可。所謂1的補數,就是將每個Bit若值為0,便改成1;Bit為1,則變成0。差值5應保留的位數為3,下表即列出差值所應保留的Bit數與差值內容的對照。
在差值前端另外加入一些差值的霍夫曼碼值,例如亮度差值為5(101)的位數為3,則霍夫曼碼值應該是100,兩者連接在一起即為100101。下列兩份表格分別是亮度和色度DC差值的編碼表。根據這兩份表格內容,即可為DC差值加上霍夫曼碼值,完成DC的編碼工作。
AC編碼 AC編碼方式與DC略有不同,在AC編碼之前,首先得將63個AC值按Zig-zag排序,即按照下圖箭頭所指示的順序串聯起來。
63個AC值排列好的,將AC系數轉換成中間符號,中間符號表示為RRRR/SSSS,RRRR是指第非零的AC之前,其值為0的AC個數,SSSS是指AC值所需的位數,AC系數的范圍與SSSS的對應關系與DC差值Bits數與差值內容對照表相似。 如果連續為0的AC個數大於15,則用15/0來表示連續的16個0,15/0稱為ZRL(Zero Rum Length),而(0/0)稱為EOB(Enel of Block)用來表示其後所剩餘的AC系數皆等於0,以中間符號值作為索引值,從相應的AC編碼表中找出適當的霍夫曼碼值,再與AC值相連即可。 例如某一組亮度的中間符為5/3,AC值為4,首先以5/3為索引值,從亮度AC的Huffman編碼表中找到1111111110011110霍夫曼碼值,於是加上原來100(4)即是用來取[5,4]的Huffman編碼1111111110011110100,[5,4]表示AC值為4的前面有5個零。 由於亮度AC,色度AC霍夫曼編碼表比較長,在此省略去,有興趣者可參閱相關書籍。 實現上述四個步驟,即完成一幅圖像的JPEG壓縮。 參考資料[1] 林福宗 《圖像文件格式(上)——Windows 編程》,清華大學出版社, 1996年[2] 李振輝、李仁各編著,《探索圖像文件的奧秘》,清華大學出版社,1996年[3] 黎洪松、成實譯《JPEG靜止數據壓縮標准》,學苑出版社,1996年
希望有點幫助
參考資料:http://www.daima.com.cn/Info/94/Info31445/
㈡ 簡述JPEG靜態圖象壓縮編碼的過程及其實現技術
不是吧。。。。啥專業?
10、詳述JPEG靜態圖象壓縮編碼原理及實現技術。
答:JPEG是由國際電報咨詢委員會(CCITT)和國際標准化協會(OSI)聯合組成的一個圖象專家小組開發研製的連續色調、多級灰度、靜止圖象的數字圖象壓縮編碼方法。JPEG適於靜止圖象的壓縮,此外,電視圖象序列的幀內圖象的壓縮編碼也常採用JPEG壓縮標准。JPEG數字圖象壓縮文件作為一種數據類型,如同文本和圖形文件一樣地存儲和傳輸。基於離散餘弦變換(DCT)的編碼方法是JPEG演算法的核心內容。演算法的編解碼過程如教材136頁圖4.25-4.26所示。編碼處理過程包括原圖象數據輸入、正向DCT變換器、量化器、熵編碼器和壓縮圖象數據的輸出,除此之外還附有量化表和熵編碼表(即哈夫曼表);接收端由信道收到壓縮圖象數據流後,經過熵解碼器、逆量化器、逆變換(IDCT),恢復並重構出數字圖象,量化表和熵編碼表同發送端完全一致。編碼原圖象輸入,可以是單色圖象的灰度值,也可以是彩色圖象的亮度分量或色差分量信號。DCT的變換壓縮是對一系列8*8采樣數據作塊變換壓縮處理,可以對一幅像,從左到右、從上到下、一塊一塊(8*8/塊)地變換壓縮,或者對多幅圖輪流取8*8采樣數據塊壓縮。解碼輸出數據,需按照編碼時的分塊順序作重構處理,得到恢復數字圖象。
具體的實現技術如下:
(1)首先把一幅圖象分8*8的子塊按圖中的框圖進行離散餘弦正變換(FDCT)和離散餘弦逆變換(IDCT)。
在編碼器的輸入端,原始圖象被分成一系列8*8的塊,作為離散餘弦正變換(FDCT)的輸入。在解碼器的輸出端,離散餘弦逆變換(IDCT)輸出許多8*8的數據塊,用以重構圖象。8*8 FDCT和8*8 IDCT數學定義表達式如下:
離散餘弦正變換(FDCT)可看作為一個諧波分析儀,把離散餘弦逆變換(IDCT)看作一個諧波合成器。每個8*8二維原圖象采樣數據塊,實際上是64點離散信號,該信號是空間二維參數x和y的函數。FDCT把這些信號作為輸入,然後把它分解成64個正交基信號,每個正交信號對應於64個二維(2D)空間頻率中的一個,這些空間頻率是由輸入信號的頻譜組成。FDCT的輸出是64個基信號的幅值(即DCT系數),每個系數值由64點輸入信號唯一地確定,即離散餘弦變換的變換系數。在頻域平面上變換系數二維頻域變數u和v的函數。對應於u=0,v=0的系數,稱做直流分量(DC系數),其餘63個系數稱做交流分量(AC系數)。因為在一幅圖象中像素之間的灰度或色差信號變化緩慢,在8*8子塊中像素之間相關性很強,所以通過離散餘弦正變換處理後,在空間頻率低頻范圍內集中了數值大的系數,這樣為數據壓縮提供了可能。遠離直流系數的高頻交流系數大多為零或趨於零。如果FDCT和IDCT變換計算中計算精度足夠高,並且DCT系數沒有被量化,那麼原始的64點信號就能精確地恢復。
(2)量化
為了達到壓縮數據的目的,對DCT系數F(u,v)需作量化處理。量化處理是一個多到一的映射它是造成DCT編解碼信息損失的根源。在JPEG標准中採用線性均勻量化器。量化定義為,對64個DCT變換系數F(u,v)除以量化步長Q(u,v)後四捨五入取整。即量化器步長是量化表的元素,量化表元素隨DCT變換系數的位置而改變,同一像素的亮度量化表和色差量化表不同值,量化表的尺寸也是64,與64個變換系數一一對應。量化表中的每一個元素值為1至255之間的任意整數,其值規定了對應位置變換系數的量化器步長。在接收端要進行逆量化,逆量化的計算公式為:
不同頻率的餘弦函數對視覺的影響不同,量化處理是在一定的主觀保真度圖像質量的前提下,可據不同頻率的視覺閾值來選擇量化表中的元素值的大小。根據心理視覺加權函數得到亮度化表和色度量化表。DCT變換系數F(u,v)除以量化表中對應位置的量化步長,其幅值下降,動態范圍變窄,高頻系數的零值數目增加。
(3)熵編碼
為進一步達到壓縮數據的目的,需對量化後的DC系數和行程編碼後的AC系數進行基於統計特性的熵編碼。64個變換系數經量化後,坐標u=v=0的值是直流分量(即DC系數)。DC系數是64個圖像采樣平均值。因為相鄰的8×8塊之間有強的相關性,所以相鄰塊的DC系數值很接近,對量化後前後兩塊之間的DC系數差值進行編碼,可以用較少的比特數。DC系數包含了整個圖像能量的主要部分。經量化後的63個AC系數編碼時從左上方AC(u=7,v=7)開始,沿箭頭方向,以「Z」字形行程掃描,直到AC(u=7,v=7)掃描結束。量化後特編碼的AC系數通常有許多零值,沿「Z」字形路徑行進,可使零AC系數集中,便於使用行程編碼方法。63個AC系數行程編碼和碼字,可用兩個位元組表示。JPEG建議使用兩種熵編碼方法:Huffman編碼和自適應二進制算術編碼。熵編碼可分成兩步進行,首先把DC和AC系數轉換成一個中間格式的符號序列,第二步是給這些符號賦以變長碼字。
㈢ JPEG壓縮編碼演算法的主要步驟是什麼其中哪些步驟是有損的,那些是無損的
JPEG壓縮編碼演算法的主要計算步驟如下:
1、正向離散餘弦變換(FDCT)。
2、量化(quantization)。
3、Z字形編碼(zigzag scan)。
4、使用差分脈沖編碼調制(differential pulse code molation,DPCM)對直流系數(DC)進行編碼。
5、使用行程長度編碼(run-length encoding,RLE)對交流系數(AC)進行編碼。
6、熵編碼(entropy coding)。
㈣ 簡述JPEG壓縮演算法
首先你需要了解幾個概念,有損壓縮,量化,行程編碼。
對一副圖片來說,bitmap就是原始格式,沒經過任何壓縮的。
量化就是把所有0-255的像素值進行歸類,然後分成盡量少的積累,這要存儲量就小很多了,對於JEPG來說量化是有損壓縮的起源。
最後就是對所有的已經歸類過的點進行行程編碼,然後就壓縮完了
㈤ MPEG和JPEG分別採用了什麼演算法
MPEG是Moving Pictures Experts Group(動態圖像專家組)英文縮寫.這個專家組是1988年開始負責CD建立視頻和音頻標首,MPEG有四個版本分別是,MPEG1 到MPEG4,其中MPEG3就是我們所說的MP3,MPEG在壓縮比方面突破200:1,壓縮時而做到對數據的損失很少.
JPEG是Joint Photographics Expert Group(合接圖像專家組)英文縮寫,JPEG可以大幅壓縮圖型文件,同樣一幅畫面壓縮比是原文件的1/10到1/20,文件大小一般為幾十K到一二百K之間,而色彩數最高可達24位,比較廣泛應用於網際網路上,以節約網路傳輸資源.JPEG的壓縮效果還是可以的.
㈥ 求jpeg圖像壓縮演算法流程圖
1.在源圖像上加zero-padding(為了第二部分塊)
2.分塊,把圖像分為每個8x8(或16x16)的block(這就是為什麼第一步要調整圖像大小,以可以整分圖像)
3.做DCT變換
4.量化(失真在這里產生)
以上步驟已經算壓縮了源圖像了
還可以附加一步,根據一定演算法將量化好的圖像進行編碼,以減小文件大小
㈦ 現今的圖像壓縮演算法有哪些急...
淺談圖像壓縮演算法
余科亮
本文僅討論靜止圖像的壓縮基本演算法,圖像壓縮的目的在於以較少的數據來
表示圖像以節約存儲費用,或者傳輸時間和費用。
JPEG壓縮演算法可以用失真的壓縮方式來處理圖像,但失真的程度卻是肉眼所
無法辯認的。這也就是為什麼JPEG會有如此滿意的壓縮比例的原因。
下面主要討論,JPEG基本壓縮法。
一.JPEG壓縮過程
JPEG壓縮分四個步驟實現:
1.顏色模式轉換及采樣;
2.DCT變換;
3.量化;
4.編碼。
二.1.顏色模式轉換及采樣
RGB色彩系統是我們最常用的表示顏色的方式。JPEG採用的是YCbCr色彩系統。
想要用JPEG基本壓縮法處理全彩色圖像,得先把RGB顏色模式圖像數據,轉換為
YCbCr顏色模式的數據。Y代表亮度,Cb和Cr則代表色度、飽和度。通過下列計算
公式可完成數據轉換。
Y=0.2990R+0.5870G+0.1140B
Cb=-0.1687R-0.3313G+0.5000B+128
Cr=0.5000R-0.4187G-0.0813B+128
人類的眼晴對低頻的數據比對高頻的數據具有更高的敏感度,事實上,人類
的眼睛對亮度的改變也比對色彩的改變要敏感得多,也就是說Y成份的數據是比較
重要的。既然Cb成份和Cr成份的數據比較相對不重要,就可以只取部分數據來處
理。以增加壓縮的比例。JPEG通常有兩種采樣方式:YUV411和YUV422,它們所代
表的意義是Y、Cb和Cr三個成份的數據取樣比例。
2.DCT變換
DCT變換的全稱是離散餘弦變換(Discrete Cosine Transform),是指將一組
光強數據轉換成頻率數據,以便得知強度變化的情形。若對高頻的數據做些修飾,
再轉回原來形式的數據時,顯然與原始數據有些差異,但是人類的眼睛卻是不容
易辨認出來。
壓縮時,將原始圖像數據分成8*8數據單元矩陣,例如亮度值的第一個矩陣內
容如下:
JPEG將整個亮度矩陣與色度Cb矩陣,飽和度Cr矩陣,視為一個基本單元稱作
MCU。每個MCU所包含的矩陣數量不得超過10個。例如,行和列采樣的比例皆為4:
2:2,則每個MCU將包含四個亮度矩陣,一個色度矩陣及一個飽和度矩陣。
當圖像數據分成一個8*8矩陣後,還必須將每個數值減去128,然後一一代入
DCT變換公式中,即可達到DCT變換的目的。圖像數據值必須減去128,是因為DCT
轉換公式所接受的數字范圍是在-128到+127之間。
DCT變換公式:
x,y代表圖像數據矩陣內某個數值的坐標位置
f(x,y)代表圖像數據矩陣內的數個數值
u,v代表DCT變換後矩陣內某個數值的坐標位置
F(u,v)代表DCT變換後矩陣內的某個數值
u=0 且 v=0 c(u)c(v)=1/1.414
u>0 或 v>0 c(u)c(v)=1
經過DCT變換後的矩陣數據自然數為頻率系數,這些系數以F(0,0)的值最
大,稱為DC,其餘的63個頻率系數則多半是一些接近於0的正負浮點數,一概稱
之為AC。
3、量化
圖像數據轉換為頻率系數後,還得接受一項量化程序,才能進入編碼階段。
量化階段需要兩個8*8矩陣數據,一個是專門處理亮度的頻率系數,另一個則是
針對色度的頻率系數,將頻率系數除以量化矩陣的值,取得與商數最近的整數,
即完成量化。
當頻率系數經過量化後,將頻率系數由浮點數轉變為整數,這才便於執行最
後的編碼。不過,經過量化階段後,所有數據只保留整數近似值,也就再度損失
了一些數據內容,JPEG提供的量化表如下:
4、編碼
Huffman編碼無專利權問題,成為JPEG最常用的編碼方式,Huffman編碼通常
是以完整的MCU來進行的。
編碼時,每個矩陣數據的DC值與63個AC值,將分別使用不同的Huffman編碼
表,而亮度與色度也需要不同的Huffman編碼表,所以一共需要四個編碼表,才
能順利地完成JPEG編碼工作。
DC編碼
DC是彩採用差值脈沖編碼調制的差值編碼法,也就是在同一個圖像分量中取
得每個DC值與前一個DC值的差值來編碼。DC採用差值脈沖編碼的主要原因是由於
在連續色調的圖像中,其差值多半比原值小,對差值進行編碼所需的位數,會比
對原值進行編碼所需的位數少許多。例如差值為5,它的二進製表示值為101,如
果差值為-5,則先改為正整數5,再將其二進制轉換成1的補數即可。所謂1的補
數,就是將每個Bit若值為0,便改成1;Bit為1,則變成0。差值5應保留的位數
為3,下表即列出差值所應保留的Bit數與差值內容的對照。
在差值前端另外加入一些差值的霍夫曼碼值,例如亮度差值為5(101)的位
數為3,則霍夫曼碼值應該是100,兩者連接在一起即為100101。下列兩份表格分
別是亮度和色度DC差值的編碼表。根據這兩份表格內容,即可為DC差值加上霍夫
曼碼值,完成DC的編碼工作。
AC編碼
AC編碼方式與DC略有不同,在AC編碼之前,首先得將63個AC值按Zig-zag排
序,即按照下圖箭頭所指示的順序串聯起來。
63個AC值排列好的,將AC系數轉換成中間符號,中間符號表示為RRRR/SSSS,
RRRR是指第非零的AC之前,其值為0的AC個數,SSSS是指AC值所需的位數,AC系
數的范圍與SSSS的對應關系與DC差值Bits數與差值內容對照表相似。
如果連續為0的AC個數大於15,則用15/0來表示連續的16個0,15/0稱為ZRL
(Zero Rum Length),而(0/0)稱為EOB(Enel of Block)用來表示其後所
剩餘的AC系數皆等於0,以中間符號值作為索引值,從相應的AC編碼表中找出適
當的霍夫曼碼值,再與AC值相連即可。
例如某一組亮度的中間符為5/3,AC值為4,首先以5/3為索引值,從亮度AC
的Huffman編碼表中找到1111111110011110霍夫曼碼值,於是加上原來100(4)
即是用來取[5,4]的Huffman編碼1111111110011110100,[5,4]表示AC值為4的
前面有5個零。
由於亮度AC,色度AC霍夫曼編碼表比較長,在此省略去,有興趣者可參閱相
關書籍。
實現上述四個步驟,即完成一幅圖像的JPEG壓縮。
參考資料
[1] 林福宗 《圖像文件格式(上)——Windows 編程》,清華大學出版社,
1996年
[2] 李振輝、李仁各編著,《探索圖像文件的奧秘》,清華大學出版社,1996年
[3] 黎洪松、成實譯《JPEG靜止數據壓縮標准》,學苑出版社,1996年
㈧ 用java能實現JPEG壓縮演算法嗎
BufferedImageimage=newBufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(img,0,0,w,h,null);//繪制縮小後的圖
FiledestFile=newFile("C:\tmp1.jpg");
FileOutputStreamout=newFileOutputStream("C:\tmp2.jpg");//輸出到文件流
JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
㈨ JPEG的無損壓縮方法原理及過程。
jpeg是有損壓縮,jpeg2000才有無損壓縮。。
JPEG2000的原理:
JPEG 2000 與傳統 JPEG 最大的不同,在於它放棄了 JPEG
所採用的以離散餘弦轉換(Discrete Cosine Transform) 為主的區塊編碼方式,而改采以小波轉換(Wavelet transform)
為主的多解析編碼方式。小波轉換的主要目的是要將影像的頻率成分抽取出來。
JPEG2000的優點:
1、JPEG2000 作為JPEG升級版,高壓縮(低比特速率)是其目標,其壓縮率比 JPEG 高約 30% 左右。
2、JPEG2000
同時支持有損和無損壓縮,而 JPEG 只能支持有損壓縮。無損壓縮對保存一些重要圖片十分有用。
3、JPEG2000
能實現漸進傳輸,這是JPEG2000的一個極其重要的特徵。也就是我們對 GIF
格式影像常說的「漸現」特性。它先傳輸圖像的輪廓,然後逐步傳輸數據,不斷提高圖像質量,讓圖象由朦朧到清晰顯示,而不必是像現在的 JPEG
一樣,由上到下慢慢顯示。
4、JPEG2000
支持所謂的「感興趣區域」特性,你可以任意指定影像上你感興趣區域的壓縮質量,還可以選擇指定的部份先解壓縮。這樣我們就可以很方便的突出重點了。
㈩ 用java能實現JPEG壓縮演算法嗎
想100%重寫jpeg演算法,這個幫不了。
壓縮、調整,可以看BufferedImage和ImageIO