我有一个功课,我必须将一些图像转换为灰度并使用霍夫曼编码压缩它们。我将它们转换为灰度,然后我试图压缩它们但我得到一个错误。我使用了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。如何找到每张图像的压缩比?
答案 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中工作,但只要我将图像转换为双倍就可以了。