Цветовое пространство - RGB и YCbCr вопрос - PullRequest
3 голосов
/ 23 мая 2010

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 23 мая 2010

Для меня это, по сути, означает, что мы просто (по сравнению с исходным 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. Некоторые декодеры просто копируют отсутствующие пиксели, выбирая соседку, другие делают линейную интерполяцию.

1 голос
/ 23 мая 2010

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

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

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

...