Я путаюсь с пиковым отношением сигнал/шум (PSNR) между исходным изображением и зашифрованным изображением. Как я знаю, более высокое значение PSNR означает лучшее качество изображения. Я попытался проверить и рассчитать значение PSNR. Я использовал технику LSB в текстовой стеганографии.PSNR изображения в matlab
- Я попытался вставить 100 символов в изображение. Это приводит к 69,9696 дБ.
- Я попытался вставить 5 символов в изображение. Это приводит к 68 дБ.
Теперь, что я думаю, что в моей голове есть:
Если более символов встроить в изображение, производят меньшее значение PSNR, или меньше символов встраивать в изображения, производить высокое значение PSNR?
Больше символов вставлять, значит больше манипуляции с пикселем. Значит, значение PSNR становится меньше?
Кто-нибудь может мне сказать или исправить ошибку?
------ Прикрепленный Coding ------
Str = 'after this, I tried calculate the PSNR value with original image and stego image. 100 character which is read from file is embedded into image, higher PSNR value. 5 character, less PSNR value.';%many character
%Str = 'a'; %one character
Str=uint8(Str); %converting to 8 bit numbers for proper calculation
fprintf('%d ', Str);
fprintf('\n');
stringLength = length(Str);
x=imread('lena.bmp'); %reading the image file
x=uint8(x); %conversion to 8 bit
[x_row,x_col]=size(x);
numPixelsInImage = numel(x);
bitsPerLetter = 7; % For ASCII, this is 7.
numPixelsNeededForString = stringLength * bitsPerLetter;
binaryAsciiString = dec2bin(Str)'
whos binaryAsciiString
binaryAsciiString = binaryAsciiString(:)'
stegoImage = x;
stegoImage(1:numPixelsInImage) = bitset(stegoImage(1:numPixelsInImage), 1, 0);
oneIndexes = find(binaryAsciiString == '1');
stegoImage(oneIndexes) = bitset(stegoImage(oneIndexes), 1, 1);
imwrite(uint8(stegoImage),'stego123.bmp')
fprintf('\nPSNR: %9.7f dB\n\n', psnr(x,stegoImage));
После этого я попытался вычислить значение PSNR с исходным изображением и Stego изображения. 100 символов, которые считываются из файла, встроен в изображение, более высокое значение PSNR. 5 символов, меньше значения PSNR.
Вот почему я смущаюсь.
--- Вот мой PSNR код ---
function [PSNR,mse]=psnr(X,Y)
% function [PSNR,mse]=psnr(X,Y)
% Peak signal to noise ratio of the difference between images and the
%mean square error
% If the second input Y is missing then the PSNR and MSE of X itself
% becomes the output (as if Y=0).
if nargin<2, D=X;
else
if any(size(X)~=size(Y)), error('The input size is not equal to each other!'); end
D=X-Y;
end
mse=sum(D(:).*D(:))/prod(size(X));
PSNR=10*log10(255^2/mse);
Я просто вызовите функцию PSNR и напечатать значение PSNR исходного изображения и Stego изображения.
многочисленных символов я вставлять, я получаю 51.1687256 дБ. Один символ, который я вставляю, я получаю 51.1578686 дБ.
Можете сказать, почему?
Проблема с количественными мерами заключается в том, что качество изображения, определяемое метриками типа PSNR, и то, как мы воспринимаем качество изображения, - это две совершенно разные вещи. Обычно вы не должны полагаться на количественные показатели для оценки качества изображения, поскольку это субъективно и зависит от человека. – rayryeng
Да, сэр. Я знаю, что значение PSNR является одним из измерений для проверки качества изображения. Я просто хочу проверить, добавляет ли больше символов в изображение, создает более высокий PSNR? Если сравнивать с меньшим символом, вставляемым в изображение. – kenreal
Да, я ожидал бы, что PSNR будет ниже, когда закодировано больше символов. Если вы хотите получить более конкретный ответ, вам нужно будет разместить небольшой примерный код, который показывает эффект, который вы наблюдаете. – Tokkot