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