在matlab中给出类型uint8
的图像I
entropy(I)
给了我一个非常不同的结果
entropy(im2double(I))
(例如,第一种情况下为6.98,第二种情况下为0.51) 为什么数据类型会更改此值?
答案 0 :(得分:2)
使用imread
读取图像时,图像会被读入uint
m-by-by-by-3数组。根据图像格式,每个颜色平面(红色,绿色,蓝色)使用16位或更少的位来存储图像像素。
uint8
(无符号8位整数)是整数的数字格式,允许最小值0
和最大值255
。 uint16
(无符号16位整数)是整数的数字格式,允许最小值0
和最大值65535
。将这些数字格式转换为double
时,基本上将它们除以最大值:
% Pseudocode
uint8 val = 127;
double val_new = val / 255.0d; % 0.49803921568627450980392156862745
uint16 val = 42133;
double val_new = val / 65535.0d; % 0.64290836957351033798733501182574
double
数字格式通常用于存储需要确保高精度的非常大(64位)的浮点值。这意味着您的uint
值将转换为0.something
值,其中something
代表(可变但可能)大量数字。
由于 Shannon熵(更多信息here)被定义为随机数据源产生的平均信息量...您的结果很容易解释:您正在喂食具有更高信息度的entropy
函数(更大的字节数,更大的数字量,更多的信息量)。