imshow() 对 Octave 中的 int16 数组不显示任何内容

Nam*_*sal 2 octave

我正在使用大脑 MRI 数据集研究 Octave。

数据采用数百个 .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"))和上面提到的所有其他数据类型来转换图像数组,但结果几乎相同。

帮我看看这里。

Joe*_*lho 5

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

您可以手动设置限制:

imshow(x.image, [0, 256])
Run Code Online (Sandbox Code Playgroud)

或使用

imshow(x.image, [])
Run Code Online (Sandbox Code Playgroud)

用于自动极限检测。


注意:在 Octave 上,这仅适用于支持的类型。由于您的图像不包含负值,您可以将图像转换为uint16,这将适合您的值。或者您可以使用 double 来获得更通用的方法:

imshow(uint16(x.image), [])
imshow(double(x.image), [])
Run Code Online (Sandbox Code Playgroud)

在您的情况下,如果您不介意值为 256 的像素饱和为 255,则可以将图像转换为uint8

imshow(uint8(x.image))
Run Code Online (Sandbox Code Playgroud)