问题描述
我正在尝试构建一个 image steganography
android 应用程序来隐藏 jpeg
图像中的信息。
我正在对图像 DCT Coefficients
中的信息进行编码。
我正在使用 OpenCv
执行以下步骤:
- 加载图像位图并从中获取图像
mat
。 - 将图像从 RGB 转换为 YCrCb
- 将图像分成 8 x 8 块。
- 中心像素值大约为 0 [0-255 => -128-127]
- 应用 DCT 变换以获得块的 DCT 系数。
- 量化 [用量化矩阵划分 DCT 系数]
- 现在用我们的秘密消息替换非 0/1/DC 系数的 LSB。
- 逆量化
- 逆 DCT
- [0-255
- YCbCr 转 RGB
- 从图像
mat
中获取位图 - 将位图另存为 jpeg。
这个想法是因为我只是使用 jpeg 压缩算法提取和重新打包 jpeg 图像,jpeg
压缩算法不应该破坏 DCT 系数中的数据(很多的 jpeg :P)
问题:
我刚刚保存在 DCT 系数 LSB 中的数据在第 12 步中被破坏了。 我想要一种方法来保存图像而不破坏其数据(理论上应该是可能的,因为我只遵循了 jpeg 压缩算法。
我尝试过的东西:
- this 是正常方法,会导致数据丢失。
- 我使用了 this 方法。它不会破坏数据,但会增加大约 6 倍的文件大小,并且最终接收到的文件不是 jpeg,而是纯字节(如果扩展名设置为 jpeg 或 png,则可以在图像查看器中查看)立>
- 我认为我使用的 jpeg 图像的压缩级别可能与 android 保存 jpeg 图像时的压缩级别不同。所以我使用应用程序保存的图像来隐藏数据。即使丢失了大量数据(与以前相比更少)。
- 将图像保存为 png。这有效,没有数据丢失,并且可以应用 dct 算法来提取隐藏信息。但重点是获得 jpeg 图像作为输出,bcz jpeg 是最常见的图像扩展。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)