如何在matlab中将图像从double转换为uint8?

dev*_*raj 6 matlab image image-processing

我有一个I类型的图像double.我想将图像转换doubleuint8.我尝试过使用两者:

  1. I=uint8(I)
  2. I=im2uint8(I).

当我使用imshow(I)命令时,我只得到一个黑色图像而没有别的.我究竟做错了什么?

hba*_*rts 8

im2uint8功能假定您的double图像缩放到该范围[0,1].如果图像的值大于1或小于0,则会剪切这些值.请参阅以下示例:

im2uint8([-1 0 0.5 1 2])
ans =
    0    0  128  255  255
Run Code Online (Sandbox Code Playgroud)

解决方案是[0,1]通过减去最小值并除以总范围来缩放输入图像:

I = (I - min(I(:))) / (max(I(:)) - min(I(:)));
I = im2uint8(I);
imshow(I);
Run Code Online (Sandbox Code Playgroud)

  • 你的变量`phase_only`是复值的.通过使用`imshow(I,[])`,你首先丢弃虚部然后归一化.使用我的代码首先进行规范化,然后丢弃虚部.为了得到与'imshow(I,[])相同的`,首先简单地调用`I = real(I)`. (2认同)
  • @devraj你可能想要绘制phase_only的幅度或阶段而不仅仅是真实部分.只是需要考虑的事情. (2认同)