我最近开始研究隐写术,但遇到了一个我似乎不太了解的问题。基本上,图像是png,其中包含一个隐藏标志。
从图像中提取位平面时,可以看到在蓝色和绿色平面中有一个图像,而在红色平面中可以看到。要以明文显示该标志,您必须通过对LSB或其他内容进行XOR来从红色图像中删除这些图像。我不太确定。
如果不删除其他图像,这就是红色平面中的图像。
我的问题是我该如何做这种事情?这是有问题的图像。
答案 0 :(得分:2)
实际上,隐藏的图像位于最低的3位平面中。进行完整的分解很清楚。
首先将图像加载到一个numpy数组中,该数组的尺寸为MxNx3。
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
img = Image.open('stego.png')
data = np.array(img)
现在要做的就是将每个颜色平面与另一个颜色平面异或,然后保留3个最低有效位(lsb)。
extracted = (data[...,0] ^ data[...,1] ^ data[...,2]) & 0x07
plt.imshow(extracted)
plt.show()
如果不太明显,& 0x07
部分是一个AND运算,其二进制数为00000111,为简洁起见,仅以十六进制表示。
如果您不保留所有3个lsb,那么您要么在解决方案中缺少一些字母,要么所有内容都将存在,但某些边缘将不那么平滑。其中第一个至关重要。