資源簡介
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
- 上一篇:DSM調制器simuli
nk建模仿真.rar - 下一篇:Matlab模塊庫中文
評論
共有 條評論