2016-02-14 7 views
2

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

вот вопросы:

1-Reasearch бумаги и вопрос в Интернете все они используют размер 8х8 блока из изображения для DCT..what я должен делать, если разрешение изображения не полностью разделяется на 8x8 блоки, как 724 х 520.
520/8 = 65, но 724/8 = 90,5

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

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

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

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

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

из различных научно-исследовательских работ: enter image description here

+0

Не могли бы вы назвать документы, которые включают ваши выдержки? Для первого я нашел [Мондал и др. al (2015) - новый подход к основанию изображения Стеганография с использованием псевдослучайной последовательности Функция генератора и коэффициенты DCT] (http://www.mecs-press.org/ijcnis/ijcnis-v7-n3/IJCNIS-V7-N3- 6.pdf) и для второго [D Singla et. al (2012) - Безопасность данных с использованием LSB & DCT Steganography In Images] (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.300.8610&rep=rep1&type=pdf#page=152). Я могу расширить свой ответ о них, но они не касаются сохранения изображения в jpeg. – Reti43

+0

да эти два .. –

+0

так что они о ??? –

ответ

4

JPEG стеганографии

Если вы хотите, чтобы сохранить изображение в формате JPEG, вы должны следовать процесс кодирования jpeg. К сожалению, бумаги, которые я читал, не оправдывают этого. Весь процесс состоит в следующем (wiki summary из 182-page specifications book):

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

Есть на самом деле a lot more details involved, такие как заголовки, раздел маркеров, особенности того, как хранить коэффициенты постоянного и переменного тока и т.д. Затем, есть аспекты, которые стандарт только свободно определены и их реализация может варьироваться между кодеками , например, алгоритм подвыборки, таблицы квантования и энтропийное кодирование.Тем не менее, большинство программных продуктов подчиняются стандарту JFIF и могут быть прочитаны различными программами. Если вы хотите, чтобы ваш файл jpeg делал то же самое, будьте готовы написать сотни (до тысячи) строк кода только для кодировщика. Вам лучше заимствовать кодировщик, который уже опубликован в Интернете, чем писать свои собственные. Вы можете начать с поиска в libjpeg, который написан на языке C и составляет основу многих других кодеков jpeg, их C# implementation или даже версии 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. Внутренне, кодер будет следить за ватные строки/столбцов , так что декодер будет отбрасывать их после восстановления. Выбор значения пикселя для этих фиктивных строк/столбцов зависит от вас, но вам советуют не использовать постоянное значение, потому что это приведет к ringing artifacts, что связано с тем, что преобразование Фурье прямоугольной волны является sinc функция.

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

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

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

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

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

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

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

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

+0

Могу ли я сделать LSB в JPEG напрямую, не переходя в DCT ?? –

+0

Я реализую его в C#, и есть метод для сохранения объекта bitmab() и может сделать что-то вроде этого coverimage.Save («D: \\ steg.jpeg», ImageFormat.Jpeg); так что я все еще должен делать весь процесс для JPEG, и если это возможно, что мне делать? например, взять данные DCT для встраивания, взять IDCT и сохранить его обратно в растровый объект и использовать функцию сохранения ??? –

+0

добавил изображение в конце question.it из 2 научных статей. Другие тоже говорят такие вещи, чтобы взять DCT вставлять данные, затем применять IDCT, а созданный образ создает. Вот почему я был так смущен, как делать весь процесс JPEG по моему slef и какие коэффициенты касаются LSB. –

 Смежные вопросы

  • Нет связанных вопросов^_^