我需要替换图像(最终图像)的 8 位值(0 到 255)索引集,遵循来自另一个图像(第二个图像)灰度的"映射值",其中相关的地图索引是从主图像中选择的。
事实上,这与 MATLAB 所做的类似。
indexS = find(image1 == integer ('could be a integer from 1 to 255'))
imagfinal(indexS) = imagsecondary(indexS).
我尝试了堆栈上的python/matlab find()示例,例如:Python中的MATLAB-style find()函数。 以及相关的...
我尝试了n.nonzero,np.argwhere和np.where,但我真的很困惑。
我有三个源图像,假设 A、B、C,相同的形状,例如。(100x100) 具有不同的 0 到 255 个值,我的意思是它们是彼此完全不同的完全灰度。
所以,第一步—— 我需要从 A 获取值 = 1(但可能是 、10、196 、最多 255)的所有索引,所以我做到了:
Aboolean = np.equal(A,1)
结果是
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],...
然后我尝试使用这些布尔索引数组结果从 B 获取值:
Bnew = B[Aboolean]
但它不适用于进一步的步骤,因为结果是值映射并且索引丢失......
来自 Bnew 的值应该替换 C 图像上的相应值 8 位,我的意思是这些 8 位值到相同的位置(或相同的索引),记住 B 和 C(也是 A)具有相同的形状/大小数组 (100x100)。
所以我又试了一次:
D = np.where(Aboolean,B,C)
绘制图像时,最终结果只是相同的图像C!完全没有修改。
fig, ax = plt.subplots(nrows=1, figsize=(16,20))
ax.imshow(D, cmap='gray',interpolation='nearest')
结果相同的图像"C">
我的目标是替换 B 对 C 的一组值(由相同的索引位置统治),这些值是根据 A 上的条件索引图进行切片的。
您可以通过使用A 中的布尔索引将值从 C 直接复制到 B 中来做到这一点(如果您不想修改原始 B,请先使用B.copy()
创建一个副本)。
>>> import numpy as np
>>> A = np.array([0,0,1,0,0])
>>> B = np.array([1,2,3,4,5])
>>> C = np.array([10,9,8,7,6])
>>> B[A==1] = C[A==1]
>>> B
array([1, 2, 8, 4, 5])
编辑:
C[A==1] = B[A==1]