Matlabのhist
と関数の違いは何ですか? imhist
画像から読み込まれた色レベル値のマトリックスがありimread
、ヒストグラムを使用して画像のエントロピー値をカウントする必要があります。
結果のマトリックスを使用imhist
すると、最後のもの(右下)を除くすべての場所にゼロが含まれます。これには、高い値の数(数千程度)が含まれます。その出力が間違っているように見えるため、代わりに hist を使用しようとしましimhist
たが、結果の値ははるかに優れており、マトリックスはゼロではなく正しい外観の値で満たされています。
ただし、ドキュメントによると、imhist
この場合はより良いはずでありhist
、奇妙な結果が得られるはずです..
残念ながら、私は Matlab が得意ではないため、問題の詳細を説明することはできません。ただし、将来的に他の情報を追加することができます。
だから私は私の問題をよりよく説明しようとします..私はエントロピーと他のいくつかの値を数えるべき画像を持っています(その画像を保存するのにどれくらいのバイトが必要ですか..)。私はこの関数を書きましたが、かなりうまく機能します
function [entropy, bytes_image, bytes_coding] = entropy_single_pixels(im)
im = double(im);
histg = hist(im);
histg(histg==0) = [];
nzhist = histg ./ numel(im);
entropy = -sum(nzhist.*log2(nzhist));
bytes_image = (entropy*(numel(im))/8);
bytes_coding = 2*numel(unique(im));
fprintf('ENTROPY_VALUE:%s\n',num2str(entropy));
fprintf('BYTES_IMAGE:%s\n',num2str(bytes_image));
fprintf('BYTES_CODING:%s\n',num2str(bytes_coding));
end
次に、同じ数をカウントする必要がありますが、互いに下にあるピクセルから「ペア」を作成する必要があります。したがって、行の半分と同じ数の列しかありません。すべての一意のピクセル ペアを異なる数として表現する必要があるため、最初のピクセル ペアに 1000 を掛けて、2 番目のピクセル ペアを追加しました。その後、最初の例と同じ関数を実際に適用する必要がありますが、それはimhist
関数から奇妙な数値を取得している時間。hist を使うと問題ないように見えますが、実際には動作が正しいとは思えないので、どこかの私のエラーに違いありません。私は実際に自分がやりたいことをかなりよく理解しています、または少なくともそう願っていますが、残念ながらMatlabは私にとってそのようなことをすべて難しくしています:)