我正在尝试创建一个图像,其中每个色块中的所有像素(即具有相同标签的每组像素)都具有相同的值(先前已计算出)。换句话说,我有:
我想创建一个新的矩阵/图像,其中每个像素的“ V”值与“ L”中的标签相对应。
我已经尝试了一种显而易见的方法,即遍历每个标签,找到带有该标签的像素,并在V中为其分配相应的值:
L= [[0,0,0,1,1,1,1,2],
[0,0,1,1,1,2,2,2],
[0,0,0,1,1,1,2,2],
[0,0,1,1,2,2,2,2]]
L = np.array(L)
V = [7,8,9]
totLabel = np.amax(L)
result = np.zeros( (L.shape), dtype=np.float32 )
for idx in range(0,totLabel):
result += (L==idx)*V[idx]
这可以正常工作,在某种意义上说,结果符合预期:
result:
[[7,7,7,8,8,8,8,9],
[7,7,8,8,8,9,9,9],
[7,7,7,8,8,8,9,9],
[7,7,8,8,9,9,9,9]]
问题在于,现在我需要将此图像放大到11000x11000大小的图像。这使它非常慢,因为在每次迭代时,我的代码都会分配一个新的大小为numpy的numpy矩阵(label == idx)并取消分配,因此我不得不针对150k个唯一标签重复此过程。
编辑:添加了示例值和预期的输出。
答案 0 :(得分:1)
您可以使用boolean indexing这样操作:
labels = np.unique(L)
L_copy = L.copy()
for label in labels:
mask = (L_copy==label)
L[mask] = V[label]
这直接修改了L。如果您不希望这样做,则需要先复制阵列。