Самые быстрые приближенные методы для преобразования YUV в RGBA? - PullRequest
2 голосов
/ 28 марта 2011

Я ищу самый быстрый способ преобразования одного массива YUV в массив RGBA .Например, для массива YCbYCr, представляющего собой последовательность байтов:

YCbYCr = Luma0, Cb0, Luma1, Cr0, Luma2, ...

, где 8-битные компоненты с синей и 8-битной цветоразностной цветовой разницей дискретизируются с периодом 2, но 8-битной яркостьюпроизводится выборка с периодом 1. Например:

  1. пиксель изображения (0,0) имеет luma0, Cr0-красную разность цветов, Cb0-синяя разность цветов
  2. пиксель изображения (0,1) имеет яркость 1, цветность Cr0 красный, цветность Cb0 синий
  3. пиксель изображения (0,2) имеет яркость 2, цветность Cr1 красный, цвет Cb1 синий цвет
  4. пиксель (0,3) имеет luma3, Cr1-красную разность цветов, Cb1-синюю цветность
  5. и т. д.

Должен быть получен массив RGBA:

RGBA = R0, G0, B0, A0, R1, G1, ...

, где все элементы являются беззнаковыми символами, а все биты каждого A # равны нулю.

Компонентом Luma в YCbYCr является 0..255 беззнаковых символа, Cb и Cr - -127 .. + 126 знаковых символов.Существует стандартный подход - умножение матриц, но оно очень медленное для приложений реального времени и работает с числами с плавающей запятой.Я ищу быстрый приближенный численный метод.

1 Ответ

3 голосов
/ 28 марта 2011

Самая большая экономия вычислений, которую вы, вероятно, получите, просто выполняя вычисления с фиксированной запятой, а не с плавающей запятой. Вероятно, это будет на порядок быстрее (по предположению).

Вы также можете воспользоваться избыточностью вкладов цветности с субдискретизацией. Учитывая, что умножение полной матрицы имеет вид:

R     a b c   Y
G  =  d e f . Cb
B     g h i   Cr

Вы можете вычислить частичную сумму цветности наполовину так часто:

R'    b c   
G' =  e f . Cb
B'    h i   Cr

, а затем просто добавьте его к вкладу яркости при полной скорости вывода:

R     R'     a
G  =  G'  +  d . Y
B     B'     g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...