【问题标题】:MATLAB IMAGE from int16 n-by-n-by-3MATLAB IMAGE 来自 int16 n×n×3
【发布时间】:2014-04-18 08:39:00
【问题描述】:

我有一个 256*256*3 数组,它具有 int16 vith 值,例如 -14588、-8956、7685、-29691、-31228

我想通过 matlab image() 对这个数组进行成像,但我无法成功。我怎样才能对这个文件进行映像。提前谢谢你!

【问题讨论】:

  • 它说:TrueColor CData contains element out of range 0.0

标签: arrays matlab image-processing


【解决方案1】:

image不能显示int16图像,但可以显示uint16图像。来自doc of image

图像存储为 [0, 255] (uint8) 或 [0, 65535] (uint16) 范围内的整数的三维 (m×n×3) 数组。

因此,您将 int16 数组 A 转换为 uint16 数组。为此,试试这个:

B = uint16(int32(A)+32768);
image(B);

转换为 int32 以保留符号并将 2^16 添加到负值。如果你有最近的图像处理工具箱,你可以使用 [im2uint16].(http://www.mathworks.fr/fr/help/images/ref/im2uint16.html)

另一种可能性是将 A 转换为浮点数组并在 0 和 1 之间缩放:

B = (double(A)+32768)/65536;
image(B);

【讨论】:

    【解决方案2】:

    使用im2double 根据输入数据类型将数据重新缩放为双精度。然后,您可以使用 image 显示 double data -

    double_data = im2double(int16_imgdata);
    image(double_data)
    

    【讨论】:

    • 'int16_imgdata 是您的256*256*3 array。将该名称替换为您的变量名称。
    • @user1949719 查看编辑后的代码以获得更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2019-10-08
    • 2019-10-17
    • 1970-01-01
    相关资源
    最近更新 更多