なぜ、entropy 関数で画像のエントロ​ピーが正しく計算でき​ないのでしょうか?

13 views (last 30 days)
MathWorks Support Team
MathWorks Support Team on 27 Jan 2017
なぜ、entropy 関数で画像のエントロピーが正しく計算できないのでしょうか?
int16 型で定義される画像 (例えば、DICOM画像)のエントロピーを計算しようとしています。 
entropy 関数は int16 型の入力をサポートしていないようですので、 
 
>> entropy(double(int16))
と double 型にキャストして計算したところ、画像の複雑さから考えて極端に小さな値が算出されます。 

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 27 Jan 2017
entropy 関数はサポートされるデータタイプがlogical, uint8, uint16, double 型であり int16 型はサポートしていません。 
entropy 関数を実行しますと、内部で im2uint8 と呼ばれる関数で、入力データはまず uint8型へ 
キャストされ、 その後 256 階調でヒストグラムが求められ各階調のデータ数を元にエントロピーが計算されます。 
ここで、im2uint8 の仕様として、入力引数が 
uint16型の場合、0 - 65535 までの値を 0 - 255 に量子化します。 
double型の場合は、0 - 1 までの実数値を 0 - 255 までの値へ量子化されることになります。 
今回エントロピーを計算されようとされている画像は double 型にキャストされておりますが、 
1 以上の数値はすべて1として解釈されてしまい、結果エントロピーが小さく算出されたものと考えられます。 
画像の最大値と最小値を確認して、値が収まるようにサポートしているデータ型に写像 
(例えば、double型であれば最小値、最大値がそれぞれ 0、1 となるように正規化)した後に entropy 関数を実行してください。
上記目的の画像正規化には、 Image Processing Toolbox で提供される mat2gray 関数が利用できます。
 

More Answers (0)

Products


Release

R2016b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!