Image processing 为什么我们在将RGB转换为YCBCR时使用复杂的方程而不是简单的方程?
当我在verilog上实现RGB2YCBCR时。我看到了几种将RGB转换为YCBCR的方法。其中一些非常简单。但其他方面则相当复杂 例如,如果我们使用Image processing 为什么我们在将RGB转换为YCBCR时使用复杂的方程而不是简单的方程?,image-processing,colors,rgb,Image Processing,Colors,Rgb,当我在verilog上实现RGB2YCBCR时。我看到了几种将RGB转换为YCBCR的方法。其中一些非常简单。但其他方面则相当复杂 例如,如果我们使用 y = (r >> 2) + (g >> 1) + (b >> 2); 它很容易在硬件上实现 但是有人说 y = (r*4899 + g*9617+ b*1868+ 8192) >> 14 更快吗 我不知道为什么他们有这个方程,为什么复杂的方程比简单的方程好。为什么他们用它来代替那个简单的方程
y = (r >> 2) + (g >> 1) + (b >> 2);
它很容易在硬件上实现
但是有人说
y = (r*4899 + g*9617+ b*1868+ 8192) >> 14
更快吗
我不知道为什么他们有这个方程,为什么复杂的方程比简单的方程好。为什么他们用它来代替那个简单的方程式
p/S:我看到OpenCV也使用那个复杂的。
非常感谢 在带有乘法器和桶形移位器的处理器上,所有这些操作都需要一个时钟周期,第二个公式不能更快(5次运算比7次运算) 这个复杂的方程式是由电视技术标准强制规定的,有历史和技术原因() 颜色空间是一个相当复杂的话题
请注意,第一个公式未规范化:如果输入值在[0,1]范围内,则输出值在[0,10]范围内,您应该除以10。这会使第一个公式慢得多。您好,我读了这篇文章,但我没有找到问题的答案,简单并不意味着正确。这些常数的存在并不是为了让它变得更难,而是为了使它符合标准,你能告诉我为什么我们使用y=(4899R+9617G+1868B+8192)>>14而不是y=0.299R+0.587G+0.114B吗。我认为这是同一个方程。显然,要保持整数运算。如果我做方程y=(153R+300G+74B+512)>>9,你知道吗。@Luanguyen:这不太准确。为什么y=(4899R+9617G+1868B+8192)>>14是正确的?为什么y=(153R+300G+74B+512)>>9不正确?。我认为他们有同样的结果