1

我有一个作业,我必须将一些图像转换为灰度并使用霍夫曼编码压缩它们。我将它们转换为灰度,然后尝试压缩它们,但出现错误。我使用了在这里找到的代码。

这是我正在使用的代码:

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);

我究竟做错了什么?

谢谢。

PS我怎样才能找到每个图像的压缩比?

4

2 回答 2

2

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

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

单击此处查看此问题的详细讨论。

于 2012-07-27T21:39:12.343 回答
0

第一次尝试 :

whos A

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

于 2012-06-25T20:09:12.913 回答