除了使用np.median(array)
计算每个像素的中位数之外,还有其他方法可以计算多个图像的中值图像吗?
我知道已经有question about this了,但是从3年前开始,也许有什么事情发生了。
答案 0 :(得分:3)
以下是将3个玩具图像放入(高度)x(宽度)x(图像数量)数组然后沿(图像数)轴调用numpy.median
的方法示例(如果图像按时间顺序排列,则为时间轴)。
In [1]: img1 = np.array([[1, 2], [3, 4]])
In [2]: img2 = np.array([[10, 6], [1, 0]])
In [3]: img3 = np.array([[8, 1], [0, 4]])
In [4]: images = np.zeros(shape=img1.shape + (3,))
In [5]: images[:,:,0] = img1
In [6]: images[:,:,1] = img2
In [7]: images[:,:,2] = img3
In [8]: images
Out[8]:
array([[[ 1., 10., 8.],
[ 2., 6., 1.]],
[[ 3., 1., 0.],
[ 4., 0., 4.]]])
In [9]: images[:,:,0]
Out[9]:
array([[ 1., 2.],
[ 3., 4.]])
In [10]: np.median(images, axis=2)
Out[10]:
array([[ 8., 2.],
[ 1., 4.]])
第4-7行由numpy.dstack
函数方便地处理。这相当于:
images = np.dstack((img1, img2, img3))
并且通常的方式是将2D图像读入列表或从文件中顺序读取,以逐步增长数据结构。虽然通常预先分配零块并在加载时顺序插入数据会更有效。