检查图像中绿色和蓝色值的奇偶性

Check the parity of the Green and Blue values into an image

我有一个形状为 (9,8,2) 的数组 ver,它是我从图像中提取的。 我要搜索的是遍历该数组的像素,检查绿色和蓝色值是否具有不同的奇偶校验,如果是,则将结果 True 放入列表中,然后对每一行做同样的事情。

ver = im_arr[:9,:8,1:3]

这里我使用了图像的前 9 行,前 8 个像素,并且我提取了只有绿色和蓝色值的列。 我现在知道如何使用这样的二维数组了:

cf = cf[:,1:3]
jou = (cf.sum(1)%2).astype(bool)

但在这种情况下,对于 3D 数组,我真的不知道该怎么做,我尝试了三个 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 调用检查最后一个维度是否所有值都为真,如果是 returns 则为真,否则为假。为了得到你想要的面具,我只是用 ~

否定结果

编辑以添加一个解决方案,检查维度上的两个值是相等还是奇数。

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