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)

これは私が得るエラーです。2 行目で発生します。

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

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

私は何を間違っていますか?

ありがとう。

PS 各画像の圧縮率を調べるにはどうすればよいですか?

4

2 に答える 2

2

問題は、ビンの位置 ('hist' の 2 番目の入力引数) を指定するときに、single または double である必要があることです。ただし、ベクトル A 自体はそうではありません。データセット全体を整数型から浮動小数点型に変換したくない場合があるため、これは便利です。これにより、コードが修正されます。

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

この問題の詳細については、ここをクリックしてください。

于 2012-07-27T21:39:12.343 に答える
0

初挑戦 :

whos A

その型は single または double でなければならないようです。そうでない場合は、A = double(A)imread 行の後に実行してください。そのように動作するはずですが、 hist が変換を行っていないことに驚いています... [編集] テストしたばかりで、正しいです。 2倍になるイメージ。

于 2012-06-25T20:09:12.913 に答える