Я хочу изменить порядок чтения массива в Python, мне нужно использовать Reshape? - PullRequest
1 голос
/ 23 мая 2019

Я читаю 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 как оригинальный размер заказа.

1 Ответ

0 голосов
/ 23 мая 2019

Хотя np.swapaxes может быть решением для ответа, я бы предложил написать функцию, которая отображает информацию об оригинальном размере и сохраняет данные без изменений.

Например, из SCIFIO Я беру tif-файл (focal1.tif в EmbryoCE.zip, размер которого 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)

Ссылка на изображение

Вы можетелегко построить поперечное сечение плоскости XY с помощью data[number of slice].


и добавить функцию, которая показывает информацию о размере оригинала:

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 )

Кстати,изменение формы не очень хорошая идея, оно выдает изображение с точками, которые отображаются в периодическом порядке, но не содержат никакой полезной информации.

Ссылка на изображение

...