Python 图像数据的numpy形状的尺寸顺序是什么?

Python 图像数据的numpy形状的尺寸顺序是什么?,python,python-2.7,numpy,scipy,shape,Python,Python 2.7,Numpy,Scipy,Shape,我正在使用nibabellib从nii文件加载数据。我读了图书馆的文件,发现 无需将任何主图像数据加载到内存中,即可获得此信息。当然,也可以通过NumPy数组访问图像数据 这是我用来加载数据和形状的代码 import nibabel as nib img = nib.load('example.nii') data = img.get_data() data = np.squeeze(data) data = np.copy(data, order="C") print data.shape

我正在使用
nibabel
lib从nii文件加载数据。我读了图书馆的文件,发现

无需将任何主图像数据加载到内存中,即可获得此信息。当然,也可以通过NumPy数组访问图像数据

这是我用来加载数据和形状的代码

import nibabel as nib
img = nib.load('example.nii')
data = img.get_data()
data = np.squeeze(data)
data = np.copy(data, order="C")
print data.shape
我得到了结果

128, 128, 64
数据形状的顺序是什么?它是宽度x高度x深度吗?我的输入必须按深度、高度、宽度排列。所以我将使用
input=data.transpose(2,0,1)
。是这样吗?谢谢大家

更新:我发现Numpy将按顺序读取图像作为参考

好的,我的观点如下:

使用
scipy.ndimage.imread('img.jpg',mode='RGB')
,生成的数组将始终具有以下顺序:
(H,W,D)
,即(高度,宽度,深度),因为numpy用于ndarrays
(轴=0,轴=1,轴=2)
或类似的
(Y,X,Z)
如果你想在三维中可视化

# read image
In [21]: img = scipy.ndimage.imread('suza.jpg', mode='RGB')

# image shape as (H, W, D)
In [22]: img.shape
Out[22]: (634, 1366, 3)

# transpose to shape as (D, H, W)
In [23]: tr_img = img.transpose((-1, 0, 1))    

In [23]: tr_img.shape
Out[23]: (3, 634, 1366)

如果将IMGH形状看作元组,

#  index    (0,   1,    2)
img_shape = (634, 1366, 3)
# or index  (-3,  -2,  -1)
选择哪一个是便于记忆的方法


注意:该选项为。因此,现在建议使用,它读取图像并返回数组,这是numpy数组的一个子类,遵循上面讨论的相同约定

# read image
$ img = imageio.imread('suza.jpg', format='jpg')

# convert the image to a numpy array
$ img_np = np.asarray(img)

PS:还应注意,tensorflow等库也(几乎)遵循与numpy相同的约定

返回:

uint8型张量。三维形状
[高度、宽度、通道]


Numpy文档是怎么说的?我发现,轴=0是高度,轴=1是宽度,轴=2是深度。是这样吗?像这样,我打算在Numpy站点上查找形状函数回答您自己的问题最简单的方法是在已知尺寸的示例图像上运行代码。@user8264您是对的,它总是
(H,W,D)
,因为Numpy使用的术语是
(axis=0,axis=1,axis=2)
或类似的
(Y,X,Z)
axes,如果您希望以这种方式将其可视化。感谢您的回答。我想知道为什么它是
转置((-1,0,1))
,而不是
转置((2,0,1))
@user8264你的也是对的。这只是另一种编写索引(元组/列表)的方法。谢谢。因此,我在代码中使用了
data=np.copy(data,order=“C”)
(有问题)。我需要删除该行吗?@user8264是的,我认为没有必要执行
挤压
复制
操作。使用
img.get\u data()
加载的数据本身就是一个numpy数组