我有一个从图像中提取的形状(9,8,2)的数组ver。我要搜索的是迭代此数组的像素,检查Green和Blue值是否具有不同的奇偶校验,如果是,请将结果True放入列表中,并对每行进行相同操作。
ver = im_arr[:9,:8,1:3]
这里,我拍摄了图像的前9行,第8个像素,然后我将这些列提取为仅具有Green和Blue值。我现在知道如何使用2D数组:
cf = cf[:,1:3]
jou = (cf.sum(1)%2).astype(bool)
但是在这种情况下,对于3D数组,我真的不知道该怎么做,我尝试了3个for循环,但是它不起作用:
for i in range(ver.shape[0]):
for y in range(ver.shape[1]):
for z in range(ver.shape[2]):
juju[i,y,z] = (ver.sum(1)%2).astype(bool)
import numpy as np
image = np.random.randint(0, 255, (100, 100, 3))
subset = image[:9, :8, 1:]
mask = ~np.all(np.remainder(subset, 2) == 0, axis=-1)
此代码生成随机图像并提取子集。然后,它检查数组中所有数字的其余部分是否可被2整除。np.all调用检查是否在最后一个维度上所有值都是True,如果是,则返回True,否则返回False。要获得您想要的蒙版,我只需使用〜
取反结果即可编辑以添加一个解决方案,该解决方案可以检查维度中的两个值是否相等或为奇数。
import numpy as np
image = np.random.randint(0, 255, (100, 100, 3))
subset = image[:9, :8, 1:]
even = np.remainder(subset, 2) == 0
mask = ~np.equal(even[..., 0], even[..., 1])
如果掩盖绿色和蓝色通道的LSB并添加它们,则只能获得:
0 + 0 = 0
0 + 1 = 1 <--- THIS
1 + 0 = 1 <--- THIS
1 + 1 = 2
因此,您想确定它们加起来等于1的位置,即它们是不同的:
mask = np.sum((ver & 1), axis=-1) == 1