我在MATLAB中使用了以下代码:
I=imread('filename');
I=im2double(I);现在我必须比较一个整数值,比方说'2',和已经转换成im2double的图像像素值。如何将这些整数值重新缩放为其im2double等效值?
发布于 2015-04-06 11:32:40
im2double会缩放图像,以便强度的动态范围从[0,1]开始。如果您想要将一个“整数”值与转换后的图像进行比较,则需要知道该值所来自的图像的类型。例如,如果2来自uint8图像,则该图像的亮度动态范围为[0,255]。因此,2将被转换为2/255。但是,如果2来自uint16图像,则该图像的亮度的动态范围为[0,65535],因此2将被转换为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和4294967295 --> 2^32 - 1,这是有意义的。您知道,数字需要二进制数字(位)来表示数字,而上述数据类型末尾的数字会告诉您需要多少位才能做到这一点。图像本质上是这些数字的2D网格,这些是无符号数据类型,与使用最高有效位表示数字符号的有符号数据类型相比,这些数据类型使用所有位来表示整数。
https://stackoverflow.com/questions/29461611
复制相似问题