使用Burrows Wheeler变换的图像压缩

时间:2014-09-02 01:00:27

标签: matlab burrows-wheeler-transform

我使用Burrows Wheeler Transform(BWT)编码和解码文本文件的代码。但在这种情况下,我想编码和解码图像。请给我一个解决方案,将图像转换为字符串,以便此代码可以工作。我使用的是MATLAB R2012a。

bwtencode.m

path=pwd;
[filename, pathname] = uigetfile('*.txt', 'Pick a file');
cd(pathname)
file_open=fopen(filename,'r');
file_read=fread(file_open,'uint8');
fclose(file_open);
cd(path)
disp('precessing..BWT Transform');
a=file_read;
b=zeros(1,2*length(a));

for sort_len=1:length(b)
    if(sort_len>length(a))
        b(sort_len)=a(sort_len-length(a));
    else
    b(sort_len)=a(sort_len);
    end
end
a=char(a);
b=char(b);
to_sort=zeros(length(a),length(a));
for row_sort=1:length(a)
    to_sort(row_sort,:)=b(row_sort:length(a)+row_sort-1);
end
char(to_sort);
[lexi_sorted_data,ind]=sortrows(to_sort);
char(lexi_sorted_data);

encoded_data=lexi_sorted_data(:,length(a));
primary_index=find(ind==2);
out_data=[encoded_data',primary_index];
file_bwt=fopen('bwt.cmp','w');
fwrite(file_bwt,out_data,'uint8');
fclose(file_bwt);
disp('BWT Transform over');
disp('file written to bwt.cmp');

bwtdecode.m

dec_bwt_file=fopen('bwt.cmp','r');
dec_bwt_read=fread(dec_bwt_file,'uint8');
fclose(dec_bwt_file);
disp('BWT DECODING Started');

encoded_data=dec_bwt_read(1:length(dec_bwt_read)-1);
primary_index=dec_bwt_read(length(dec_bwt_read));


sorted_data=sort(encoded_data);
vector_flag=ones(1,length(encoded_data))';
vector=zeros(1,length(encoded_data))';
%%%%%%%preparing vector table
for i=1:length(sorted_data)
    for j=1:length(sorted_data)
        if(encoded_data(j)==sorted_data(i) && vector_flag(j))
        %             clc;
        %             encoded_data(j);
        %             sorted_data(i);
        vector_flag(j);
        vector(i)=j;
        vector_flag(j)=0;
        break

        end
    end
 end

index=primary_index;
reconst_data=zeros(1,length(encoded_data));
%getting original data back
for i=1:length(encoded_data)
    reconst_data(i)=encoded_data(index);
    index=vector(index);
end


%    char(lexi_sorted_data(:,length(a)));
%    primary_index=find(ind==2);
%    char(reconst_data);

rec_file=fopen('orig_file.txt','w');
fwrite(rec_file,reconst_data,'uint8');
fclose(rec_file);
disp('BWT Decosing over..');
disp('file writeen back as orig_file.txt')

0 个答案:

没有答案