Я думаю, что ваши результаты не являются неожиданными, и что вы, вероятно, переоценивает эффект, потому что PSNR логарифмическая функция. Я подключу некоторые цифры, чтобы показать вам этот эффект, но я сделаю некоторые предположения о деталях, о которых вы не упомянули.
Я предполагаю, что вы вставляете только 1 бит на пиксель, и это младший бит, а не второй, третий или любой другой.
Это означает, что если бит переворачивается, квадратная ошибка между оригиналом и измененным пикселем равна 1. Если мы предположим поток случайных бит, мы ожидаем изменить половину пикселей, в которые мы вставляем нашу информацию. Все это может быть инкапсулировано в следующие две функции.
mse = @(bits, x, y) (0.5 * bits)/(x * y)
psnr = @(signal, noise) = 10 * log10(signal^2/noise)
Где bits
это общее число битов вложения, x
и y
размер изображения, signal
максимальное значение интенсивности в исходном изображении (я использовал 255) и noise
является MSE.
Предположим, что изображение 512x512. Для простоты рассмотрим также PSNR только для одного цветового компонента.
5000 бит: 68,3368 дБ
4500 бит: 68,7944 дБ
PSNR увеличить: 0,6696%
100000 бит: 55,3265 дБ
90000 бит: 55,7841 дБ
PSNR увеличение: 0,8271%
В самом деле, вы можете получить общую символическую форму.
mse_orig = (bits/2)/(x * y) = bits/(2 * x * y)
mse_steg = (0.9 * bits/2)/(x * y) = 0.9 * mse_orig
psnr = 10 * log10(signal^2/mse)
percent_change = 100 * (psnr_steg - psnr_orig)/psnr_orig
Используя свойство log(a/b) = log(a) - log(b)
, выше, может быть упрощен до:
percent_change = 100 * (-log10(0.9)/log10(2* x * y * signal^2/bits))
Где bits
это количество бит встраивать с регулярным LSB вложения (то есть, 5000 и НЕ 4500).
Вы говорите, что вы встраиваете в LSB, но ваше значение * близко * к исходному значению. Разумеется, LSB может быть только нулевым или одним, так как вы можете быть * близко * - наверняка, самый дальний из вас, возможно, один? Кроме того, почему вы хотите увеличить PSNR? Какие инструменты/среда вы используете? –
Наше предположение состоит в том, что, поскольку наш предложенный алгоритм имеет на 10% меньше бит LSB, а затем обычный LSB, общий PSNR должен быть выше обычного LSB. (он показывает только увеличение на 1%). Я действительно смущен. Также я использую Matlab – 130wde