我仔细阅读了这两篇文章,在这篇文章中,人们试图将消息位嵌入Canny边缘检测所接收到的Image的弱边缘中,并与LSB替代进行比较。他们声称通过基于Canny边缘检测的隐写技术具有很高的PSNR。
但是,当我查看PSNR或MSE的论坛时,这两种隐写方法的PSNR看起来应该相同,因为最终我们找到了每个像素的差异。
因此,如果我们要在任何像素中隐藏任何信息,那么在何处隐藏消息信息并不重要(除非我们在LSB中隐藏比Canny弱边缘更多的消息位)基于速记的方式,但它应减少在基于Canny的方法中可以隐藏的消息位数)
下面是我编写的用于计算PSNR和MSE的代码。
我的代码或与MSE相关的概念有什么问题吗?
public static double GetMSEForImages(Bitmap originalImage, Bitmap stegoImage)
{
double mseR = 0;
double mseG = 0;
double mseB = 0;
double msE;
for (int i = 0; i < originalImage.Width; i++)
{
for (int j = 0; j < originalImage.Height; j++)
{
mseR += Math.Pow(originalImage.GetPixel(i, j).R - stegoImage.GetPixel(i, j).R, 2);
mseG += Math.Pow(originalImage.GetPixel(i, j).G - stegoImage.GetPixel(i, j).G, 2);
mseB += Math.Pow(originalImage.GetPixel(i, j).B - stegoImage.GetPixel(i, j).B, 2);
}
}
var averageMSERGB = (mseR + mseG + mseB) / 3;
msE = averageMSERGB / (originalImage.Width * originalImage.Height);
return msE;
}
public static double GetPSNRForImage(Bitmap orginialImage, Bitmap stegoImage)
{
double PSNR = 0;
double mse = GetMSEForImages(orginialImage, stegoImage);
PSNR = 10 * Math.Log10(Math.Pow(255, 2) / mse);
return Math.Truncate(PSNR);
}