imshow()在Octave中对int16数组不做任何分析。

问题描述 投票:0回答:1

我在Octave上使用一个脑MRI数据集。

数据是以数百个.mat文件的形式存在的。x = load("filename.mat") 图像以0到256的数组形式存储。

然后当我尝试 imshow(x.image) 一个窗口弹出512 x 512的图形,但完全是黑色的,它还抛出一个警告说。unsupported type for cdata (= int16 matrix). Valid types are uint8, uint16, double, single, and bool.

我也试过使用图像数组来铸造: imshow(cast(x, "double")) 和上面提到的所有其他数据类型,但结果几乎一样。

请帮帮我。

matlab octave
1个回答
5
投票

你可以使用 limits 的参数 imshow. 图像显示为黑色,因为它只包含[0,256]范围内的值,而 int16 包含的值最大为32767。

你可以手动设置限制。

imshow(x.image, [0, 256])

或者使用

imshow(x.image, [])

用于自动极限检测。


注意:在Octave上,这只适用于支持的类型。由于您的图像不包含负值,您可以将图像转换为 uint16,这将符合你的价值观。或者你也可以使用双倍,这是一个更通用的方法。

imshow(uint16(x.image), [])
imshow(double(x.image), [])

在你的例子中,如果你不介意256的像素值被饱和到255,你可以将图像转换为: uint8:

imshow(uint8(x.image))
© www.soinside.com 2019 - 2024. All rights reserved.