Использование стеганографии для встраивания данных в коэффициенты поддиапазона DWT

Я проводил дополнительные исследования по теме стеганографии DWT. Я наткнулся на приведенный ниже код в Интернете. Это первый раз, когда я столкнулся с указанием коэффициентов поддиапазонов. У меня есть идея, что делает код, но я хотел бы, чтобы кто-нибудь проверил это!

steg_coeffs = [4, 4.75, 5.5, 6.25, 7];

for jj=1:size(message,2)+1
    if jj > size(message,2)
        charbits = [0,0,0,0,0,0,0,0];
    else
        charbits = dec2bin(message(jj),8)';
        charbits = charbits(:)'-'0';
    end

    for ii=1:8
        bit_count = bit_count + 1;

        if charbits(ii) == 1
            if HH(bit_count) <= 0
                HH(bit_count) = steg_coeffs(randi(numel(steg_coeffs)));
            end
        else
            if HH(bit_count) >= 0
                HH(bit_count) = -1 * steg_coeffs(randi(numel(steg_coeffs)));
            end
        end
    end

Я думаю, что steg_coeffs выбираются коэффициентом поддиапазона HH, где биты будут встроены в эти выбранные коэффициенты. Я погуглил randi и считаю, что он рандомизирует указанные коэффициенты на каждой итерации цикла и встраивает в коэффициенты случайного выбора. я прав?? Спасибо


person Hitmanpaddy    schedule 05.01.2015    source источник


Ответы (1)


Набрав help randi, вы обнаружите, что randi(IMAX) вернет скаляр, который будет целым числом, равномерно распределенным (на основе прнг) в диапазоне 1:IMAX. Проще говоря, он выбирает случайное целое число от 1 до IMAX.

numel(matrix) возвращает общее количество элементов в матрице.

Итак, steg_coeffs(randi(numel(steg_coeffs))) выбирает случайный элемент из steg_coeffs, выбирая случайный индекс от 1 до 5.

Алгоритм встраивания реализован в следующем блоке.

if charbits(ii) == 1
    ...
else
    ...
end

По сути, если вы вставляете 1, коэффициент HH должен быть положительным. Если это не так, замените его одним из steg_coeffs. Точно так же, если вы вставляете 0, коэффициент HH должен быть отрицательным. Если это не так, замените его отрицательным знаком из числа steg_coeffs.

Идея состоит в том, что когда вы извлекаете секрет, все, что вам нужно проверить, это то, является ли коэффициент HH положительным или отрицательным, чтобы узнать, должен ли бит быть 1 или 0.

person Reti43    schedule 05.01.2015
comment
Спасибо Рети43. Как всегда очень понятное объяснение :) - person Hitmanpaddy; 05.01.2015
comment
Привет Рети43. Просто интересно, когда вы говорите, выбирая случайный индекс от 1 до 5, вы имеете в виду, что это может быть любой из steg_coeffs = [4, 4,75, 5,5, 6,25, 7]; или вы имеете в виду, что это может быть 1,2,3,4,5. Я думаю, что это должно быть случайное целое число из массива, то есть 4,75, 6,25 и т. д., но я просто хочу перепроверить! спасибо - person Hitmanpaddy; 05.01.2015
comment
Случайный индекс будет между 1 и 5. Затем вы используете его для доступа к определенным элементам steg_coeffs, например. steg_coeffs(1) = 4, steg_coeffs(2) = 4,75 и т. д. Таким образом, выбирая случайное число от 1 до 5, вы фактически выбираете случайный элемент из 4, 4,75, 5,5, 6,25 и 7. - person Reti43; 05.01.2015
comment
Привет, у меня есть еще один вопрос относительно steg_coeffs. Почему выбраны коэффициенты от 4 до 7. Из того, что я могу понять, посмотрев на коэффициенты HH в Matlab, это связано с конкретным поддиапазоном. Я понимаю, что все 4 поддиапазона имеют разные коэффициенты. Если бы я выбрал, например, HL, должны ли быть разные коэффициенты? Спасибо - person Hitmanpaddy; 13.01.2015
comment
Да, поддиапазоны имеют разные коэффициенты, потому что они описывают разную информацию об изображении. Почему код заменяет любой коэффициент, когда это необходимо, значениями от 4 до 7, может быть указано только намерением автора кода или документом, на котором он основывал свой код. Если бы я предположил, я бы сказал, что коэффициенты HH, как правило, имеют низкие значения, поэтому замена их другими низкими значениями не приведет к сильным искажениям изображения. - person Reti43; 13.01.2015
comment
Большое спасибо. Спасибо Reti43 - person Hitmanpaddy; 14.01.2015