Я тщательно изучил пару статей, в которых люди пытались вставить бит сообщения в слабый край изображения, полученного обнаружением края Канни и сравниваемого с подстановкой LSB.Они утверждают, что имеют высокий PSNR со стеганографией на основе обнаружения канни.
Однако, когда я смотрю на форму PSNR или MSE, то похоже, что PSNR должен быть одинаковым для обоих типов стеганографии, поскольку в конечном итоге мы находим разность для каждого пикселя.
Итак, если мы собираемся скрыть какую-либо информацию в любом пикселе, то на самом деле не имеет значения, где вы скрываете информацию сообщения. (За исключением случая, когда мы скрываем больше бит сообщения в младшем бита, чем слабыйграницы стенографии на основе Канни, но это должно уменьшить количество битов сообщений, которые могут быть скрыты в подходе на основе Канни)
Ниже приведен код, который я написал для клеветы PSNR и MSE.
Isчто-то не так с моим кодом или моей концепцией, опубликованной в 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);
}