Стеганография изображений на основе LSB-DCT

Я работаю над стеганографией изображений на основе LSB-DCT, в которой мне нужно применить LSB к коэффициентам DCT изображения для встраивания данных в JPEG. Я новичок во всем этом. Поэтому искал и читал некоторые исследовательские работы, которых всем не хватает информации о процессе после DCT.i также прочитал много вопросов и ответов о stackoverflow и запутался еще больше.

вот вопросы:

Документ с одним исследованием и рассматриваемый в Интернете, все они используют размер блока 8x8 из изображения для DCT ... что мне делать, если разрешение изображения не полностью разделяется на блоки 8x8, такие как 724 x 520.
520/8 = 65, но 724/8 = 90,5

2-если у меня много блоков и некоторая информация, которую нужно скрыть, которая, как мы полагаем, может уместиться в 5 блоков .. мне все еще нужно взять dct из оставшихся блоков и idct.

3-мне нужно применить квантование после dct, а затем применить lsb, или я могу применить lsb напрямую ??

В 4-х исследовательских документах ничего не говорится о том, чтобы не трогать квантованные коэффициенты dct со значениями 0 и 1 и первое значение .. теперь я должен использовать их или нет ?? и почему бы нет?? Я понял, что это 0, потому что это были высокочастотные компоненты и они были удалены в JPEG для сжатия .. и я не делаю никакого сжатия .. так могу ли я использовать его и по-прежнему создавать тот же файл JPEG ???

5-в квантовании мы делим коэффициенты DCT с матрицей квантования и округляем значения. Наоборот, я должен умножить матрицу квантования с коэффициентами DCT просто .. не отменять для округления ???

Для комментария к DCT, а затем к IDCT:

Из разных исследовательских работ:  введите описание изображения здесь


person Sameer Azeem    schedule 14.02.2016    source источник
comment
Не могли бы вы назвать документы, в которых есть ваши выписки? Для первого я нашел Mondal et. al (2015) - Новый подход к стеганографии на основе изображений с использованием функции генератора псевдослучайных последовательностей и коэффициентов DCT и для второго D Singla et. al (2012 г.) - Безопасность данных с помощью стеганографии LSB и DCT в изображениях. Я могу рассказать о них подробнее, но они не о сохранении изображения в формате jpeg.   -  person Reti43    schedule 17.02.2016
comment
так о чем они ???   -  person Sameer Azeem    schedule 17.02.2016


Ответы (1)


Стеганография JPEG

Если вы хотите сохранить изображение в формате jpeg, вы должны следовать процессу кодирования jpeg. К сожалению, в большинстве статей, которые я читал, говорится, что это не справедливо. Полный процесс выглядит следующим образом (краткое содержание вики 182-страничная книга спецификаций):

  1. Преобразование RGB в YCbCr (необязательно),
  2. субдискретизация каналов цветности (необязательно),
  3. Разбиение блока 8x8,
  4. повторное центрирование значения пикселя,
  5. DCT,
  6. квантование на основе степени сжатия / качества,
  7. упорядочить коэффициенты по зигзагообразной схеме, и
  8. энтропийное кодирование; наиболее часто с использованием кодирования Хаффмана и кодирования длин серий (RLE).

На самом деле существует гораздо больше деталей, такие как заголовки, маркеры разделов, особенности хранения коэффициентов постоянного и переменного тока и т. д. Кроме того, есть аспекты, которые в стандарте определены лишь в общих чертах, и их реализация может варьироваться в зависимости от кодеков, например, алгоритм субдискретизации, таблицы квантования и энтропийное кодирование. Тем не менее, большинство программ соответствуют общему стандарту JFIF и могут быть прочитаны различными программами. Если вы хотите, чтобы ваш файл jpeg делал то же самое, будьте готовы написать сотни (примерно до тысячи) строк кода только для кодировщика. Лучше одолжить кодировщик, который уже был опубликован в Интернете, чем писать свой собственный. Вы можете начать с изучения libjpeg, написанного на C и составляющего основу многих других кодеков jpeg, его реализация C # или даже Версия Java, вдохновленная им.

В некотором псевдокоде процесс кодирования / декодирования можно описать следующим образом.

function saveToJpeg(pixels, fileout) {
    // pixels is a 2D or 3D array containing your raw pixel values
    // blocks is a list of 2D arrays of size 8x8 each, containing pixel values
    blocks = splitBlocks(pixels);
    // a list similar to blocks, but for the DCT coefficients
    coeffs = dct(blocks);
    saveCoefficients(coeffs, fileout);
}

function loadJpeg(filein) {
    coeffs = readCoefficients(filein);
    blocks = idct(coeffs);
    pixels = combineBlocks(blocks);
    return pixels;
}

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

function embedSecretToJpeg(pixels, secret, fileout) {
    blocks = splitBlocks(pixels);
    coeffs = dct(blocks);
    modified_coeffs = embedSecret(coeffs, secret);
    saveCoefficients(modified_coeffs, fileout);
}

function extractSecretFromJpeg(filein) {
    coeffs = readCoefficients(filein);
    secret = extractSecret(coeffs);
    return secret;
}

Если ваше изображение обложки уже в формате jpeg, нет необходимости загружать его с помощью декодера в пиксели, а затем передавать его кодировщику, чтобы встроить ваше сообщение. Вы можете сделать это вместо этого.

