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.14VG = Y - 0.39U - 0.58V
B = Y + 2.03Uhttp://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 + 128V = 0.439R - 0.368G - 0.071B + 128B = 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/4371297ITU-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 | 顏色空間 |