如何使用 numpy 数组切片来屏蔽图像灰度
How to mask an image gray scale using numpy array slicing
我需要替换图像(最终图像)的 8 位值(0 到 255)索引集,跟随从另一图像(第二图像)灰度中选择相关地图索引的 "map values"主图像。
事实上,这与 MATLAB 所做的类似
indexS = find(image1 == integer ('could be a integer from 1 to 255'))
imagfinal(indexS) = imagsecondary(indexS).
我在堆栈上尝试了 python/matlab find() 的以下示例,例如:MATLAB-style find() function in Python。以及相关的...
我尝试了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)有同样的 shape/size 数组 (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'
我的目标是在 C 上替换 B 中的一组值(由相同的索引位置决定),这些值是根据 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]
我需要替换图像(最终图像)的 8 位值(0 到 255)索引集,跟随从另一图像(第二图像)灰度中选择相关地图索引的 "map values"主图像。
事实上,这与 MATLAB 所做的类似
indexS = find(image1 == integer ('could be a integer from 1 to 255'))
imagfinal(indexS) = imagsecondary(indexS).
我在堆栈上尝试了 python/matlab find() 的以下示例,例如:MATLAB-style find() function in Python。以及相关的...
我尝试了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)有同样的 shape/size 数组 (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'
我的目标是在 C 上替换 B 中的一组值(由相同的索引位置决定),这些值是根据 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]