Каковы входные значения для DCT?

Поэтому я пытаюсь написать простую программу для преобразования изображений в формате bmp в jpeg. Как вы, возможно, знаете, есть 3 основных этапа, включающих сжатие JPEG, DCT, квантование и энтропийное кодирование. Я хочу записать значения, вычисленные на каждом из этих промежуточных этапов, в файл.

Теперь мой вопрос: после того, как я преобразовал значение RGB каждого пикселя в формат YUV и сохранил его в 3 отдельных двумерных массива, рассчитывается ли DCT для каждого из этих массивов? Таким образом, давая мне 3 разных массива с DCT на них? Если это правильно, то следующим шагом будет квантование каждого из массивов, соответствующих Y, U и V. Затем энтропийное кодирование должно быть применено к каждому из этих двумерных массивов.

Как эти 3 массива объединяются / записываются в файл, чтобы их можно было читать как файлы .jpeg?

3

Решение

Прежде всего, я предлагаю вам скачать технические характеристики jpeg.

Вы должны вычислить DCT независимо для каждого цветового канала: поэтому для цветового пространства YUV вы должны вычислить один DCT для каждого блока Y 8×8, один для U и один для V-канала.

В большинстве случаев каналы U и V субдискретизированы: это означает, что для каждого U и V. есть 2 или 4 блока Y.

После применения DCT вы можете квантовать каждый DCT: для разных каналов обычно нужны разные таблицы квантования (спецификации jpeg предлагают правильные таблицы).

Затем результат квантования кодируется с использованием алгоритма Хаффмана: вы можете выгружать в поток jpeg каждый цветовой канал с чередованием (от 1 до 4 блоков Y с последующим блоком 1 U и 1 V) или в линейном режиме (сначала все блоки Y затем все U, а затем V).

Поток jpeg может содержать теги RST, которые повторно синхронизируют декодирование в случае потери байтов.

Но вам действительно нужно иметь спецификации jpeg для выполнения этой задачи.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]