与LSB相比,基于Canny边缘检测的速记技术能否真正提供良好的PSNR?

时间:2018-12-28 06:41:10

标签: c# image-processing edge-detection steganography

我仔细阅读了这两篇文章,在这篇文章中,人们试图将消息位嵌入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);
        }

0 个答案:

没有答案