• 大小: 5.75MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-02
  • 语言: Matlab
  • 标签: Matlab  

资源简介

1. 本节实验程序共5个.m文件 2. BasicArithmeticCode.m、BasicArithmeticDecode.m分别是编码和解码算法。 3.Encoder.m、 Decoder.m分别是编码器和解码器,他们调用以上的两个算法。 4. CaculateBits.m是用来计算压缩后总的比特数的文件,在BasicArithmeticCode.m中调用,但是由于时间代价高,默认注释掉,需要计算的时候再用。 5. 整个操作流程:运行Encoder会读入Set12中的12张图片然后输出.dat数据文件,再运行Decoder就会读入数据文件,输出解码后的图像。

资源截图

代码片段和文件信息

function [CodesOfBlocksSizesOfBlocksAllGraysLowHighTimeOfCodeCompressRadio]=BasicArithmeticCode(InputImage)
%输入一个图像InputImage输出算术编解码后的图像OutImage压缩率CompressionRadio编码数据aveLowHighAllGrays
%在工作空间写出一个BitDatas.dat的编码数据流文件
tic;
CompressRadio=0;
BitsOfFinal=0;%编码二进制的比特数计算较耗时,默认不开启
NumOfBlocks=0;%码字的个数,初始化为0
%由于精度限制,编码每达到double的精度,就需要分区,每个分区编一个码字
Size= size(InputImage);
if numel(Size)>2
InputImage= rgb2gray(InputImage); 
end
[MN] = size(InputImage);
OutImage=InputImage;

%拉成一行,便于编码
TempImage = reshape(InputImage1M*N);
TempOutImage = zeros(1length(TempImage));
AllGrays=unique(TempImage);
for i=1:length(AllGrays)
    NumOfEvGrays(i)=length(find(TempImage==AllGrays(i)));
end
% 从大到小排序
for i=1:length(NumOfEvGrays)-1
    for j=i+1:length(NumOfEvGrays)
        if(NumOfEvGrays(i)            t1=NumOfEvGrays(i);
            NumOfEvGrays(i)=NumOfEvGrays(j);
            NumOfEvGrays(j)=t1;
            t2=AllGrays(i);
            AllGrays(i)=AllGrays(j);
            AllGrays(j)=t2;
        end
    end
end
FreqOfEvGrays = NumOfEvGrays./(M*N);
Low(1)=0;
for i = 1:length(FreqOfEvGrays)
    if i==1
        High(i)=FreqOfEvGrays(i);
    else
        Low(i)=FreqOfEvGrays(i-1)+Low(i-1);
        High(i)=Low(i)+FreqOfEvGrays(i);
    end
end
%编码
LowValue=0; %初始化
HighValue=1; %初始化
Flag = 0;
Range=HighValue-LowValue; %初始化
for i = 1:length(TempImage) %遍历字符串中的每一个元素,使用for循环语句。 
     d=find(AllGrays==TempImage(i)); %找到字符串中的字符,在数组AllGrays中的角标
     %算术编码
     TempHighValue = LowValue+ Range*High(d);
     TempLowValue = LowValue+Range*Low(d);
     TempRange=TempHighValue-TempLowValue;
     %先用temp数据存储,判断当前是否溢出,如果溢出,则这个temp数据作废,保存上一次的数据并分下一个区;结束的时候也需要保存码字
     if (TempRange*1000000000000000)<10
          NumOfBlocks=NumOfBlocks+1;
%          BitsOfFinal = BitsOfFinal + CaculateBits(LowValueHighValue);
%上一句计算二进制编码总的比特数。
         CodesOfBlocks(NumOfBlocks)=(HighValue+LowValue)/2;
         SizesOfBlocks(NumOfBlocks)=Flag;
         Flag=0;
         LowValue=0; %初始化
         HighValue=1; %初始化
         Range=HighValue-LowValue; %初始化
         HighValue = LowValue+ Range*High(d);
         LowValue = LowValue+Range*Low(d);
         Range=HighValue-LowValue; 
         Flag = Flag+1;
     else
         HighValue=TempHighValue;
         LowValue=TempLowValue;
         Range=HighValue-LowValue;
         Flag = Flag+1;
     end
     if i==length(TempImage)%最后一个直接存
         NumOfBlocks=NumOfBlocks+1;
         CodesOfBlocks(NumOfBlocks)=(HighValue+LowValue)/2;
         SizesOfBlocks(NumOfBlocks)=Flag;
         Flag=0;
         LowValue=0; %初始化
         HighValue=1; %初始化
         Range=HighValue-LowValue; %初始化
     end
end
toc;
TimeOfCode = toc;
% CompressRadio = M*N*8/BitsOfFinal;



 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2020-05-30 21:25  Code\
     文件        3068  2020-05-29 22:45  Code\BasicArithmeticCode.m
     文件         967  2020-05-29 22:50  Code\BasicArithmeticDecode.m
     文件         472  2020-05-29 22:12  Code\CaculateBits.m
     文件         689  2020-05-29 22:59  Code\Decoder.m
     文件         853  2020-05-29 22:59  Code\Encoder.m
     文件         745  2020-05-29 23:12  Code\程序说明.txt
     目录           0  2020-05-29 11:37  Set12\
     文件       38267  2019-03-29 19:50  Set12\1.png
     文件      177762  2019-03-29 19:50  Set12\10.png
     文件      209817  2019-03-29 19:50  Set12\11.png
     文件      193637  2019-03-29 19:50  Set12\12.png
     文件       34985  2019-03-29 19:50  Set12\2.png
     文件       40181  2019-03-29 19:50  Set12\3.png
     文件       42947  2019-03-29 19:50  Set12\4.png
     文件       40728  2019-03-29 19:50  Set12\5.png
     文件       40985  2019-03-29 19:50  Set12\6.png
     文件       39804  2019-03-29 19:50  Set12\7.png
     文件      151065  2019-03-29 19:50  Set12\8.png
     文件      185727  2019-03-29 19:50  Set12\9.png

评论

共有 条评论