第一种方式:
RGB→YUV{Y= 0.257R+0.504G+0.098B+16U=−0.148R−0.291G+0.439B+128V= 0.439R−0.368G−0.071B+128\footnotesize
RGB \rightarrow YUV
\begin{cases}
Y = \ \ \ 0.257R + 0.504G + 0.098B +16 \\
U = -0.148R - 0.291G + 0.439B + 128 \\
V = \ \ \ 0.439R - 0.368G - 0.071B + 128
\end{cases}
RGB→YUV⎩⎨⎧Y= 0.257R+0.504G+0.098B+16U=−0.148R−0.291G+0.439B+128V= 0.439R−0.368G−0.071B+128 YUV→RGB{R=1.164(Y−16)+1.596(V−128)G=1.164(Y−16)−0.391(U−128)−0.813(V−128)B=1.164(Y−16)+2.018(U−128)\footnotesize
YUV \rightarrow RGB
\begin{cases}
R = 1.164(Y-16) + 1.596(V-128) \\
G = 1.164(Y-16) - 0.391(U-128) - 0.813(V-128) \\
B = 1.164(Y-16) + 2.018(U-128)
\end{cases}YUV→RGB⎩⎨⎧R=1.164(Y−16)+1.596(V−128)G=1.164(Y−16)−0.391(U−128)−0.813(V−128)B=1.164(Y−16)+2.018(U−128) 其中RGB以及YUV取值范围分别为:
R/G/B∈[0,255],Y∈[16,235],U/V∈[16,240]\footnotesize R/G/B∈[0,255],Y∈[16,235],U/V∈[16,240]R/G/B∈[0,255],Y∈[16,235],U/V∈[16,240]若超出取值范围,则直接截断处理。
当前方式出自KeithJack\footnotesize Keith JackKeithJack的书<<VideoDemystified>>(ISBN1−8787−7−09−4)\footnotesize<<Video Demystified>>(ISBN 1-8787-7-09-4)<<VideoDemystified>>(ISBN1−8787−7−09−4),OpenCV\footnotesize OpenCVOpenCV采用的YUV→RGB\footnotesize YUV \rightarrow RGBYUV→RGB的整型系数转换公式正是基于当前方式。
将公式中的YUV\footnotesize YUVYUV和 RGB\footnotesize RGBRGB的取值范围以线性方式统一到[0,255]:\footnotesize \color{red} \textbf [0,255 \textbf]:[0,255]:
RGB→YUV{Y=( 0.257R +0.504G +0.098B +16 −16)∗255235−16=0.2992R+0.5868G+0.1141BU=(−0.148R −0.291G +0.439B +128−16)∗255240−16= −0.1685R−0.3313G+0.4998B+127.5V=( 0.439R −0.368G −0.071B +128−16)∗255240−16=0.4998R−0.4189G−0.0808B+127.5\footnotesize
RGB\rightarrow YUV\begin{cases}
{\color{red}Y}=\left(\ \ \ 0.257R\ \ +0.504G\ \ +0.098B\ \ +16 \ -16\right)*\frac {255} {235-16} \\
\quad = \color{red}\quad 0.2992R + 0.5868G + 0.1141B \\
{\color{red}U}=\left(-0.148R\ \ -0.291G\ \ +0.439B\ \ +128-16\right)*\frac {255}{240-16} \\
\quad =\color{red}\ \ -0.1685R-0.3313G+0.4998B+127.5 \\
{\color{red}V} = \left(\ \ \ 0.439R\ \ -0.368G\ \ -0.071B\ \ +128-16\right)* \frac {255} {240-16} \\
\quad = \color{red}\quad0.4998R-0.4189G-0.0808B+127.5
\end{cases}
RGB→YUV⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧Y=( 0.257R +0.504G +0.098B +16 −16)∗235−16255=0.2992R+0.5868G+0.1141BU=(−0.148R −0.291G +0.439B +128−16)∗240−16255= −0.1685R−0.3313G+0.4998B+127.5V=( 0.439R −0.368G −0.071B +128−16)∗240−16255=0.4998R−0.4189G−0.0808B+127.5 YUV→RGB{R=1.164(235−16255Y+16−16)+1.596(240−16255V+16−128)=0.9997Y+1.402V−178.520=0.9997Y+1402(V−127.4979)G=1.164(235−16255Y+16−16)−0.391(240−16255U+16−128)−0.813(240−16255V+16−128)=0.9997Y−0.3435U+43.792−0.7142V+91.056=0.9997Y−0.3435(U−127.4846)−0.7142(V−127.4937)B=1.164(235−16255Y+16−16)+2.018∗(240−16255+16−128)=0.9997Y+1.7727U−226.016=0.9997Y+1.7727(U−127.4982)\footnotesize
YUV\rightarrow RGB\begin{cases}
{\color{red}R}=1.164\left(\frac{235-16}{255}Y+16-16\right)+1.596\left(\frac{240-16}{255}V+16-128\right) \\
\quad = 0.9997Y+1.402V-178.520=\color{red}0.9997Y+1
402(V-127.4979)\\
{\color{red}G}=1.164\left(\frac{235-16}{255}Y+16-16\right)-0.391\left(\frac{240-16}{255}U+16-128\right)-0.813\left(\frac{240-16}{255}V+16-128\right) \\
\quad =0.9997Y-0.3435U+43.792-0.7142V+91.056 \\
\quad =\color{red}0.9997Y-0.3435(U-127.4846)-0.7142(V-127.4937) \\
{\color{red}B} = 1.164\left(\frac{235-16}{255}Y+16-16\right)+2.018*\left(\frac{240-16}{255}+16-128 \right)\\
\quad = 0.9997Y+1.7727U-226.016 = \color{red}0.9997Y+1.7727(U-127.4982)
\end{cases}
YUV→RGB⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧R=1.164(255235−16Y+16−16)+1.596(255240−16V+16−128)=0.9997Y+1.402V−178.520=0.9997Y+1402(V−127.4979)G=1.164(255235−16Y+16−16)−0.391(255240−16U+16−128)−0.813(255240−16V+16−128)=0.9997Y−0.3435U+43.792−0.7142V+91.056=0.9997Y−0.3435(U−127.4846)−0.7142(V−127.4937)B=1.164(255235−16Y+16−16)+2.018∗(255240−16+16−128)=0.9997Y+1.7727U−226.016=0.9997Y+1.7727(U−127.4982)
第二种方式:
RGB→YUV{Y= 0.299R+0.587G+0.114BU=−0.169R−0.331G+0.500B=0.564(B−Y)V= 0.500R−0.419G−0.081B=0.713(R−Y)\footnotesize
RGB \rightarrow YUV
\begin{cases}
Y = \ \ \ 0.299R + 0.587G + 0.114B\\
U = -0.169R - 0.331G + 0.500B=0.564(B-Y) \\
V = \ \ \ 0.500R - 0.419G - 0.081B=0.713(R-Y)
\end{cases}
RGB→YUV⎩⎨⎧Y= 0.299R+0.587G+0.114BU=−0.169R−0.331G+0.500B=0.564(B−Y)V= 0.500R−0.419G−0.081B=0.713(R−Y) YUV→RGB{R=Y+1.403VG=Y−0.344U−0.714VB=Y+1.770U\footnotesize
YUV \rightarrow RGB
\begin{cases}
R = Y + 1.403V\\
G = Y - 0.344U - 0.714V\\
B = Y + 1.770U
\end{cases}YUV→RGB⎩⎨⎧R=Y+1.403VG=Y−0.344U−0.714VB=Y+1.770U 其中RGB以及YUV取值范围分别为:
R/G/B∈[0,1],Y∈[0,1],U/V∈[−0.5,0.5]\footnotesize R/G/B∈[0,1],Y∈[0,1],U/V∈[-0.5,0.5]R/G/B∈[0,1],Y∈[0,1],U/V∈[−0.5,0.5] 当前方式出自CCIR601\footnotesize CCIR 601CCIR601。
将公式中的YUV\footnotesize YUVYUV和 RGB\footnotesize RGBRGB的取值范围以线性方式统一到[0,255]:\footnotesize \color{red} \textbf [0,255 \textbf]:[0,255]:
RGB→YUV{Y=255(0.299R255+0.587G255+0.114B255)= 0.299R+0.587G+0.114BU=255(−0.169R255−0.331G255+0.5008B255)+255∗0.5=−0.169R−0.331G+0.5008B+128V=255(0.500R255−0.419G255−0.081B255)+255∗0.5= 0.500R−0.419G−0.081B+128\footnotesize
RGB\rightarrow YUV\begin{cases}
{\color{red}Y}=255(0.299\frac {R}{255}+0.587\frac{G}{255} +0.114\frac{B}{255})\\
\quad = \color{red}\ \ \ 0.299R+0.587G+0.114B \\
{\color{red}U}=255(-0.169\frac {R}{255} - 0.331\frac {G}{255} + 0.5008\frac{B}{255}) + 255*0.5 \\
\quad =\color{red}-0.169R-0.331G+0.5008B+128 \\
{\color{red}V} = 255(0.500\frac {R}{255} - 0.419\frac {G}{255} - 0.081\frac{B}{255}) + 255*0.5\\
\quad = \color{red}\ \ \ 0.500R-0.419G-0.081B+128
\end{cases}
RGB→YUV⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧Y=255(0.299255R+0.587255G+0.114255B)= 0.299R+0.587G+0.114BU=255(−0.169255R−0.331255G+0.5008255B)+255∗0.5=−0.169R−0.331G+0.5008B+128V=255(0.500255R−0.419255G−0.081255B)+255∗0.5= 0.500R−0.419G−0.081B+128 YUV→RGB{R=255(Y255+1.403(V255−0.5))=Y+1403(V−128)G=255(Y255−0.344(U255−0.5)−0.714(V255−0.5))=Y−0.344(U−128)−0.714(V−128)B=255(Y255+1.770(U255−0.5))=Y+1.770(U−128)\footnotesize
YUV\rightarrow RGB\begin{cases}
{\color{red}R}=255\left(\frac{Y}{255}+1.403\left(\frac{V}{255}-0.5\right)\right)\\
\quad =\color{red}Y+1403(V-128)\\
{\color{red}G}=255\left(\frac{Y}{255} - 0.344\left(\frac{U}{255}-0.5\right)-0.714\left(\frac{V}{255}-0.5\right)\right) \\
\quad =\color{red}Y-0.344(U-128)-0.714(V-128) \\
{\color{red}B} = 255\left(\frac{Y}{255}+1.770\left(\frac{U}{255}-0.5\right)\right)\\
\quad = \color{red}Y+1.770(U-128)
\end{cases}
YUV→RGB⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧R=255(255Y+1.403(255V−0.5))=Y+1403(V−128)G=255(255Y−0.344(255U−0.5)−0.714(255V−0.5))=Y−0.344(U−128)−0.714(V−128)B=255(255Y+1.770(255U−0.5))=Y+1.770(U−128)
常用方式:
将RGB\footnotesize RGBRGB以及YUV\footnotesize YUVYUV的取值范围都缩放到[0,255]\footnotesize \textbf [0,255 \textbf][0,255]之后的常用公式为:
RGB→YUV{Y= 0.299R+0.587G+0.114BU=−0.169R−0.331G+0.5008B+128V= 0.500R−0.419G−0.081B+128\footnotesize
RGB\rightarrow YUV\begin{cases}
Y= \ \ \ 0.299R+0.587G+0.114B \\
U=-0.169R-0.331G+0.5008B+128 \\
V= \ \ \ 0.500R-0.419G-0.081B+128
\end{cases}
RGB→YUV⎩⎨⎧Y= 0.299R+0.587G+0.114BU=−0.169R−0.331G+0.5008B+128V= 0.500R−0.419G−0.081B+128 YUV→RGB{R=Y+1.403(V−128)G=Y−0.343(U−128)−0.714(V−128)B=Y+1.770(U−128)\footnotesize
YUV\rightarrow RGB\begin{cases}
R=Y+1.403(V-128)\\
G=Y-0.343(U-128)-0.714(V-128) \\
B= Y+1.770(U-128)
\end{cases}
YUV→RGB⎩⎨⎧R=Y+1.403(V−128)G=Y−0.343(U−128)−0.714(V−128)B=Y+1.770(U−128)