我有一张类型为double的图像I,我想把它转换成uint8类型。我尝试使用以下两种方法:
1. I=uint8(I) 2. I=im2uint8(I)
但是当我使用imshow(I)命令时,只显示了一个黑色图像,没有其他内容。我做错了什么呢?
1. I=uint8(I) 2. I=im2uint8(I)
但是当我使用imshow(I)命令时,只显示了一个黑色图像,没有其他内容。我做错了什么呢?
im2uint8
函数假定你的double
图像缩放到范围[0,1]
。如果你的图像的值大于1
或小于0
,这些值将被截断。请看下面的示例:im2uint8([-1 0 0.5 1 2])
ans =
0 0 128 255 255
解决方案是将输入图像进行缩放,通过减去最小值并除以总范围来将其缩放至[0,1]
:
I = (I - min(I(:))) / (max(I(:)) - min(I(:)));
I = im2uint8(I);
imshow(I);
imshow(I,[])
得到不同的结果? - devrajimshow(I,[])
中的I
是原始的未缩放的double
图像,应该(并且确实)产生与我的答案中描述的归一化、转换为uint8
相同的结果。您确定您正在对原始图像调用imshow(I,[])
吗? - hbadertsphase_only
是复数。使用 imshow(I,[])
会先丢弃虚部,然后进行归一化。而我的代码会先进行归一化,然后再丢弃虚部。如果想要得到与 imshow(I,[])
相同的结果,只需先调用 I = real(I)
即可。 - hbadertsplot(abs(I))
- Dan
im2uint8
,而不是img2uint8
。 - hbadertsphase_only
图像的类型是double
,但我无法通过以下两种方式查看该图像:1.使用im2uint8
命令进行转换;2.然后使用imshow(I)
。 - devrajphase_only
图像的类型是double
,但我无法通过以下两种方式查看该图像:1.使用im2uint8
命令进行转换;2.然后使用imshow(I)
。 - devraj