web-dev-qa-db-ja.com

画像データのnumpy形状の次元順序は何ですか?

nibabel libを使用して、niiファイルからデータをロードしています。 http://nipy.org/nibabel/gettingstarted.html でlibのドキュメントを読んだところ、

この情報は、メイン画像データをメモリにロードする必要なく利用できます。もちろん、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
_

データ形状の順序は何ですか? WidthxHeightxDepthですか?そして、私の入力は_depth, height, width_として整理する必要があります。そこで、input=data.transpose(2,0,1)を使用します。正しいですか?皆さんありがとう

更新:Numpyが参照として_Height x Width x Depth_の順序で画像を読み取ることがわかりました http://www.python-course.eu/images/axis.jpeg

11
John

OK、これが私の見解です:

scipy.ndimage.imread('img.jpg', mode='RGB')を使用すると、結果の配列は常に次の順序になります:(H, W, D)すなわち(numeightがndarrayに使用する用語のために(高さ、幅、深さ)(axis=0, axis=1, axis=2)または同様に(Y, X, Z) 3次元で視覚化する場合。

# 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)

Img_shapeをタプルと見なす場合、

#  index    (0,   1,    2)
img_shape = (634, 1366, 3)
# or index  (-3,  -2,  -1)

覚えやすい便利な方法を選択してください。


[〜#〜] ps [〜#〜]:また、テンソルフローのようなライブラリも(ほぼ)numpyと同じ規則に従っていることに注意してください。

tf.image_decode_jpeg() は以下を返します:

タイプuint8のテンソル。形状を持つ3次元[height, width, channels]

16
kmario23