encoding.asv
来自「利用matlab开发平台针对算术编码原理实现了算术编码」· ASV 代码 · 共 41 行
ASV
41 行
arithmetic_encoding()
%I=imread('001.bmp')
%imshow(I);
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 + =
减小字号Ctrl + -
显示快捷键?