查看“︁YUV”︁的源代码
←
YUV
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{noteTA |G1=IT |1=zh-hans:模拟;zh-hant:類比; |2=zh-hans:信号;zh-hant:訊號; }} {{Expand|time=2012-01-31T22:59:54+00:00 }} [[File:YUV_UV_plane.png|thumb|305px|U-V color plane範例,Y value = 0.5,代表RGB色域(color gamut)]] '''YUV''',是一種[[顏色]][[編碼]]方法。常使用在各個影像處理元件中。 YUV在對照片或影片編碼時,考慮到人類的感知能力,允許降低色度的頻寬。 YUV是編譯true-color顏色空間(color space)的種類,Y'UV, YUV, [[YCbCr]],[[YPbPr]]等專有名詞都可以稱為YUV,彼此有重疊。「Y」表示'''[[流明|明亮度]]'''(Luminance、Luma),「U」和「V」則是'''[[色度 (色彩学)|色度]]'''、'''[[濃度 (色彩學)|濃度]]'''(Chrominance、Chroma), Y′UV, YUV, YCbCr, YPbPr所指涉的範圍,常有混淆或重疊的情況。從歷史的演變來說,其中YUV和Y'UV通常用來編碼電視的類比訊號,而YCbCr則是用來描述數位的影像訊號,適合影片與圖片壓縮以及傳輸,例如MPEG、JPEG。 但在現今,YUV通常已經在電腦系統上廣泛使用。 Y'代表明亮度(luma; brightness)而U與V儲存色度(色訊; chrominance; color)部分; 亮度(luminance)記作Y,而Y'的prime符號記作伽瑪校正。 YUV Formats分成兩個格式: * 緊縮格式(packed formats):將Y、U、V值儲存成Macro Pixels陣列,和[[RGB]]的存放方式類似。 * 平面格式(planar formats):將Y、U、V的三個分量分別存放在不同的矩陣中。 緊縮格式(packed format)中的YUV是混合在一起的,對於YUV4:2:2格式而言,用緊縮格式很合適的,因此就有了UYVY、YUYV等。平面格式(planar formats)是指每Y份量,U份量和V份量都是以獨立的平面組織的,也就是說所有的U份量必須在Y分量後面,而V份量在所有的U份量後面,此一格式適用於採樣(subsample)。平面格式(planar format)有I420(4:2:0)、YV12、IYUV等。 == 歷史 == [[File:Barn-yuv.png|thumb|150px|圖像中的Y', U,和V組成]] Y'UV的發明是由於[[彩色電視]]與[[黑白電視]]的過渡時期<ref>Maller, Joe. [http://joemaller.com/fcp/fxscript_yuv_color.shtml RGB and YUV Color] {{webarchive|url=https://web.archive.org/web/20080224143835/http://www.joemaller.com/fcp/fxscript_yuv_color.shtml |date=2008-02-24 }}, ''FXScript Reference''</ref>。黑白視訊只有Y(Luma,Luminance)視訊,也就是灰階值。到了彩色電視規格的制定,是以YUV/[[YIQ]]的格式來處理彩色電視圖像,把UV視作表示彩度的C(Chrominance或Chroma),如果忽略C訊號,那麼剩下的Y(Luma)訊號就跟之前的黑白電視訊號相同,這樣一來便解決彩色電視機與黑白電視機的相容問題。Y'UV最大的優點在於只需佔用極少的頻寬。 因為UV分別代表不同顏色訊號,所以直接使用R與B訊號表示色度的UV。 也就是說UV訊號告訴了電視要偏移某象素的顏色,而不改變其亮度。 或者UV訊號告訴了顯示器使得某個顏色亮度依某個基準偏移。 UV的值越高,代表該像素會有更飽和的顏色。 彩色圖像記錄的格式,常見的有[[RGB]]、YUV、[[CMYK]]等。彩色電視最早的構想是使用RGB三原色來同時傳輸。這種設計方式是原來黑白頻寬的3倍,在當時並不是很好的設計。RGB訴求於人眼對色彩的感應,YUV則著重於視覺對於亮度的敏感程度,Y代表的是亮度,UV代表的是彩度(因此黑白電影可省略UV,相近於RGB),分別用Cr和Cb來表示,因此YUV的記錄通常以Y:UV的格式呈現。 == 常用的YUV格式 == 為節省頻寬起見,大多數YUV格式平均使用的每像素位數都少於24位元。主要的抽样(subsample)格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和YCbCr 4:4:4。YUV的表示法稱為A:B:C表示法: *4:4:4表示完全取樣。 *4:2:2表示2:1的水平取樣,垂直完全採樣。 *4:2:0表示2:1的水平取樣,垂直2:1採樣。 *4:1:1表示4:1的水平取樣,垂直完全採樣。 最常用Y:UV記錄的比重通常1:1或2:1,DVD-Video是以YUV 4:2:0的方式記錄,也就是我們俗稱的'''I420''',YUV4:2:0並不是說只有U(即Cb), V(即Cr)一定為0,而是指U:V互相援引,時見時隱,也就是說對於每一個行,只有U或者V份量,如果一行是4:2:0的話,下一行就是4:0:2,再下一行是4:2:0...以此類推。至於其他常見的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420等。 === YUY2及常见表示方法=== '''YUY2'''(和'''YUYV''')格式為像素保留Y,而UV在水平空間上相隔二個像素採樣一次(Y0 U0 Y1 V0),(Y2 U2 Y3 V2)…其中,(Y0 U0 Y1 V0)就是一个macro-pixel(宏像素),它表示了2个像素,(Y2 U2 Y3 V2)是另外的2个像素。 以此类推,再如:Y41P(和Y411)格式为每个像素保留Y分量,而UV分量在水平方向上每4个像素采样一次。一个宏像素为12个字节,实际表示8个像素。图像数据中YUV分量排列顺序如下:(U0 Y0 V0 Y1 U4 Y2 V4 Y3 Y4 Y5 Y6 Y7)… === YVYU UYVY === '''YVYU''', '''UYVY'''格式跟YUY2類似,只是排列順序有所不同。'''Y211'''格式是Y每2個像素採樣一次,而UV每4個像素採樣一次。'''AYUV'''格式則有一Alpha通道。 === YV12 === '''YV12'''格式與'''IYUV'''類似,每個像素都提取Y,在UV提取時,將圖像2 x 2的矩陣,每個矩阵提取一個U和一個V。YV12格式和I420格式的不同處在V平面和U平面的位置不同。在YV12格式中,V平面緊跟在Y平面之後,然後才是U平面(即:YVU);但I420則是相反(即:YUV)。'''NV12'''與YV12類似,效果一樣,YV12中U和V是連續排列的,而在NV12中,U和V就交錯排列的。 排列举例: '''2*2图像'''YYYYVU; '''4*4图像'''YYYYYYYYYYYYYYYYVVVVUUUU == 轉換 == YUV與RGB的轉換公式: U和V元件可以被表示成原始的R,G,和B(R,G,B为γ预校正后的): <math> \begin{array}{rll} Y &= 0.299 * R + 0.587 * G + 0.114 * B \\ U &= -0.169 * R - 0.331 * G + 0.5 * B + 128 \\ V &= 0.5 * R - 0.419 * G - 0.081 * B + 128 \end{array} </math> 如一般順序,轉移元件的範圍可得到: <math> \begin{array}{rll} Y & \in \left[0, 255\right] \\ U & \in \left[0, 255\right] \\ V & \in \left[0, 255\right] \end{array} </math> 在逆轉關係上,從YUV到RGB,可得 <math> \begin{array}{rll} R & = Y + 1.13983 * (V - 128) \\ G & = Y - 0.39465 * (U - 128) - 0.58060 * (V - 128) \\ B & = Y + 2.03211 * (U - 128) \end{array} </math> 取而代之,以矩陣表示法(matrix representation),可得到公式: <math> \begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} 0.299 & 0.587 & 0.114 \\ -0.169 & -0.331 & 0.5 \\ 0.5 & -0.419 & -0.081 \end{bmatrix} \begin{bmatrix} R \\ G \\ B \end{bmatrix} + \begin{bmatrix} 0 \\ 128 \\ 128 \end{bmatrix} </math> <math> \begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1 & -0.00093 & 1.401687 \\ 1 & -0.3437 & -0.71417 \\ 1 & 1.77216 & 0.00099 \end{bmatrix} \begin{bmatrix} Y \\ U - 128 \\ V - 128 \end{bmatrix} </math> == YUV轉RGB == function RGB* YUV444toRGB888(Y, U, V);將YUV format移轉成簡單的RGB format並可以用浮點運算實作: === Y'UV444 === 大多數YUV格式平均使用的每像素位數都少於24位元。YUV444是最逼真的格式,一格不刪(24 bits),即每4個Y,配上4個U,還有4個V;YUV422則是在UV格式上減半,即每4個Y,配2個U,2個V;YUV420則是在UV上減至1/4之格式,即每4個Y,配1個U,再配1個V。 這些公式是基於NTSC standard; :<math>Y' = 0.299 \times R + 0.587 \times G + 0.114 \times B</math> :<math>U = -0.147 \times R - 0.289 \times G + 0.436 \times B</math> :<math>V = 0.615 \times R - 0.515 \times G - 0.100 \times B</math> 在早期的非[[SIMD]](non-SIMD)構造中,floating point arithmetic會比fixed-point arithmetic稍慢,所以有一替代公式如下: :<math>C = Y' - 16</math> :<math>D = U - 128</math> :<math>E = V - 128</math> 使用前面的係數並且用clip()註明切割的值域是0至255,如下的公式是從Y'UV到RGB (NTSC version): :<math>R = clip(( 298 \times C + 409 \times E + 128) >> 8)</math> :<math>G = clip(( 298 \times C - 100 \times D - 208 \times E + 128) >> 8)</math> :<math>B = clip(( 298 \times C + 516 \times D + 128) >> 8)</math> 注意:上述的公式多暗示為YCbCr. 雖然稱為YUV,但應該嚴格區分YUV和YCbCr這兩個專有名詞有時並非完全相同。 ITU-R版本的公式差異: :<math>Y = 0.299 \times R + 0.587 \times G + 0.114 \times B + 0</math> :<math>Cb = -0.169 \times R - 0.331 \times G + 0.499 \times B + 128</math> :<math>Cr = 0.499 \times R - 0.418 \times G - 0.0813 \times B + 128</math> :<math>R = clip(Y + 1.402 \times (Cr - 128))</math> :<math>G = clip(Y - 0.344 \times (Cb - 128) - 0.714 \times (Cr - 128))</math> :<math>B = clip(Y + 1.772 \times (Cb - 128))</math> ITU-R標準YCbCr(每一通道8位元)至RGB888: Cr = Cr - 128; Cb = Cb - 128; :<math>R = Y + Cr + Cr>>2 + Cr>>3 + Cr>>5</math> :<math>G = Y - (Cb>>2 + Cb>>4 + Cb>>5) - (Cr>>1 + Cr>>3 + Cr>>4 + Cr>>5)</math> :<math>B = Y + Cb + Cb>>1 + Cb>>2 + Cb>>6</math> === Y'UV422 === : Input:讀取Y'UV的4bytes(u, y1, v, y2) : Output:寫入RGB的6bytes(R, G, B, R, G, B) u = yuv[0]; y1 = yuv[1]; v = yuv[2]; y2 = yuv[3]; 以此一資訊可以剖析出regular Y'UV444格式而成為2 RGB pixels info: rgb1 = Y'UV444toRGB888(y1, u, v); rgb2 = Y'UV444toRGB888(y2, u, v); <!--:<math>{RGB}_1 = \begin{bmatrix}y_1 & u & v\end{bmatrix}</math> :<math>{RGB}_2 = \begin{bmatrix}y_2 & u & v\end{bmatrix}</math>--> Y'UV422可被表達成Y'UY'2 [[FourCC]]格式碼。意思是2 pixels將被定義成each macropixel (four bytes) treated in the image. [[File:Yuv422 yuy2.svg|350px]] === Y'UV411 === // Extract YUV components u = yuv[0]; y1 = yuv[1]; y2 = yuv[2]; v = yuv[3]; y3 = yuv[4]; y4 = yuv[5]; rgb1 = Y'UV444toRGB888(y1, u, v); rgb2 = Y'UV444toRGB888(y2, u, v); rgb3 = Y'UV444toRGB888(y3, u, v); rgb4 = Y'UV444toRGB888(y4, u, v); <!--:<math>{YUV} = \begin{bmatrix}u & y_1 & y_2 & v & y_3 & y_4\end{bmatrix}</math> : :<math>{RGB}_1 = \begin{bmatrix}y_1 & u & v\end{bmatrix}</math> :<math>{RGB}_2 = \begin{bmatrix}y_2 & u & v\end{bmatrix}</math> :<math>{RGB}_3 = \begin{bmatrix}y_3 & u & v\end{bmatrix}</math> :<math>{RGB}_4 = \begin{bmatrix}y_4 & u & v\end{bmatrix}</math>--> 所以結果會得到4 RGB像素的值 (4*3 bytes) from 6 bytes. This means reducing size of transferred data to half and with quite good loss of quality. === YV12 === The Y'V12的格式相當類似Y'UV420p,但U與V資料反轉:Y'跟隨著V, U殿後。Y'UV420p與Y'V12使用相同演算法。許多重要的編碼器都採用YV12空間存儲視頻:MPEG-4([[x264]],[[XviD]],[[DivX]]),DVD-Video存儲格式MPEG-2,MPEG-1以及MJPEG。 將Y'UV420p轉換成RGB Height = 16; Width = 16; Y'ArraySize = Height × Width; //(256) Y' = Array[7 × Width + 5]; U = Array[(7/2) × (Width/2) + 5/2 + Y'ArraySize]; V = Array[(7/2) × (Width/2) + 5/2 + Y'ArraySize + Y'ArraySize/4]; RGB = Y'UV444toRGB888(Y', U, V); == 註釋 == <references/> == 參見 == * [[色度抽樣]] == 外部連結 == * [http://www.fourcc.org/fccyvrgb.php RGB/YUV Pixel Conversion] {{Wayback|url=http://www.fourcc.org/fccyvrgb.php |date=20220302185953 }} * [http://www.fourcc.org/yuv.php Explanation of many different formats in the YUV family] {{Wayback|url=http://www.fourcc.org/yuv.php |date=20140529202052 }} * [http://www.poynton.com/Poynton-video-eng.html Charles Poynton - Video engineering] {{Wayback|url=http://www.poynton.com/Poynton-video-eng.html |date=20170707001443 }} * [http://www.mikekohn.net/stuff/image_processing.php YUV422 to RGB using SSE/Assembly] {{Wayback|url=http://www.mikekohn.net/stuff/image_processing.php |date=20220324035530 }} {{色彩空間}} [[Category:色彩空間]]
该页面使用的模板:
Template:Expand
(
查看源代码
)
Template:NoteTA
(
查看源代码
)
Template:Wayback
(
查看源代码
)
Template:Webarchive
(
查看源代码
)
Template:色彩空間
(
查看源代码
)
返回
YUV
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息