遊程編碼(運行長度編碼)

1、運行長度編碼(RLE)

遊程長度編碼是柵格數據壓縮的重要編碼方法,它的基本思路是:對於一幅柵格圖像,常常有行(或列)方向上相鄰的若干點具有相同的屬性代碼,因而可採取某種方法壓縮那些重複的記錄內容。其編碼方案是,只在各行(或列)數據的代碼發生變化時依次記錄該代碼以及相同代碼重複的個數,從而實現數據的壓縮。

        遊程長度編碼在柵格加密時,數據量沒有明顯增加,壓縮效率較高,且易於檢索,疊加合併等操作,運算簡單,適用於機器存貯容量小,數據需大量壓縮,而又要避免複雜的編碼解碼運算增加處理和操作時間的情況。

例如:5555557777733322221111111 
行程編碼爲:(5,6)(7,5)(3,3)(2,4)(l,7)。

2、代碼

function S=RLC(I)
%======================================================================================================
% 遊程長度編碼是柵格數據壓縮的重要編碼方法,它的基本思路是:對於一幅柵格圖像,常常有行(或列)方向上相鄰的若干點
% 具有相同的屬性代碼,因而可採取某種方法壓縮那些重複的記錄內容。其編碼方案是,只在各行(或列)數據的代碼發生變化
% 時依次記錄該代碼以及相同代碼重複的個數,從而實現數據的壓縮。
%------------------------------------------------------------------------------------------------------
% 例如:5555557777733322221111111 
% 行程編碼爲:(5,6)(7,5)(3,3)(2,4)(l,7)。
%===================================================================================================
[m,n]=size(I);
if m~=1&&n~=1
    I=I';
    I=reshape(I,1,m*n);
end
j=1;
count=1;
% 對第一個到第m*n個進行一般化處理
for i=1:m*n-1
    if I(i+1)==I(i)
        count=count+1;
    else
       S(j,1)=I(i);
       S(j,2)=count;
       j=j+1;
       count=1;
    end
end
% 最後一個元素處理有兩種情況。其一,和前一個元素相等,其二,和前一個元素不等。
% 無論屬於哪一種情況都沒有在S中記錄。
if I(m*n)==I(m*n-1)
    S(j,1)=I(i);
    S(j,2)=count;
else
    S(j,1)=I(m*n);
    S(j,2)=1;
end
% I爲字符串
% if m==1||n==1
%     S(:,1)=S(:,1)-'0';
%     S=double(S);
% end
end

3、示例

###    字符串(使用時需將處理字符串代碼註釋取消)

>> a='5555557777733322221111111 '
a =
5555557777733322221111111 

>> RLC(a)
ans =
     5     6
     7     5
     3     3
     2     4

     1     7

###    一般矩陣

>> a=randint(3,4)
Warning: This is an obsolete function and may be removed in the future. Please use RANDI instead. 
> In randint at 41 
a =
     0     0     1     1
     0     0     0     0
     1     0     1     1

>> RLC(a)
ans =
     0     2
     1     2
     0     4
     1     1
     0     1
     1     2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章