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
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]