使用PIL(LSB)的Python图像处理

2024-05-16 10:03:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近开始学习隐写术,遇到了一个我似乎不明白的问题。基本上,图像是一个png,其中包含一个隐藏的标志。你知道吗

从图像中提取位平面时,可以看到蓝色和绿色平面中有一个图像,而红色平面中有一个图像。要以明文显示标志,您必须通过XORing LSB或其他方式从红色图像中删除这些图像。我不是很确定。你知道吗

如果你不删除其他图片,红色平面上的图片就是这个样子。你知道吗

Image of what it does if you don't remove the other images

我的问题是我该怎么做这种事?这就是问题所在。你知道吗

Here's a link to the image in question


Tags: 图像png标志方式图片平面蓝色绿色
1条回答
网友
1楼 · 发布于 2024-05-16 10:03:53

实际上,隐藏图像位于最低的3位平面。做一个完整的分解可以清楚地说明这一点。你知道吗

Red plane bit decomposition

首先将图像加载到一个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()

extracted message

如果不是很明显,& 0x07部分是一个二进制数为00000111的AND操作,为了简洁起见,只是用十六进制写的。你知道吗

如果你没有保留所有3个lsb,那么你要么在解决方案中丢失了一些字母,要么所有的东西都会在那里,但有些边缘不会那么平滑。其中第一个至关重要。你知道吗

相关问题 更多 >