我读取了一张tif图像(3D堆栈),其原始大小为100 X 120 X 150(示例)。
但是,当我导入此文件时,该尺寸为150 X 120 X 100。 我尝试通过使用matrix.reshape重塑形状,但是我发现如果使用此重塑形状,其元素顺序将会改变。
import numpy as np
from skimage import io
# read the image stack
fname = '100x120x150.tif'
data = io.imread(fname)
data.shape
我想要做的是更改读取顺序,同时保持元素顺序。因此,导入后,我想看到data.shape将是100X120X150作为原始大小顺序。
答案 0 :(得分:0)
尽管np.swapaxes
可能是答案的解决方案,但我建议编写一个显示原始大小信息并保持数据不变的函数。
例如,从SCIFIO中,我提取了一个tif文件(EmbryoCE.zip中的focal1.tif,大小为425 * 434 * 205):
import numpy as np
import matplotlib.pyplot as plt
from skimage import io
fname = 'focal1.tif'
data = io.imread(fname)
np.shape(data) #shows (205, 434, 425)
data[0] # The first layer in original Z direction
plt.imshow(data[0], cmap = "gray", aspect = 'equal')
plt.colorbar()
plt.show()
print('Shape of matrix projection:',np.shape(data[0])) # shows (434, 425)
使用data[number of slice]
可以轻松绘制X-Y平面的横截面。
并添加一个显示原始尺寸信息的函数:
def pic_size(data_matrix):
size = print('size of image: (',np.shape(data_matrix)[2],',',np.shape(data_matrix)[1],',',np.shape(data_matrix)[0],')')
return size
pic_size(data) #shows size of image: ( 425 , 434 , 205 )
顺便说一句,重塑不是一个好主意,它会给出带有点的图像,这些点看起来似乎是周期性排列的,但是没有任何有用的信息。