图像堆栈的最大强度投影

4

我正在尝试重新创建这个函数

max(array, [], 3)

这里需要翻译的内容是:从MatLab开始,它可以处理我的300x300像素图像堆(我在这里说“图像”,因为我正在处理图像,实际上这只是一个大型双重数组),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的新手,因此这里的答案对我来说不太清楚。是否有现有的函数可以执行此操作?


你应该在问题中发布一个小的样本数据集,比如10103的维度,这将有助于其他人提供建议。 - rnso
我认为你的问题在于返回self.dataset数组大小。你可以尝试使用以下代码来获取正确的数组维度:dim1 = len(self.dataset) dim2 = len(self.dataset[0]) dim3 = len(self.dataset[0][0]) - Mohammad nagdawi
MATLAB的max函数不会进行归一化处理,它只是针对每个ij的组合取array(i,j,:)的最大值。 - Cris Luengo
2
max(array, [], 3) 的 Numpy 等效函数是 np.amax(array, axis=2)。这两个函数都没有归一化处理。 - buzjwa
1个回答

12
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轴的最大值。 - Kai Winkler
2
@kai 不,原回答是正确的。skimage将图像轴读作(plane,row,column),因此axis=0是平面,即z轴。 - user115625

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接