提问人:Sahil Sharma 提问时间:6/26/2023 最后编辑:JosefZSahil Sharma 更新时间:6/26/2023 访问量:106
使用算术编码计算压缩比?
Calculation of compression ratio using arithmetic encoding?
问:
算术编码是最著名的熵编码技术之一,我用它来对图像进行编码。为此,我使用了 Matlab 的内置函数,该函数还提供了其他值,例如 seq、counts 和 source 以及二进制代码。从理论上讲,压缩是基于数据的概率分布完成的。算术编码器根据序列的概率对序列进行编码。现在我想知道的主要事情是关于压缩比的计算。压缩比是仅使用代码/二进制代码计算的,还是也包括其他部分?如果是,有人可以告诉我如何为我计算尺寸和其他所需的东西吗?这些数据要么以高精度方式存在,要么具有高值。
我还添加了算术编码的代码:
function [code,seq,counts,source] = arithmetic_coding(message)
%strfind: finds the string within another string.
source=unique(message);
counts=zeros(1,length(source));
for i=1:length(source)
counts(i)=length(strfind(message,source(i)));
end
%counts
seq=zeros(1,length(message));
for i=1:length(message)
seq(i)=strfind(source,message(i));
end
%seq
code = arithenco(seq, counts);
end
算术解码的代码:
function dec_message = arithmetic_decoding(code,counts,seq,source)
dseq = arithdeco(code,counts,length(seq));
dec_message=zeros(1,length(dseq));
for i=1:length(dseq)
a=dseq(i);
dec_message(i)=source(a);
end
end
答:
0赞
Mark Adler
6/26/2023
#1
解码所需的所有内容都必须传输或存储,因此计为压缩数据以计算压缩比。所以代码、计数和长度。未压缩的数据只是序列。arithdeco()
您需要确定如何发送计数和长度,以便计算其大小。计数本身应进行压缩,以最大程度地减少压缩数据的总大小。
评论
0赞
Sahil Sharma
6/27/2023
要压缩“计数”,我是否需要应用另一组压缩算法?就像这不会再次产生解码器需要的另一组数据一样。
0赞
Mark Adler
6/27/2023
是的,将使用压缩计数代替未压缩的计数。
评论
arithenco()