【问题标题】:The difference between uint8 and double images when using imshow使用imshow时uint8和双图的区别
【发布时间】:2017-01-10 04:45:05
【问题描述】:

以下代码 sn -p 生成 double image

f = imread('C:\Users\Administrator\Desktop\2.tif');
h = double(f);
figure;
imshow(h);

然而,这个其他代码 sn-p 生成 uint8 image

f = imread('C:\Users\Administrator\Desktop\2.tif');
figure;
imshow(f);

在显示这两个数字时,这两个图像使用imshow 的显示结果是不同的,但是这种差异背后的原因是什么?

【问题讨论】:

  • uint! 无符号整数(不是unit

标签: matlab image-processing imshow imread


【解决方案1】:

double 类型的图像被假定具有介于 0 和 1 之间的值,uint8 图像被假定具有介于 0 和 255 之间的值。由于您的 double 数据包含介于 0 和 255 之间的值(因为您只需转换它作为double 并且不执行任何缩放),它将显示为大部分为白色,因为大多数值都大于 1。

您可以使用imshow 的第二个输入来表示您希望忽略此假设并自动将显示缩放到数据的动态范围

imshow(h, [])

或者您可以在显示图像之前使用mat2gray 规范化double 版本

h = mat2gray(h);
imshow(h)

【讨论】:

  • imshow 的神奇行为在非交互式环境中几乎从来都不是一件好事。您可以通过将其包装在一个检查有关输入类型和范围的假设的函数中来节省自己的惊喜和痛苦。
猜你喜欢
  • 1970-01-01
  • 2017-11-12
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多