我有一組 2d 蒙版,看起來像這樣:
[
#mask0
[[0.3,0.3],
[0,0]],
#mask1
[[0.4,0],
[0.4,0.4]]
]
而且我想一個接一個地合并掩碼,每個掩碼都會覆寫它之前的掩碼,(我不想要所有掩碼的總和)。通過覆寫,我的意思是如果第二個掩碼的值不為 0,它將設定新值,否則保留之前掩碼的值。所以對于這個例子,結果將是
[[0.4,0.3],
[0.4,0.4]]]
當然,在我的情況下,我沒有只有 2 個 2x2 的掩碼,我有多個更大比例的掩碼,這只是為了演示。
蒙版代表一些灰度值的圓圈,我想將它們粘貼在另一個之上。像這樣:

如何使用 NumPy 和干凈高效的代碼來實作這一點?如果有不同的方法來解決這個問題,我也很想聽聽。
uj5u.com熱心網友回復:
如果您有沿第一個軸排列的 3D 蒙版陣列,您可以沿第一個軸縮小并將您的蒙版與np.where:
In [2]: import functools
In [3]: functools.reduce(lambda m0, m1: np.where(m1 == 0, m0, m1), masks)
Out[3]:
array([[0.4, 0.3],
[0.4, 0.4]])
uj5u.com熱心網友回復:
如果您有多個影像并且想要應用于每個影像,則可以使用apply_along_axis如下:
from functools import reduce
images = np.random.rand(10, 4, 64, 64) # (n,masksAmount,imgSize,imgSize)
print(images.shape)
def apply_mask(image):
image = reduce(lambda m0, m1: np.where(m1 == 0, m0, m1), image)
return image
images = np.apply_along_axis(apply_mask, 1, images) # (n,imgSize,imgSize)
print(images.shape)
輸出:
(10, 4, 64, 64) # shape
(10, 64, 64) # shape
例子
image = np.array([[[0.3, 0.3], [0, 0]], [[0.4, 0], [0.4, 0.4]]])
images = np.repeat(image[None,...],4,0)
print(images.shape)
images = np.apply_along_axis(apply_mask, 1, images)
print(images.shape)
print(images)
輸出:
(4, 2, 2, 2) # (n,masksAmount,imgSize,imgSize)
(4, 2, 2) # (n,imgSize,imgSize)
# images =>
[[[0.4 0.3]
[0.4 0.4]]
[[0.4 0.3]
[0.4 0.4]]
[[0.4 0.3]
[0.4 0.4]]
[[0.4 0.3]
[0.4 0.4]]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/449884.html
下一篇:在t_span中使用np.arange()時出錯,在Scipy1.8.0但不是1.5.0中出現solve_ivp錯誤
