YUV 轉 RGB 公式中,YUV 的取值範圍都是0到255嗎?

我按這個說明來:

YUV與RGB相互轉換的公式如下(RGB取值範圍均為0-255)︰

  Y = 0.299R + 0.587G + 0.114B

  U = -0.147R - 0.289G + 0.436B

  V = 0.615R - 0.515G - 0.100B

  R = Y + 1.14V

  G = Y - 0.39U - 0.58V

  B = Y + 2.03U

http://blog.163.com/harris_z/blog/static/5921494820084832313434/於是得到函數:

https://gist.github.com/4286412

完整的代碼在這裡:

https://gist.github.com/4286354

我驚了……居然得到的 RGB 範圍是錯的,有負數!

我還在懷疑我 JavaScript 代碼是不是寫錯了?

於是拿 Python 驗證了一次,發現和 JavaScript 的結果相符。

(https://gist.github.com/4286560)

於是我迷失了……問一下:

YUV 轉 RGB 公式中,YUV 的取值範圍都是0到255嗎?


try this

Y = 0.257R + 0.504G + 0.098B + 16

U = 0.148R - 0.291G + 0.439B + 128

V = 0.439R - 0.368G - 0.071B + 128

B = 1.164(Y - 16) + 2.018(U - 128)

G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)

R = 1.164(Y - 16) + 1.596(V - 128)

from Keith Jacks excellent book "Video Demystified" (ISBN 1-878707-09-4).


從YUV 轉到 RGB 如果值小於0要取0,如果大於255要取255


你好,RGB的取值是0-255,請見圖。至於你說的編程的情況,請原諒我根本看不懂。。。


這種公式,沒有取值範圍就是白搭……

參考這裡:http://zh.wikipedia.org/wiki/YUV#.E8.BD.89.E6.8F.9B

Y, U, V 的取值範圍如下:

得到的 R, G, B 值落在 [-1, 1] 的範圍內。於是把例子稍改了一下成這樣:

https://gist.github.com/4371297


ITU-R BT.601 coding range (Y ranges from 16 to 235. U and V range from 16 to 240)

Extended coding range (Y, U, and V range from 1 to 254)

不同編碼方式下範圍不同


YUV和RGB互轉要考慮的東西有兩個

一個是Matrix,是BT601還是BT709,還是4K時代的BT2020,,Ycgco

不同的matrix的色彩範圍不一樣 數值也有差

第二個是range,YUV里TV和PC顯示器的數值範圍不一樣

8bit位深的情況下

TVrange是16-235(Y)、16-240(UV)

PCrange是0-255

而RGB沒有range之分,全是0-255


我也遇到了這個問題,請問你是怎麼解決的啊?


YUV公式有很多,

包括未量化 : Y (0,255) U (-128,128) V (-128 ,128)

負數取正後: Y (0,255) U (0,255) V (0,255)

量化後 :Y(16,235) U(16,240) V( 16,240 )

關於YUV的公式,除了有BT601/BT709協議,還有BT2020 協議

其中BT601 BT709的YUV是相同的,BT2020的YUV公式和BT601/709不同,但這對於8bitYUV來說三種協議的YUV取值範圍都是相同的,一般用前者轉換就行了。

我這裡貼一下BT601/709的YUVRGB 互轉的公式

未量化

[Y,U,V]T = M[R,G,B]T 其中 M =

0.299 , 0.587, 0.114,

-0.169, - 0.331, 0.5,

0.5, - 0.419 - 0.081

   [R,G,B]T = M[Y,U,V]T 其中 M =

1 0 1.4017

1 -0.3437 -0.7142

1 1.7722 0

YUV量化後 (Y(16,235) U(16,240) V( 16,240 )

  [Y,U,V,1]T = M[R,G,B,1]T 其中 M = [

0.2568, 0.5041, 0.0979, 16

-0.1479, -0.2896, 0.4375, 128

0.4375, -0.3666, -0.0709, 128,

0, 0, 0, 1 ]

  [R,G,B,1]T = M[Y,U,V,1]T M =

1.1644 0 1.6019 -223.5521

1.1644 -0.3928 -0.8163 136.1381

1.1644 2.0253 0 -278.0291

0.0000 0.0000 0.0000 1.0000

詳細可以參考我的博客 YUV與RGB互轉各種公式


正常的YUV,也就是實際使用的YUV是Limit Range的,值域並不是[0,255],而是luma在[16,235],Chroma在[16,240]

所以按照Limit Range標準公式將Full Range([0,255])轉換成RGB越界不是很正常的事么,畢竟本身就越界了


色度空間轉換,出現負值也不是不可能,那就clip到你要的範圍即可。

因為那些轉換係數本身都是有精度限制的,所以不會做真正無損的RGB-&>YUV-&>RGB,了解?


推薦閱讀:

rgb轉為hsl空間為什麼s的轉換要分兩段呢?hsl空間是什麼形狀?
如何理解rgb值的可加性和有限性?如果rgb值超過1(255)該如何處理?
化妝品的顏色為什麼不統一用 HEX 或者 RGB 這類標準的顏色表達方式?
求【24色環】RGB值?

TAG:AdobePhotoshop | RGB | 顏色空間 |