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

问题描述 投票:1回答:2

我有一个从图像中提取的形状(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)

python numpy image-processing rgb
2个回答
2
投票
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])

0
投票

如果掩盖绿色和蓝色通道的LSB并添加它们,则只能获得:

0 + 0 = 0
0 + 1 = 1  <--- THIS
1 + 0 = 1  <--- THIS
1 + 1 = 2

因此,您想确定它们加起来等于1的位置,即它们是不同的:

mask = np.sum((ver & 1), axis=-1) == 1
© www.soinside.com 2019 - 2024. All rights reserved.