📄 encoding.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 + -