使用算术编码计算压缩比?

Calculation of compression ratio using arithmetic encoding?

提问人:Sahil Sharma 提问时间:6/26/2023 最后编辑:JosefZSahil Sharma 更新时间:6/26/2023 访问量:106

问:

算术编码是最著名的熵编码技术之一,我用它来对图像进行编码。为此,我使用了 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
编码 字符编码 压缩

评论

1赞 Solar Mike 6/26/2023
您对压缩比的定义是什么?
1赞 JosefZ 6/26/2023
编辑您的问题以提供最小的可重现示例
0赞 Mark Adler 6/26/2023
你用的是什么功能? 仅返回生成的二进制代码。你在说什么“其他部分”?arithenco()
0赞 Sahil Sharma 6/26/2023
@SolarMike我使用 (1-(compressed_size/uncompressed_size))*100 作为压缩比的定义。因此,实现的压缩百分比越高。
0赞 Sahil Sharma 6/26/2023
@MarkAdler 没错,arithenco() 只返回代码,但在使用 arithdeco() 解码时进行解码时,它不仅需要二进制代码,还需要编码过程中使用的“计数”。因此,如果我们需要在计算压缩比时添加这个“计数”,即交易品种的统计数据,这就是我的观点。

答:

0赞 Mark Adler 6/26/2023 #1

解码所需的所有内容都必须传输或存储,因此计为压缩数据以计算压缩比。所以代码、计数和长度。未压缩的数据只是序列。arithdeco()

您需要确定如何发送计数和长度,以便计算其大小。计数本身应进行压缩,以最大程度地减少压缩数据的总大小。

评论

0赞 Sahil Sharma 6/27/2023
要压缩“计数”,我是否需要应用另一组压缩算法?就像这不会再次产生解码器需要的另一组数据一样。
0赞 Mark Adler 6/27/2023
是的,将使用压缩计数代替未压缩的计数。