Раздельное Y и UV видеокадра - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть входящая видео текстура в формате Yuv, мне нужно разделить каждый из этих видеокадров на плоскость Y и плоскость UV отдельно.Я не знаю, возможно ли это с ThreeJs или я должен использовать шейдер.Как я мог сделать это с ThreeJS или GLSL?Любая помощь будет оценена

1 Ответ

0 голосов
/ 07 февраля 2019

Да, вам, вероятно, следует реализовать какой-то шейдер для этого, поскольку это очень распараллеливаемая операция.Тем не менее, YUV - это просто формат канала изображения, очень похожий на RGB, за исключением следующего отношения:

  • Y = avg (R, G, B)
  • U = R
  • V = B

Одна из интересных вещей (и вероятное объяснение того, почему разделение Y и UV является вашим требованием) состоит в том, что только Y,у вас есть черно-белое изображение.С помощью UV можно довольно легко определить не только G, но и градиент цветового канала для конвейеров обработки изображений.

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

  1. [1 0 0] * [YUV] ^ T = Y
  2. [[0 1 0], [0 0 1]] * [YUV] ^ T = [UV] ^ T

Шейдеры (действительно обработка на GPU) творит чудеса с линейной алгеброй, и, поскольку разделение можно выразить в виде линейных преобразований, я бы сказал, чтомаршрут.

...