jpeg壓縮演算法matlab
Ⅰ matlab實驗:圖像H1.BMP 以JPEG 格式進行壓縮,質量因子設為90,結果保存為JPG 圖像J1,怎麼實現
img=imread('H1.bmp');
imwirte(img, 'J1.jpg','jpg','quality',90)
Ⅱ 簡述JPEG的壓縮原理
JPEG壓縮分四個步驟實現:
一、顏色模式轉換及采樣:
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三個成份的數據取樣比例。
二、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之間。
三、量化:
圖像數據轉換為頻率系數後,還得接受一項量化程序,才能進入編碼階段。量化階段需要兩個8*8矩陣數據,一個是專門處理亮度的頻率系數,另一個則是針對色度的頻率系數,將頻率系數除以量化矩陣的值,取得與商數最近的整數,即完成量化。 當頻率系數經過量化後,將頻率系數由浮點數轉變為整數,這才便於執行最後的編碼。不過,經過量化階段後,所有數據只保留整數近似值,也就再度損失了一些數據內容。
四、編碼:
1、編碼 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的編碼工作;
2、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壓縮。
Ⅲ 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 Eoding)。
JPEG是有損編碼,是在量化過程中取整而產生的。
Ⅳ C語言實現把一個JPG圖片分解為兩個圖片,急!!謝謝
麻煩。。無聊。。
先找著jpg文件頭格式。。
C打開文件。。找到數據部分。。
新建文件。。寫入。。保存。。
綜上所述:無聊+麻煩。
Ⅳ matlab求助!如何將處理的圖片保存在磁碟里
有好多種方法:
1.saveas(h,'filename',format),
比如,saveas(h1,'aaa.jpg','jpg'),注意,『filename'中的'.jpg'可加也可不加,加了的話一定要和後面的format一樣,當不加的時候出來的文件沒有圖標,你還得再加,所以我一般都加。這個是可行的,我實現了
2.imwrite,
這個我沒有實驗成功,但是應該好使你可以查查幫助
3.print
print
filename
當然你可以加點參數
例:print
aa.jpg
Ⅵ 基於matlab的圖像壓縮演算法有哪些
基於Matlab實現的經典的圖像壓縮演算法,包括哈夫曼編碼,算術編碼、字典編碼、行程編碼-Lempel-zev
編碼正交變換編碼如DCT、子帶編碼
粒子、子采樣、比特分配、矢量量化。
Ⅶ 有誰知道,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)。
2. 量化
量化是對經過FDCT變換後的頻率系數進行量化。量化的目的是減小非「0」系數的幅度以及增加「0」值系數的數目。量化是圖像質量下降的最主要原因。
對於有損壓縮演算法,JPEG演算法使用均勻量化器進行量化,量化步距是按照系數所在的位置和每種顏色分量的色調值來確定。因為人眼對亮度信號比對色差信號更敏感,因此使用了兩種量化表:亮度量化值和色差量化值。此外,由於人眼對低頻分量的圖像比對高頻分量的圖像更敏感,因此圖中的左上角的量化步距要比右下角的量化步距小。
3. Z字形編排
量化後的系數要重新編排,目的是為了增加連續的「0」系數的個數,就是「0」的遊程長度,方法是按照Z字形的式樣編排,如圖5-17所示。這樣就把一個8 ? 8的矩陣變成一個1 ? 64的矢量,頻率較低的系數放在矢量的頂部。
4. 直流系數的編碼
8 ? 8圖像塊經過DCT變換之後得到的DC直流系數有兩個特點,一是系數的數值比較大,二是相鄰8 ? 8圖像塊的DC系數值變化不大。根據這個特點,JPEG演算法使用了差分脈沖調制編碼(DPCM)技術,對相鄰圖像塊之間量化DC系數的差值(Delta)進行編碼,
Delta=DC(0, 0)k-DC(0, 0)k-1 ........ (5-5)
5. 交流系數的編碼
量化AC系數的特點是1 ? 64矢量中包含有許多「0」系數,並且許多「0」是連續的,因此使用非常簡單和直觀的遊程長度編碼(RLE)對它們進行編碼。
JPEG使用了1個位元組的高4位來表示連續「0」的個數,而使用它的低4位來表示編碼下一個非「0」系數所需要的位數,跟在它後面的是量化AC系數的數值。
6. 熵編碼
使用熵編碼還可以對DPCM編碼後的直流DC系數和RLE編碼後的交流AC系數作進一步的壓縮。
在JPEG有損壓縮演算法中,使用霍夫曼編碼器來減少熵。使用霍夫曼編碼器的理由是可以使用很簡單的查表(lookup table)方法進行編碼。壓縮數據符號時,霍夫曼編碼器對出現頻度比較高的符號分配比較短的代碼,而對出現頻度較低的符號分配比較長的代碼。這種可變長度的霍夫曼碼表可以事先進行定義。
Ⅷ matlab圖象重建是什麼意思!
圖像壓縮是當今信息時代迫切需求的一門圖像處理技術,它極大的減少了圖像的數據量,為圖像的存儲,傳輸提供了方便。小波變換,是一種廣泛用於圖像壓縮的方法。它能讓圖像按不同的解析度分析。根據Mallat演算法的思想,圖像能分解成一個輪廓信號(低頻子圖)和水平,垂直,對角線三個方向上的細節信號(高頻子圖)。而輪廓信號又可以進一步分解。而圖像的主要能量部分是低頻部分,而且人眼視覺系統對低頻部分更為敏感,所以可以對低頻部分採用較低壓縮比;對高頻部分採用較大壓縮比來進行壓縮。
本文提出的是一種結合小波變換,DCT變換和矢量量化的壓縮方法。根據人眼的視覺特性,首先對圖像進行小波分解,然後,對低頻分量進行壓縮比不大的DCT變換;對不同方向不同解析度的高頻分量進行不同碼字大小的矢量量化編碼,然後對反變換和解碼後的系數進行小波重構。矢量量化過程中的碼書設計採用的是LBG演算法。這樣,根據對圖像質量的不同要求,我們可以改變小波分解的層數,來得到不同壓縮比的圖像。本篇論文只對小波分解一層和兩層後壓縮進行了模擬和分析,表明該方案結合了各種壓縮方法的優點,在滿足圖像質量的同時能得到較大的壓縮比。目前,在包裝裝潢設計中常用的圖形處理軟體有Pho-toshop,CorelDraw,AutoCAD等。但是這些軟體中很少涉及到對圖像進行壓縮處理,以滿足圖像進行傳輸和儲存的需要。基於這一點考慮,在此嘗試著用MATLAB編程來處理包裝裝潢圖像的壓縮,實現包裝與計算機的緊密結合。
1 MATLAB
MATLAB是MathWorks公司推出的一套高性能的數值計算和可視化軟體,它集數值分析、矩陣運算、信號處理和圖像顯示於一體,它附帶的小波分析工具箱功能強大,可以完成小波分析的絕大部分工作。MATLAB工具箱的出現避免了程序設計中的重復性勞動,縮短了開發周期,降低了成本,因而受到工科院校師生和研究人員的青睞。
在介紹利用MATLAB小波工具壓縮圖像的文獻中,總是將真彩色RGB圖像轉換為灰度級索引圖像進行處理.經過這種處理以後,圖像的存儲數據能得到一定的壓縮,但由壓縮後的數據難以恢復成理想的彩色圖像。文中用MATLAB中有關函數處理圖像壓縮,而且由壓縮後的數據可以還原出圖像.實驗結果表明,還原出的圖像效果是理想的。文中主要以lena圖像的處理為例,對它進行二進小波多層分解後,將低頻和高頻近似的系數矩陣作相應的處理,來研究用MATLAB中的小波工具箱壓縮圖像的方法。
2 圖像壓縮方法
在實際應用中,首先需要從圖像文件中讀取圖像數據.MATLAB使用imreed()函數完這一任務.例如,在電腦D盤中有一彩色圖像文件picl.jps,則可由下述語句讀取:
X=imread(′D:\picl.jpg′);
MATLAB圖像處理工具箱支持4種基本圖像類型:索引圖像、灰度圖像、二進制圖像和RGB圖像.MATLAB直接從圖像文件中讀取的圖像為RGB圖像.它存儲在三維數組中。這個三維數組有3個面,依次對應子紅(Red)、綠(Green)、藍(Blue)3種顏色,而面中的數據則分別是這3種顏色的強度值,面中的元素對應於圖像中的像素點。
索引圖像數據包括圖像矩陣X與顏色圖數組map,其中顏色圖map是按圖像中顏色值進行排序後的數組。對於每個像素,圖像矩陣X包含一個值,這個值就是顏色圖數組map中的索引。顏色圖map為m×3雙精度矩陣,各行分別指定紅、綠、藍(R、G、B)單色值,map=〔RGB〕,R、C、B為值域為〔0,1〕的實數值,m為索引圖像包含的像素個數.然後可根據情況採用不同的小波函數,進行索引圖像的分解壓縮。這里對上面產生的索引圖像X用dbl小波進行2層分解。
〔c,l〕=wavedec2(X,2,′dbl′)。
在這里,一個索引圖像作小波分解後,可得到一系列不同解析度的子圖像,不同解析度的子圖像對應的頻率是不相同的.高解析度(即高頻細節)子圖像上大部分點的數值接近於0,越是高頻這種現象越明顯.對一個圖像來說,表現一個圖像最主要的部分是低頻(即近似)部分。
多層小波分解的所有成分系數均保存在向量c中,低頻近似與高頻細節的系數需從向量C中提取。MATLAB分別使用appcoet2()和detcoef2()函數來完成這一工作。這種方法是對低頻和高頻部分進行處理,因而提取低頻和高頻近似系數。
cAl=appcoef2(c,1,′dbl,′1);cH1=detcoef2(′h′,c,1,1);
cDl=detcoef2(′d′,c,l,1);cVl=detcoef2(′v′,c,l,1)。
matlab實現離散餘弦變換壓縮(JPEG壓縮原理)
JPEG圖像壓縮演算法:
輸入圖像被分成8*8或16*16的小塊,然後對每一小塊進行二維DCT(離散餘弦變換)變換,變換後的系數量化、編碼並傳輸;
JPEG文件解碼量化了的DCT系數,對每一塊計算二維逆DCT變換,最後把結果塊拼接成一個完整的圖像。在DCT變換後舍棄那些不嚴重影響圖像重構的接近0的系數。
DCT變換的特點是變換後圖像大部分能量集中在左上角,因為左上放映原圖像低頻部分數據,右下反映原圖像高頻部分數據。而圖像的能量通常集中在低頻部分。
實常式序:
function Jpeg
I=imread('D:\MATLAB7\toolbox\images\imdemos\cameraman.tif');
%該圖片在安裝matlab的目錄中找,原圖為灰度圖象
I=im2double(I);%圖像存儲類型轉換
T=dctmtx(8);%離散餘弦變換矩陣
B=blkproc(I,[8 8],'P1*x*P2',T,T');
%對原圖像進行DCT變換
mask=[1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 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
0 0 0 0 0 0 0 0];
B2=blkproc(B,[8 8],'P1.*x',mask);
%數據壓縮,丟棄右下角高頻數據
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
%進行DCT反變換,得到壓縮後的圖像
imshow(I)
title('原始圖像')
figure;
imshow(I2)
title('壓縮後的圖像')
參考資料:http://..com/question/42730132.html
Ⅸ 簡述JPEG壓縮演算法
首先你需要了解幾個概念,有損壓縮,量化,行程編碼。
對一副圖片來說,bitmap就是原始格式,沒經過任何壓縮的。
量化就是把所有0-255的像素值進行歸類,然後分成盡量少的積累,這要存儲量就小很多了,對於JEPG來說量化是有損壓縮的起源。
最後就是對所有的已經歸類過的點進行行程編碼,然後就壓縮完了
Ⅹ 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)。