试图实现bpcs隐写,而我面临的第一个问题是位平面分解。我已经创建了一个方法(GetBitPlaneRed) (仅针对红色,但对于其他颜色似乎是一样的),它创建了一个基于原始位图和位平面索引(从1到8)的红白位图。
private static int GetBit(byte b, int bitIndex)
{
return (b >> bitIndex) & 0x01;
}
private static Bitmap GetBitPlaneRed(Bitmap bitmap, int bitPlaneIndex)
{
Bitmap newBitmap = new Bitmap(bitmap.Width, bitmap.Height);
for (int i = 0; i < bitmap.Width; i++)
{
for (int j = 0; j < bitmap.Height; j++)
{
Color currColor = bitmap.GetPixel(i, j);
int bit = GetBit(currColor.R, bitPlaneIndex);
Color newColor = Color.FromArgb(255, 255 * bit, 255 * bit);
newBitmap.SetPixel(i, j, newColor);
}
}
return newBitmap;
}
看起来,它对MSB (最重要的bit)是正常的,但是对于其他位平面,它并不是那么正确。这是一些结果图片,我要与正确的比较。
编辑的“正确的结果”是一个科学文章写的BPCS隐写,所以我相信这个消息来源。而且,似乎错误在于我保存位平面图像的方式,所以我在这里添加了一些代码,在这里保存我的位平面图像。添加了一个原始图像以及。
private static void SaveBitPlanes()
{
string filePath = "monalisa.jpg";
string ext = System.IO.Path.GetExtension(filePath);
Bitmap bitmap = new Bitmap(filePath);
ImageFormat imageFormat = bitmap.RawFormat;
for (int i = 0; i < 8; i++)
{
Bitmap newBitmap = GetBitPlaneRed(bitmap, i);
newBitmap.Save("bitPlaneRed" + i + ext, imageFormat);
}
}
原始图像:
我的MSB飞机结果:
我的第三位平面测试结果:
我的第7位飞机的结果:
正确的结果:
如有任何帮助或建议,我将不胜感激。
发布于 2017-11-22 22:00:06
在这个问题的存在过程中,我发现了所有重要的东西。
https://stackoverflow.com/questions/47225694
复制相似问题