我正在研究图像隐写问题,我必须在png图像文件中隐藏一些文本信息。在成功进行隐写操作之后,生成的结果图像大于原始文件。由于我使用LSB隐写术(1位,2位,3位),因此不应增加文件大小,因为存储的数据位于图像的现有位内。原始图像中不会添加其他字节。所以我无法理解为什么会这样。从概念上讲,它不应该增加结果文件大小。
例如
原始文件大小:88 KB 文本文件大小:382KB 生成的PNG文件大小:487 KB
我读到PNG采用“无损数据压缩”。所以我假设PNG可能以压缩格式存储图像,因此当我从图像中读取图像字节时,它们会被扩展,结果我的图像大小增加了。如果我错了,请纠正我。任何形式的帮助将不胜感激。
答案 0 :(得分:4)
从概念上讲,应增加或至少更改生成的文件大小。压缩取决于图像中的相关性,尤其是像素值中的相关性。您正在更改像素值,因此您正在消除压缩所依赖的一些相关性。当您压缩时,说“正在存储的数据位于图像的现有位内”是没有意义的。不仅存在比特,而且您正在改变现有的相关性。
实际上,您在低位中添加噪声,这将总是增加无损压缩数据的大小。
简单示例:如果您从图像中的线性渐变开始,使用相邻像素值200,201,202,203,204,205,206和207.PNG应用的滤镜将采用差异,这将是结果(假设你在一条线的起点)200,1,1,1,1,1,1,1。一系列压缩非常好。然后在低位添加噪声并将其更改为207,202,205,206,204,209,210和210.现在差异为:207,-5,3,1,2,5,4,0像这样的序列几乎不会像一堆那样压缩。
答案 1 :(得分:-1)
这是一种格式问题,因为您打开图像文件,例如JPG格式文件并打开原始图像,对于此原始图像应用LSB,然后将此原始图像保存为PNG格式,RAW图像的数据比JPG文件字节更大。