我在MATLAB中使用了这段代码:
I=imread('filename');
I=im2double(I);
现在我必须将整数值(比如'2')与已经转换为im2double
的图像像素值进行比较。如何将这些整数值重新调整为其im2double
等效值?
答案 0 :(得分:2)
im2double
缩放图像,使强度的动态范围为[0,1]
。如果要将“整数”值与转换后的图像进行比较,则需要了解该值来自的图像的类型。例如,如果2
来自uint8
图像,则图像的动态强度范围为[0,255]
。因此,2
将转换为2/255
。但是,如果2
来自uint16
图像,则图片的动态强度范围为[0,65535]
,因此2
将转换为{{ 1}}。
因此,除非您知道2/65535
值来自的图像数据类型,否则无法回答此问题。一旦你知道这一点,那么你可以继续相应地转换2
值。您只需要除以数据类型可以容纳的最大值。
因此,给定整数值2
,这是一个图表,您可以将其用作所需的正确转换因子的指南:
val
请注意Data Type Floating-Point Equivalent
uint8 val/255
uint16 val/65535
uint32 val/4294967295
,255 --> 2^8 - 1
和65535 --> 2^16 - 1
,这是有道理的。您知道数字需要二进制数字(位)来表示数字,上面数据类型末尾的数字告诉您需要多少位。图像本质上是这些数字的二维网格,这些是无符号数据类型,与使用“强>有符号数据类型的已签名数据类型相比,它们使用所有位来表示整数最重要的一点,表示数字的符号。