【问题标题】:Maximum intensity projection from image stack图像堆栈的最大强度投影
【发布时间】:2018-01-10 01:07:02
【问题描述】:

我正在尝试重新创建函数

max(array, [], 3)

来自 MatLab,它可以获取我的 N 个图像的 300x300px 图像堆栈(我在这里说“图像”是因为我正在处理图像,实际上这只是一个大的双数组),300x300xN,并创建一个 300x300 数组。我认为在这个函数中发生的事情是,如果它运行效率低下,它正在解析每个 (x,y) 点,然后从该点沿 z 轴取最大值,然后用最大值和最小值进行归一化整个数组的值。

我尝试在 python 中重新创建它

# Shape of dataset: (300, 300, 181)
# Type of dataset: <type 'numpy.ndarray'>
for x in range(numpy.size(self.dataset, 0)):
    for y in range(numpy.size(self.dataset, 1)):
        print "Point is", x, y
        # more would go here to find the maximum (x,y) value over Z axis in self.dataset

一个非常简单的 X,Y 迭代器。 ——但我的 IDE 不仅在运行这段代码几毫秒后崩溃,而且感觉很糟糕而且效率低下。

我有什么遗漏吗?我是 Python 新手,因此我不清楚这里的答案。是否有执行此操作的现有函数?

【问题讨论】:

  • 您应该在问题中发布一个小样本数据集,例如尺寸为 10*10*3,这将有助于其他人提出建议。
  • 我认为您的问题与返回 self.dataset 数组大小有关。你能试试这个吗? dim1 = len(self.dataset) dim2 = len(self.dataset[0]) dim3 = len(self.dataset[0][0]) 获得正确的数组尺寸。
  • MATLAB 的 max 未标准化。在这种情况下,i 和 j 的每个组合只需要 array(i,j,:) 的最大值。
  • max(array, [], 3) 的 Numpy 等效项是 np.amax(array, axis=2)。这两个函数都没有标准化。

标签: python matlab


【解决方案1】:
import numpy as np
import matplotlib.pyplot as plt
from skimage import io

path = "test.tif"
IM = io.imread(path)
IM_MAX= np.max(IM, axis=0)
plt.imshow(IM_MAX)

【讨论】:

  • np.max( ) 中的轴需要为 2 才能取 z 轴的最大值。
猜你喜欢
  • 1970-01-01
  • 2021-09-11
  • 2019-11-14
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多