2015-01-16 2 views
2

У меня есть 14-битное изображение, которое я хотел бы преобразовать в цветовое пространство YCrCb. Насколько мне известно, конверсии написаны для 8-битных изображений. Например, когда я использую функцию matlab rgb2ycrcb, и я конвертирую ее обратно в rgb, тогда все будет белым. Для меня очень важно не потерять никакой информации. Я хочу сделать это, чтобы отделить яркость от цветности и сделать некоторый процесс и преобразовать его обратно в RGB.14 бит RGB до YCrCb

ответ

2

Стандарт YCbCr для преобразования количества из цветового пространства RGB был специально разработан для 8-битных изображений цветных каналов. Масштабирующие коэффициенты и константы настраиваются таким образом, чтобы вход был 24-битным RGB-изображением (8 бит на канал. Кстати, ваши записи запутывают. Обычно вы используете xx-bit RGB, чтобы представить, сколько бит , который должен представлять изображение).

Одно из предложений, которое я мог бы сделать, - это перемасштабировать ваши каналы независимо, чтобы они шли от для всех каналов. rgb2ycbcr может принимать входы с плавающей запятой, если они находятся в диапазоне [0-1]. Судя по вашему контексту, у вас есть 14 бит, представляющих каждый цветной канал. Таким образом, вы можете просто сделать это, учитывая, что изображение хранится в A и выходные данные будут сохранены в B:

B = rgb2ycbcr(double(A)/(2^14 - 1)); 

Вы можете обрабатывать ваши цветности и яркости компонентов с использованием выходного rgb2ycbcr. Имейте в виду, что компоненты также будут нормализованы между [0-1]. Сделайте свою обработку, затем конвертируйте обратно с помощью ycbcr2rgb, затем перетащите ваши выходы на 2^14 - 1, чтобы вернуть изображение в 14-бит RGB на канал. Предполагая, что Bout это ваш вывод изображения после обработки в цветовом пространстве YCbCr, сделайте следующее:

C = round((2^14 - 1)*ycbcr2rgb(Bout)); 

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

Смежные вопросы