Как сделать Z-проекцию (как в ImageJ), используя массивы numpy? - PullRequest
0 голосов
/ 21 мая 2019

Я сейчас обрабатываю изображения Z-стека некоторых ячеек, которые я взял. Я хочу проецировать эти изображения подобно функции ZProjection в ImageJ.

После их импорта (см. Ниже) у меня есть 3d стопка изображений. Я продолжаю выполнять функцию numpy для 3-го / Z-измерения следующим образом:

import numpy as np
projection = np.**(img, axis=2)

** == max, std, sum, mean

Когда я plt.imshow различаю математические операции, я не вижу никаких отличий, и они наверняка не похожи на ImageJ (см. Сравнение ниже). Может быть, у кого-то есть представление о том, что происходит не так.

Заранее спасибо, BBQuercus:)

-----------

Импорт изображения:

import os
import numpy as np

# File path
root = '/Folder'

# Import all images in root
img = np.zeros((1002, 1004)) # Pixel size

for file in os.listdir(root):
    if not file.endswith('.tif'):
        continue
    _img = imread(os.path.join(root, file))
    if 'c1' in file:
        img = np.dstack((img, _img))

Изображения (полный набор данных слишком велик для отображения), сверху - numpy.std, снизу - ImageJ std (в полном стеке):

Numpy STD

ImageJ STD (full stack)

1 Ответ

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

Я ответил, используя следующие, довольно крутые команды:

import fijibin.macro

in_folder = '/Infolder'
out_name = '/Outname'

macro = """run("Image Sequence...", "open=[{}] file=c1 sort use");
run("Z Project...", "projection=[Standard Deviation]");
saveAs("Tiff", "{}");
close();
close();""".format(in_folder, out_name)

fijibin.macro.run(macro)

Затем я просто импортирую выходной файл в новый массив np.array.

Может быть, кто-то может использовать его в будущем.

...