视频帧的Y和UV分别设置

时间:2019-02-06 10:33:45

标签: three.js glsl yuv

我有一个Yuv格式的传入视频纹理,我需要将此视频帧中的每个帧分别分为Y平面和UV平面。我不知道Threejs是否可行,还是应该使用着色器。我该如何用threejs或glsl做到这一点? 任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

是的,您可能应该为此实现某种着色器,因为它是非常可并行的操作。也就是说,YUV只是一种图像通道格式,与RGB非常相似,但具有以下关系:

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

有趣的事情之一(可能是为什么需要分离Y和UV的原因之一)是,只有Y,您就可以获得黑白图像。使用紫外线,不仅可以轻松确定G,还可以轻松确定图像处理管线的颜色通道梯度。

有时候,会有一些额外的编码,但是通常归结为归一化。您的视频流可能具有更具体的编码,其中还包括一些压缩。尽管如此,渠道的分离应该很容易:

  1. [1 0 0] * [Y U V] ^ T = Y
  2. [[0 1 0],[0 0 1]] * [Y U V] ^ T = [U V] ^ T

着色器(真正的GPU处理)可以通过线性代数实现奇观,并且由于分离可以表示为线性变换,所以我会走这条路线。