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