Цветовое пространство - вопрос RGB и YCbCr

Сейчас я пытаюсь понять, как работает кодировка JPEG, и все выглядит нормально, кроме части преобразования цвета.

Перед попыткой выполнить алгоритм DCT в JPEG изображение преобразуется в цветовое пространство YCbCr. Для меня это по существу означает, что мы просто (по сравнению с исходным изображением RGB) берем часть информации о цвете и удаляем ее при применении преобразования RGB -> YCbCr.

Итак, наши шаги кодирования в целом выглядят как RGB -> YCbCr -> DCT -> Huffman. Декодирование означает обращение этого процесса.

А у меня вопрос - почему изображение (например, созданное и экспортированное в JPEG) остается прежним по цвету, хотя надо сделать обратное YCbCr -> RGB преобразование. Откуда берется удаленная часть информации о цвете или как она обрабатывается?


person Yippie-Ki-Yay    schedule 23.05.2010    source источник


Ответы (2)


Для меня это по сути означает, что мы просто (по сравнению с исходным изображением RGB) берем фрагмент информации о цвете и удаляем его при применении преобразования RGB -> YCbCr.

Никакая информация не удаляется самим преобразованием. Преобразование обратимо в математическом смысле. Например. если вы преобразуете цвет в YCbCr и преобразуете результат обратно в RGB, вы получите тот же цвет. Ведь в идеальном мире.

На практике происходит потеря информации. Предположим, что вы начинаете с трех байтов в RGB. Если вы конвертируете в YCbCr, вы получите три значения, два из которых, а именно Cb и Cr, больше не вписываются в 8 бит. Говоря технически, два представления RGB и YUV имеют разную гамму (http://en.wikipedia.org/wiki/Gamut)

Эта потеря информации, к счастью, редко заметна. Важный побочный узел: Эта вещь с гаммой является нежелательным побочным эффектом и не имеет ничего общего с выбором использования YCbCr в первую очередь.

Смысл использования YCbCr в том, что данные, хранящиеся в Y, являются наиболее важными. Это яркость или значение шкалы серого. Данные в Cb и Cr представляют собой информацию о цвете, так сказать, с вычетом яркости.

Теперь наши глаза не так хорошо улавливают тонкие различия в цвете, но они чувствительны к оттенкам интенсивности. Чтобы использовать это, в jpeg сохраняются только изображения Cb и Cr с низким разрешением, а Y сохраняется с полным разрешением. Существуют разные способы сделать это, наиболее распространенный из которых заключается в том, чтобы исключить каждый второй пиксель из Cb и Cr в x и y. Это уменьшает требования к пространству в четыре раза для Cb и Cr.

Откуда берется удаленная часть информации о цвете или как она обрабатывается

Он не возвращается волшебным образом. Информация утеряна навсегда. Однако, поскольку информация изначально не была столь важной, мы не видим большого количества артефактов.

В jpeg оставшиеся пиксели панелей Cb и Cr аппроксимируются повторным масштабированием плоскости Cb и Cr. Некоторые декодеры просто копируют отсутствующие пиксели, выбирая соседние, другие выполняют линейную интерполяцию.

person Nils Pipenbrinck    schedule 23.05.2010

RGB в YCbCr – это детерминированное, обратимое математическое преобразование. Следовательно, нет «утилизируемой» части.

Иными словами, пиксель RGB имеет то же информационное содержание, что и пиксель YCbCr, точно так же, как «A» и «01000001» являются альтернативными представлениями одной и той же информации, только с другой схемой кодирования.

Пояснение: понижение цветности часто приводит к должно быть выполнено между преобразованием YCbCr -> DCT, и в этом случае информация будет потеряна, но в зависимости от используемого алгоритма (настройки качества) шаг понижения дискретизации может быть «нет».

person msw    schedule 23.05.2010
comment
Существует также этап квантования между преобразованием цвета и DCT, который может быть без потерь, учитывая сегмент DQT, состоящий из всех единиц. - person matja; 07.09.2010