function embedSecretToJpeg(pixels, secret, filein, fileout) {
    coeffs = readCoefficients(filein);
    modified_coeffs = embedSecret(coeffs, secret);
    saveCoefficients(modified_coeffs, fileout);
}

Что касается ваших вопросов, то кодировщик / декодер должен позаботиться о 1, 2, 3 и 5, если вы не пишете его самостоятельно.

Вопрос 1. Как правило, вы хотите заполнить изображение необходимым количеством строк / столбцов, чтобы ширина и высота делились на 8. Внутренне кодировщик отслеживает заполненные строки / столбцы, чтобы декодер отбросил их после восстановления. Выбор значения пикселя для этих фиктивных строк / столбцов зависит от вас, но вам не рекомендуется использовать постоянное значение, поскольку это приведет к артефакты звонка, которые связаны с тем, что преобразование Фурье прямоугольной волны является функцией sinc.

Вопрос 2. Хотя вы измените только несколько блоков, процесс кодирования требует, чтобы вы преобразовали их все, чтобы их можно было сохранить в файл.

Вопрос 3. Вам необходимо квантовать DCT-коэффициенты с плавающей запятой, поскольку они сохраняются в файл без потерь. Вы можете изменить их по своему усмотрению после этапа квантования.

Вопрос 4: никто не запрещает вам изменять какой-либо коэффициент, но вы должны помнить, что каждый коэффициент влияет на все 64 пикселя в блоке. Коэффициент DC и низкочастотные переменные вносят самые большие искажения, так что вы можете держаться от них подальше. Более конкретно, из-за способа хранения коэффициентов постоянного тока изменение одного из них будет распространять искажение на все последующие блоки.

Поскольку большинство высокочастотных коэффициентов равны 0, они эффективно сжимаются с помощью RLE. Изменение коэффициента 0 может изменить его на 1 (если вы выполняете базовую замену LSB), что нарушит это эффективное сжатие.

Наконец, некоторые алгоритмы хранят свой секрет в любых ненулевых коэффициентах и ​​пропускают любые нули. Однако, если вы попытаетесь изменить 1, оно может измениться на 0, и в процессе извлечения вы вслепую пропустите его чтение. Следовательно, такие алгоритмы не подходят ни к каким коэффициентам со значением 1 или 0.

Вопрос 5: при декодировании вы просто умножаете коэффициент на соответствующее значение таблицы квантования. Например, коэффициент DC равен 309,443, а квантование дает round(309.443 / 16) = 19. Бит округления здесь является частью с потерями, что не позволяет вам восстановить 309,433. Так что обратное просто 19 * 16 = 304.

Другое использование DCT в стеганографии

Частотные преобразования, такие как DCT и DWT, могут использоваться в стеганографии для внедрения секрета в частотную область, но не обязательно для сохранения стего-изображения в формате jpeg. Этот процесс состоит из пикселей -> DCT -> коэффициентов -> изменения коэффициентов -> IDCT -> пикселей, которые вы отправляете получателю. Таким образом, здесь имеет значение выбор формата. Если вы решите сохранить свои пиксели в формате jpeg, ваш секрет в коэффициентах DCT могут быть нарушены другим уровнем квантования из кодировки jpeg.

person Reti43    schedule 14.02.2016
comment
Могу ли я сделать LSB в JPEG напрямую, не переходя в DCT? - person Sameer Azeem; 17.02.2016
comment
Я реализую его на C #, и есть метод для bitmab-объекта save (), который может делать что-то вроде этого coverimage.Save (D: \\ steg.jpeg, ImageFormat.Jpeg); так что мне все еще нужно делать весь процесс для JPEG, и если это возможно, что мне делать? например, взять данные вставки DCT, взять IDCT и сохранить его обратно в объект растрового изображения и использовать функцию сохранения ??? - person Sameer Azeem; 17.02.2016
comment
добавил изображение в конце вопроса. это из 2 исследовательских работ. и другие тоже говорят такие вещи, чтобы взять данные для встраивания DCT, затем применить IDCT и создать изображение stegno. вот почему я был так сбит с толку, как выполнить весь процесс JPEG построение моим слэфом и какие коэффициенты потрогать для LSB. - person Sameer Azeem; 17.02.2016
comment
@SameerAzeem Я обновил свой ответ, чтобы охватить две рассматриваемые статьи. См. Последний раздел для уточнения. Я не знаю ни одного кодировщика на C #, который делал бы именно то, что вы хотите. Однако я описал в псевдокоде, как изменить существующий кодировщик / декодер в соответствии с вашими потребностями. - person Reti43; 17.02.2016
comment
Я просто хочу выполнить LSB на DCT и сохранить JPEG. Поэтому собираюсь использовать кодировщик / декодер. О бумаге, он записывает в DCT, затем применяет объявление LSB, а затем снова IDCT. Разве IDCT не уничтожает сообщение ?? - person Sameer Azeem; 17.02.2016
comment
После квантования коэффициентов block = round(idct2(coeffs0 * qTable)); coeffs1 = round(dct2(block) / qTable) должно привести к coeffs0 == coeffs1. Итак, нет, IDCT не должен уничтожать сообщение. Однако вы выполняете квантование и кодировщик, выполняющий квантование, могут не быть одним и тем же. Если вы используете DCT (RGB), а кодировщик делает это в RGB - ›YCbCr -› DCT (YCbCr) или с более высокой степенью сжатия, ваш секрет может не сохраниться. - person Reti43; 17.02.2016