⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encoding.m

📁 利用matlab开发平台针对算术编码原理实现了算术编码
💻 M
字号:
%I=imread('001.bmp')
%imshow(I);
function [m,n,color,allLow,allHigh,numberlow,numberhigh]=encoding
clear
I=[3 3 1 1 3 3 1 2;2 3 3 1 3 2 3 2;1 2 3 3 3 3 1 2];
%I=[1 1 1 1 0 0 1 0 1 1 1 0];
[m,n]=size(I);
% 第一列为灰度值,第二列为个数,第三列为概率百分数,应该也可以用imhist
table = tabulate(I(:));  % 注意的是,tabulate要求I的元素必须为非负整数
% 否则,以采用如下方法求解
% 如[1 2 3;1 2 2],则统计出结果1是2个,2是3个,3是1个
% sortM=sort(M();                                                              
% uniqueM=([diff(sortM);1]>0);                                                   
% count = [sortM(uniqueM) diff(find([1;uniqueM]))]    

% 即color,p如下所示
color = table(:,1)';
p = table(:,3)'/100;

% 计算上下限
csump = cumsum(table(:,3)');
allLow =[0,csump(1:end-1)/100];
allHigh = csump/100;

numberlow = 0;
numberhigh = 1;

for k = 1:m
   for kk = 1:n
       data = I(k,kk);
       low = allLow(data==color);
       high = allHigh(data==color);
       range = numberhigh-numberlow;
       tmp = numberlow;
       numberlow = tmp+range*low;
       numberhigh = tmp+range*high;
   end
end
% the result range
fprintf('算术编码范围下限为%16.15f\n\n',numberlow);
fprintf('算术编码范围上限为%16.15f\n\n',numberhigh);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -