【圖像處理基礎】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;

移位運算相對來說可以避免浮點運算的時間消耗。後續想起來什麼再補充吧。

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