上下文: Image: XOR first and second, to form heart-shaped pixel art
我正在创建一个可视的一次性键盘程序,该程序将输入位图分为两个不同的随机位列表,将它们进行异或运算后,应再现输入位图-一种“反向-反向工程”。
作为高度简化的解释,每个新创建的位图都分配给2个独立的收件人。如果它们组合在一起以形成指定的形状,它们可能会彼此信任(请参阅下文)。
在上面的示例中,像素输入-最终输出-在中间形成一个心形。
Attempt:最初,我的代码成功地将适当的位分配给了两个单独的列表,具体取决于输入位是零还是1。 (包括随机性是因为我希望每次都使用不同的输出。)当输入仅在白色背景上仅显示黑色(即1s的字符串)心时,这一切都很好:Image: binary representation
input_pixels = [[0,0, ... 0], [0,0, ... 0], ... , [0,1, ... 1,0]] ## I've shortened here
bitmap1 = []
bitmap2 = []
for row in input_pixels:
temp1 = []
temp2 = []
for bit in row:
## 'Case A' when a bit in input_pixels is 0
if bit == 0:
randbit = random.choice((0, 1))
temp1.append(randbit)
if randbit == 1:
temp2.append(1)
else:
temp2.append(0)
## 'Case B' when a bit in input_pixels is 1
else:
randbit = random.choice((0, 1))
temp1.append(randbit)
if randbit == 1:
temp2.append(0)
else:
temp2.append(1)
bitmap1.append(temp1)
bitmap2.append(temp2)
但是,如果输入在心形以外的区域中包含1,那么我的代码显然不会产生预期的结果,因为条件在我们所感知的“形”之间没有区别。
问题:如何更改代码以可能识别出我指定形状的位,并且仅将“情况B”应用于此类对应部分?我对正则表达式不是很熟悉,但是也许可以解决这些极端情况吗?
编辑(澄清):
我的代码在例如Image: If the 1s occupy non-heart-shaped locations just to add noise时失败尽管我可以选择输入,以便只有heart == 1(如上面标记为“二进制代表”的图像),但在这种情况下,用户可以立即看到,而不必求异或,他们收到的位图将形成一颗心-我想避免。因此,考虑到任何嘈杂的输入,我需要以某种方式将“案例B”应用于just所需的“指定”区域(心脏)。
[上下文:图像:首先和第二次异或,以形成心形像素艺术,我正在创建一个可视的一次性填充程序,该程序将输入位图分为两个不同的随机位列表,当进行XOR -...时] >
[我不知道您为什么想要心脏周围的随机噪声,但是仅使用temp2.append(random.choice((0, 1))
而不依赖randbit
的值就可以做到(对于唯一的情况A,如果0
表示白色而心脏是黑色的话) )。
毕竟,两个异或在一起仍然会产生一个随机位值。