一、行程編碼概述(RLE)
在圖像壓縮上,行程編碼(RLE)通常用於壓縮二值化圖像,由於它是基於重複的壓縮算法,好比:算法
二維圖像降維後(壓縮前):0 0 0 0 0 255 255 255 0 0 255
行程編碼壓縮後:5 0 3 255 2 0 1 255
(壓縮格式爲:數量+像素+數量+像素…)markdown
若是有大量的像素連續重複,那麼壓縮率會更高。
編碼是方法創建在圖像統計特性的基礎上的。例如,在傳真通訊中的文件大可能是二值圖像,即每一個像素的灰度值只有0和1兩種取值。將一行中顏色值相同的相鄰象素用一個計數值和該顏色值來代替。例如aaabccccccddeee能夠表示爲3a1b6c2d3e,,即有3個a,1個b,6個c,2個d,3個e。若是一幅圖象是由不少塊顏色相同的大面積區域組成,那麼採用行程編碼的壓縮效率是驚人的。然而,該算法也致使了一個致命弱點,若是圖象中每兩個相鄰點的顏色都不一樣,用這種算法不但不能壓縮,反而數據量增長一倍。所以對有大面積色塊的圖像用行程編碼效果比較好。
行程編碼的可行性討論:行程編碼的壓縮方法對於天然圖片來講是不太可行的,由於天然圖片像素點錯綜複雜,同色像素連續性差,若是硬要用行程編碼方法來編碼就拔苗助長,圖像體積不但沒減小,反而加倍。鑑於計算機桌面圖,圖像的色塊大,同色像素點連續較多,因此行程編碼對於計算機桌面圖像來講是一種較好的編碼方法。
2 圖像壓縮
2.1 圖像壓縮:圖像壓縮就是對圖像數據按照必定的規則進行變換和組合,用盡量少的數據量來表示影像,形象的說,就是對影像數據的瘦身。網絡
2.2 圖像壓縮的必要性:多媒體數據的顯著特色就是數據量很是大。例如,一張彩色相片的數據量可達10MB;視頻影像和聲音因爲連續播放,數據量更加龐大。這對計算機的存儲以及網絡傳輸都形成了極大的負擔。ide
2.3 圖像壓縮的可行性:
1)原始圖像數據是高度相關的,存在很大的冗餘。數據冗餘形成比特數浪費,消除這些冗餘能夠節約碼字,也就是達到了數據壓縮的目的。大多數圖像內相鄰像素之間有較大的相關性,這稱爲空間冗餘。序列圖像先後幀內相鄰之間有較大的相關性,這稱爲時間冗餘。編碼
2)若用相同碼長來表示不一樣出現機率的符號也會形成比特數的浪費,這種浪費稱爲符號編碼冗餘。若是採用可變長編碼技術,對出現機率高的符號用短碼字表示,對出現機率低的符號用長碼字表示,這樣就可大大消除符號編碼冗餘。再次,有些圖像信息(如色度信息、高頻信息)在一般的視感受過程當中與另一些信息相比來講不那麼重要,這些信息能夠認爲是內心視覺冗餘,去除這些信息並不會明顯地下降人眼所感覺到的圖像質量,所以在壓縮的過程當中能夠去除這些人眼不敏感的信息,從而實現數據壓縮。atom
function yc %%行程編碼算法 %例如aaabccccccddeee才能夠表示爲3a1b6c2d3e %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %讀圖 I=imread('Lena.jpg'); [m n l]=size(I); fid=fopen('yc.txt','w'); %yc.txt是行程編碼算法的灰度級及其相應的編碼表 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %行程編碼算法 sum=0; for k=1:l for i=1:m num=0; J=[]; value=I(i,1,k); for j=2:n if I(i,j,k)==value num=num+1; %統計相鄰像素灰度級相等的個數 if j==n J=[J,num,value]; end else J=[J,num,value]; %J的形式是先是灰度的個數及該灰度的值 value=I(i,j,k); num=1; end end col(i,k)=size(J,2); %記錄Y中每行行程行程編碼數 sum=sum+col(i,k); Y(i,1:col(i,k),k)=J; %將I中每一行的行程編碼J存入Y的相應行中 end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %輸出相關數據 [m1,n1,l1]=size(Y); disp('原圖像大小:') whos('I'); disp('壓縮圖像大小:') whos('Y'); disp('圖像的壓縮比:'); disp(m*n*l/sum);
版本:2014aspa