为什么我们在将 RGB 转换为 YCBCR 时使用复杂的方程而不是简单的方程?

Why we use a complex equation when do convert RGB to YCBCR instead of a simple one?

当我在 verilog 上实现 RGB2YCBCR 时。我看到了几种将 RGB 转换为 YCBCR 的方法。其中一些非常简单。但是其他的就比较复杂了。

例如,如果我们使用

y = (r >> 2) + (g >> 1) + (b >> 2);

很容易实现到硬件

但是有人说

y = (r*4899 + g*9617+ b*1868+ 8192) >> 14 

更快???

我不知道为什么他们有这个方程式,也不知道为什么复杂的方程式比简单的方程式更好。以及为什么他们使用它而不是那个简单的等式。

P/S:我看到OpenCV也用那个复数的。 非常感谢!

在带有乘法器和桶形移位器的处理器上,所有这些操作都需要一个时钟周期,第二个公式不能更快(5 次操作与 7 次操作)。

由于历史和技术原因 (https://en.wikipedia.org/wiki/Rec._601),复杂的 方程是电视技术标准强制要求的。

色彩空间是一个相当复杂的话题。


请注意,第一个公式未标准化:如果输入值在 [0,1] 范围内,则输出在 [0, 10] 范围内,您应该除以 10。这将使第一个公式慢得多。