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