我的灰度图像是sixe 512x512。因此,每个像素包含8位。我可以将总共8位嵌入到我希望嵌入数据的像素中吗?这可能吗? (我要求图像仅用于嵌入数据)。如果我想在总共512 * 512像素中嵌入10,000像素的数据,那么我可以总共嵌入80,000位数据或10kB数据吗?
答案 0 :(得分:2)
每个像素具有256级的标准灰度图像需要每像素8位。这是因为需要8位来编码256个不同的级别。如果您的图像尺寸为512 x 512,则整个图像中的总像素数为262,144像素。因此,整个图像包含8位* 262,144 = 2,097,152位的信息。
如果要拍摄这些像素的子集并编码8位“不同”信息,请注意所得到的图像可能会在外观上发生变化。每个像素坐标处的8位信息先前编码像素强度(从0到255)。如果要用其他值替换此值,则强度将不同,整体图像将显示不同。
答案 1 :(得分:2)
如果要在512x512图像中嵌入10KiB数据,其中位深度为8位,我建议通过更改每个像素的LSB,在每隔一个像素中存储1位数据。
每隔一个像素只更改1位数据,可以存储(512 * 512 * 1)/ 2位数据或16KiB数据。这样,您可以存储所需的所有数据,同时仅以非常有限的方式更改图像。
作为一个例子,这里有一个嵌入了不同数量的白噪声的图像(通过嵌入每个像素n
个字节),你可以看到下表中嵌入了多少噪声(数据): / p>
X | Y | bits used | data(KiB)
0 | 0 | 0 | 0
1 | 0 | 1 | 32
0 | 1 | 2 | 64
1 | 1 | 3 | 96
0 | 2 | 4 | 128
1 | 2 | 5 | 160
0 | 3 | 6 | 192
1 | 3 | 7 | 224
_ | _ | 8 | 256 (image omitted as just white noise)
可以看出,将最多64KiB的数据嵌入到512x512x8图像中是非常合理的,因为通过编辑每个像素的2 LSB可以使图像几乎没有明显变化,因此像素编码为:
XXXX XXYY
X
来自原始图片,Y
是存储数据的2位。