Ниже представлена матрица для преобразования RGB в YCbCr. Подскажите, как мне получить формулу для преобразования YCbCr в RGB? Я имею в виду, что у меня есть значение YCbCr, и я хочу получить от него RGB.
Вопрос
YCbCr в RGB из таблицы матриц
- Вы имеете в виду преобразовать RGB в YCbCr? Вы спрашиваете как выводится формула? В противном случае, я думаю, вы сами ответили на свой вопрос. Steve Tjoa 27.10.2010
- @ Стив: Да, я спрашиваю, как можно вывести формулу? Долгое время я занимался матричной математикой. SunnyShah 27.10.2010
- @ Джейкоб: Нет, это JobWork. :-) SunnyShah 27.10.2010
- Ха-ха, хорошо. Мой ответ может помочь. Jacob 27.10.2010
- Имейте в виду, что это матричное преобразование не учитывает гамма-коррекцию как из sRGB - ›BT.709, так и из BT.709 -› sRGB, что вы обычно хотели бы делать с видео. Использование только этого матричного преобразования имеет смысл только для линейных данных изображения / видео. MoDJ 11.01.2019
Ответы
Ответ 1 · рейтинг 5 · Steve Tjoa
Если вы спрашиваете, как выводится формула, вы можете поискать "системы координат цвета". На этой странице, в частности, есть хорошее обсуждение пространства YCbCr.
Мы знаем, что почти любой цвет можно представить как линейную комбинацию красного, зеленого и синего. Но вы можете преобразовать (или "повернуть") эту систему координат так, чтобы три базовых элемента больше не были RGB, а были чем-то другим. В случае YCbCr слой Y является слоем яркости, а Cb и Cr - двумя слоями цветности. Cb более тесно коррелирует с синим, а Cr более тесно коррелирует с красным.
YCbCr часто предпочтительнее, потому что зрительная система человека более чувствительна к изменениям яркости, чем количественно эквивалентные изменения цветности. Следовательно, кодер изображения, такой как JPEG, может сжимать два слоя цветности больше, чем слой яркости, что приводит к более высокому коэффициенту сжатия.
РЕДАКТИРОВАТЬ: Я неправильно понял вопрос. (Вы должны отредактировать его, чтобы уточнить.) Вот формула для получения RGB из YCbCr, взятая из выше ссылка:
r = 1.0 * y' + 0 * cB + 1.402 * cR
g = 1.0 * y' - 0.344136 * cB - 0.714136 * cR
b = 1.0 * y' + 1.772 * cB + 0 * cR
Ответ 2 · рейтинг 2 · Jacob
Я не собираюсь учитывать часть round, но поскольку M выглядит обратимым:
Полученный вектор можно округлить.
Ответ 3 · рейтинг 1 · I82Much
http://www.fourcc.org/fccyvrgb.php имеет преобразование YUV в RGB.
Ответ 4 · Валерий Заподовников
Преобразуйте в float и примените (поскольку коэфф. BT.709-2):
https://en.wikipedia.org/wiki/YCbCr#ITU-R_BT.709_conversion
1 0 1.5748
1 -0.1873 -0.4681
1 1.8556 0
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Преобразование изображения из CMYK в RGB в Java
- Что не так с моим приложением pygame?
- Разница между цветами с одинаковым значением rgb в пространстве sRGB и пространстве CIE RGB
- Каковы отдельные байты WP7s ContentReadyEventArgs.ImageStream
- Вычислить среднее расстояние от точки до сегмента линии и от сегмента линии до сегмента линии
- Формулы для расчета географической близости