У меня есть изображение в оттенках серого. Я сделал 8x8 блоков и вычислил каждый из своих DCT. Я хочу квантовать коэффициенты DCT, а затем заменить их младшие разряды моими секретными битами сообщения. Как именно я квантую коэффициенты? Должен ли я использовать матрицу квантования, используемую JPEG? Как определить значения такой матрицы квантования?квантование изображения dct для стеганографии
ответ
Возможно, вы захотите установить уровень качества наивысшим (наименьшие значения в матрице квантования), чтобы модифицированный LSB каждого коэффициента исказил данные изображения как минимум.
Для кодирования:
Вам необходим доступ к значениям DCT после квантования и до энтропийного кодирования. Там вы можете изменить LSB. Вероятно, вы должны изменить только значения ненулевого коэффициента или сделать файл сжатого изображения намного большим и более искаженным. Таким образом, вы, вероятно, сможете кодировать 20-30 бит на блок DCT.
Для декодирования:
Вам нужно будет сделать обратное и получить доступ к значениям DCT сразу после энтропийного декодирования и перед стадией деквантования.
Чтобы вычислить общее количество битов, доступных для сообщения, используйте следующий пример:
Для размера изображения VGA (640x480), который закодирован в формате 4: 2: 0 (субдискретизированных цвета в обоих измерениях), у вас будет 40 x 30 = 1200 MCU. Каждый MCU имеет 6 блоков DCT (4Y, 1Cr, 1Cb). Это в общей сложности 7200 блоков DCT. Если каждый блок кодирует в среднем 25 коэффициентов (разумный уровень качества), то ваше сообщение может составлять в общей сложности 7200x25 = 180000 бит.
Кроме того, я думаю, было бы неплохо пропустить коэффициент постоянного тока, потому что любая ошибка в коэффициенте постоянного тока будет распространяться по всем следующим блокам. – onemasse
хорошая точка; спасибо за упоминание. – BitBank