【图像处理基础】RGB与YUV互转之间的一些问题

好久没有写博客,都开始有点生疏了

前几天做了有关RGB于YUV之间互转的研究,先不用管RGB和YUV的格式什么,这里只讲转换

1.浮点运算:直接根据变量取值做算术运算

注意:关于下面的两个公式,我在网上发现了很多这种公式,但是权重都有点不一样,这里我只写我自己用的一种并且成功实现的。

(1)RGB->YUV

根据有关规定,有相应的转置矩阵

下面这个是我实际中使用的算法根据

Y = 0.299R  + 0.587G + 0.114B
U = -0.169R - 0.331G + 0.5B+128
V = 0.500R  - 0.419G - 0.081B +128

(2)YUV->RGB

下面这个是我实际中使用的算法根据

R = Y + 1.403(V-128)
G = Y - 0.343(U-128) - 0.714(V-128)
B = Y + 1.770(U-128)

上面可以看到里面有浮点运算,这会导致耗时很长。下面对浮点计算进行优化

2.移位运算

(1)RGB->YUV

Y = ((R << 6) + (R << 3) + (R << 2) + R + (G << 7) + (G << 4) + (G << 2) + (G << 1) + (B << 4) + (B << 3) + (B << 2) + B) >> 8;
U = (-((R << 5) + (R << 2) + (R << 1)) - ((G << 6) + (G << 3) + (G<< 1)) + ((B << 6) + (B << 5) + (B << 4))) >> 8;
V = ((R << 7) + (R << 4) + (R << 3) + (R << 2) + (R << 1) - ((G << 7) + (G << 2)) - ((B << 4) + (B << 3) + (B << 1))) >> 8;

(2)YUV->RGB

R = ((Y << 8) + ((V << 8) + (V << 5) + (V << 2))) >> 8;
G = ((Y << 8) - ((U << 6) + (U << 5) + (U << 2)) - ((V << 7) + (V << 4) + (V << 2) + V)) >> 8;
B = ((Y << 8) + (U << 9) + (U << 3)) >> 8;

移位运算相对来说可以避免浮点运算的时间消耗。后续想起来什么再补充吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章