matlab:具有不同数据类型的同一图像的不同熵值
matlab: different entropy values for the same image with different data type
在 matlab 中给定 uint8
类型的图像 I
entropy(I)
给我的结果与
截然不同
entropy(im2double(I))
(例如第一种情况下为 6.98,第二种情况下为 0.51)
为什么数据类型会更改此值?
当您使用 imread
读取图像时,您的图像被读入 uint
m×n×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
表示(可变但可能)大量数字。
由于 香农熵(更多信息 here)被定义为随机数据源产生的平均信息量...您的结果很容易解释:您正在为 entropy
函数提供更高程度的信息(更多字节、更多数字、更多信息)。
在 matlab 中给定 uint8
类型的图像 I
entropy(I)
给我的结果与
截然不同entropy(im2double(I))
(例如第一种情况下为 6.98,第二种情况下为 0.51) 为什么数据类型会更改此值?
当您使用 imread
读取图像时,您的图像被读入 uint
m×n×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
表示(可变但可能)大量数字。
由于 香农熵(更多信息 here)被定义为随机数据源产生的平均信息量...您的结果很容易解释:您正在为 entropy
函数提供更高程度的信息(更多字节、更多数字、更多信息)。