MATLAB - 图像霍夫曼编码

时间:2012-06-25 20:01:14

标签: image matlab huffman-code

我有一个功课,我必须将一些图像转换为灰度并使用霍夫曼编码压缩它们。我将它们转换为灰度,然后我试图压缩它们但我得到一个错误。我使用了here找到的代码。

以下是我正在使用的代码:

A=imread('Gray\36.png');
[symbols,p]=hist(A,unique(A))
p=p/sum(p)
[dict,avglen]=huffmandict(symbols,p)
comp=huffmanenco(A,dict)

这是我得到的错误。它发生在第二行。

Error using eps
Class must be 'single' or 'double'.

Error in hist (line 90)
    bins = xx + eps(xx);

我做错了什么?

感谢。

P.S。如何找到每张图像的压缩比?

2 个答案:

答案 0 :(得分:2)

问题是当你指定bin位置('hist'的第二个输入参数)时,它们需要是single或double。但是,矢量A本身并没有。这很好,因为有时您不希望将整个数据集从整数类型转换为浮点精度。这将修复您的代码:

[symbols,p]=hist(A,double(unique(A)))

Click here更详细地讨论了这个问题。

答案 1 :(得分:0)

首先,尝试:

whos A

似乎它的类型必须是单或双。如果没有,请在imread行之后执行A = double(A)。应该这样工作,但是我很惊讶,却没有做转换...... [编辑]我刚刚测试了它,我是对的,hist不会在uint8中工作,但只要我将图像转换为双倍就可以了。