我有一些矩阵代表图片的分段部分。 我需要“添加”片段以制作分段图片。
可以使用数组进行更简单的解释。
a = [3, 0, 0, 0]
b = [3, 1, 0, 0]
c = [0, 0, 0, 1]
我怎样才能做出类似的事情:
result = a AND b AND c
result = [3, 1, 0, 1]
这是某种叠加。
像素值与位置一致,因为它们来自相同的源图片。
感谢。
答案 0 :(得分:2)
没有库函数可以执行此操作,但您仍然可以使用numpy函数来帮助计算。 np.nonzero
将返回所有非零元素的索引,在您的情况下,您只需要最后一个这样的元素,这样您就可以使用np.max
来查找它。
下面是两个执行此操作的函数,但是如果所有元素都为0则必须注意。其中一个函数是间隔开来的,为了可读性而编写(func
),一个是单行列表理解因为LC只是 awesome。
import numpy as np
a = [3, 0, 0, 0]
b = [3, 1, 0, 0]
c = [0, 0, 0, 1]
data = np.array([a, b, c])
def func_LC(x):
return np.array([row[np.max(np.nonzero(row))] if len(np.nonzero(row)[0]) else 0 for row in np.array(list(zip(*x)))])
def func(x):
result = []
for row in x:
nonzero = np.nonzero(row)
if len(nonzero[0]) == 0: # Handles if all elements are 0.
result.append(0)
else:
result.append(row[np.max(nonzero)])
答案 1 :(得分:0)
我相信没有库函数可以做到这一点,所以,对于那些真正理解这个问题的人来说,这就是答案:
def non_Destructive_pixel_addition(original, segmentated):
to_be_added = np.matrix(np.where(segmentated)).transpose()
n, m = np.shape(to_be_added)
for k in range(n):
i = to_be_added[k, 0]
j = to_be_added[k, 1]
if (original[i,j] == 0):
original[i,j] = segmentated[i,j]
答案 2 :(得分:-1)
您可以使用列表理解:
result = [a[i] | b[i] | c[i] for i in range(len(a))]
编辑:
如果值可以是不同的最大值:
result = [max(a[i], b[i], c[i]) for i in range(len(a))]