Pull to refresh

Comments 13

Всё это интересно, конечно, но в чем месседж? Статья выглядит вырванной откуда-то — ни постановки проблемы, ни выводов. Анализа тоже не увидел, есть обзор.
UFO just landed and posted this here
> Единственной операцией, при которой происходит потеря информации, является квантизация.
С чего бы это?!
А downsampling?!
И если вы не очень понимаете процесс, то «color space» — это все цвета, которые в этом пространстве присутствуют; если меняется пространство, то и меняется и состав хранимых цветов. Если наглядно, то для RGB цвета находятся внутри треугольника, а для YCbCr внутри полуэлипса — без потерь не получится одну фигуру вписать в другую.

То, что у вас написано в «Разделение слоёв» в самом JPEG уже реализовано: яркостная компонента (ч/б изображение) хранится в высоком разрешении, а уточняющая цветовая компонента (как правило) в более низком.
Сам по себе переход между RGB и YCrCb взаимно-однозначен и обратим. Потери там только вычислительные, особенно если нужно работать с целыми числами.
Что за полуэллипс — не очень понятно.
в теории, при бесконечной точности и отрицательных значениях — да, взаимно-однозначен и обратим
на практике — нет :-)

Если вы видели визуализацию всяких цветовых пространств sRGB, Adobe RGB и т.п., то там рисуют некоторый сложный цветовой градиент, а на нём треугольники этих цветовых пространств — потому что координат три, а это «срез» по одинаковой яркости. В YCrCb, первая — яркость, а все допустимые цвета на этой плоскости заданы расстоянием до двух «полюсов» — т.е. всё что лежит внутри пересечения двух окружностей. Да, полуэлипс тут не при чём. Но суть не меняется — это довольно разные по своей форме пространства и без существенных потерь данных/точности преобразования между ними невозможны.
Если имеется в виду хроматическая диаграмма, то охват связанных друг с другом RGB/YCrCb пространств будет совпадать (с точностью до вычислительных погрешностей). YCrCb это представление тех же самых цветов в других координатах. На диаграмме абсолютных цветов будет та же самая фигура.
«вычислительная погрешность» в данном случае довольно велика
Формулы преобразования в JPEG
Y  =  0.299 * R + 0.587 * G + 0.114 * B +   0;
Cb = -0.169 * R - 0.331 * G + 0.500 * B + 128;
Cr =  0.500 * R - 0.419 * G - 0.081 * B + 128;

R = Y + 1.402 * (Cr - 128);
G = Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128);
B = Y + 1.772 * (Cb - 128);

Отрицательных значений при преобразованиях не образуется, погрешности малы.

А теперь посчитайте, во что переходят значения RGB (0, 0, 0) и (0, 0, 1) при переводе в YCbCr.
Я подскажу: если мы работаем исключительно с 8-битными целыми, то в обоих случаях будет (128, 0, 0) из-за округления.


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

Вы верно написали:


Сам по себе переход между RGB и YCrCb взаимно-однозначен и обратим.


С точки зрения линейной алгебры, это простая смена базиса.


Но с практической точки зрения, есть нюанс. Значения компонент RGB могут изменяться в строго определённом диапазоне: пространство у нас не R^3, а [0, 255]^3 (или любой другой диапазон). Если взять точку M из этого кубика, то при переходе из RGB в YCrCb точка M останется внутри него. А вот обратное уже неверно. Взяв произвольную точку из YCrCb, можно вылезти за пределы допустимых значений RGB.


А учитывая, что в дальнейшем сжатие компонент Y, Cr и Cb идёт независимо, если повышенный риск получить недопустимые значения.

А еще я писал
Потери там только вычислительные, особенно если нужно работать с целыми числами.

Про единичку туда-сюда из-за округлений — это очевидно.
Мои возражения были против того, что меняется форма цветового пространства (нет, не меняется).
Если мы можем варьировать исходные пиксели… Мы не знаем, использует ли какой-нибудь софт такую технологию.

Пример такого варьирования — размытие (blur). Тот же Photoshop это умеет. Но, поскольку этапы цветоделения и DCT могут выполняться без потерь (вопреки предыдущим комментариям, это именно без потерь, т.к. точность даже float с запасом перекрывает точность кодирования исходного изображения), варьирование исходных пикселей математически эквивалентно варьированию неквантованных DCT-коэффициентов — мы сводим задачу к подбору матрицы квантования. К такому подбору, кстати, сводится и варьирование квантованных коэффициентов для улучшения сжатия.
Sign up to leave a comment.

Articles