カム センサーのデバッグの過程で、yuv 関連の関数ポイントに遭遇することは避けられません。デバッグ効果では yuv イメージをダンプする必要があり、プレビューでは yuv を変換して表示する必要があります。
ここでは、主に yuv の基本的な概念、分類基準、サンプリング、および保存形式の記録を示します。
この記事は、主にインターネット上のブログを参照し、yuv の知識を整理して記録し、参照リンクを添付します。
目次
YUVツール
まずはyuv画像を様々な形式で開けるツールをご紹介 無料で使いやすく、URLも添付してあります。
YUVとは
一般的なカラー モデルのうち、RGBは主に電子システムで色を表現および表示するために使用され、CMYK印刷 4 色モードはカラー印刷に使用され、YUVはヨーロッパのテレビ システムで採用されているカラー コード方式です。
YUV を使用する利点は 2 つあります。
- YUV は、主にカラー ビデオ信号の伝送を最適化するために使用され、古い白黒テレビと下位互換性があります。この機能は、テレビ信号で使用されます。
- YUVは、データの合計サイズがRGB形式よりも小さいことです(ただし、YUV444では、RGB888のように24ビットです)
YUV の細分化には、 Y'UV 、YUV 、YCbCr 、YPbPrなどの種類 があり、その中でYCbCrは主にデジタル信号に使用されます。
YCbCr は、World Digital Organization のビデオ標準の開発プロセスにおける ITU-R BT1601 提案の一部であり、実際には YUV をガンマ経由で複製したものです。このうち、Y は YUV の Y と同じ意味で、Cb や Cr も色を指しますが、表現方法が異なります。YUV ファミリーの中で、YCbCr はコンピューター システムで最も広く使用されているメンバーであり、その適用分野は非常に広く、JPEG、MPEG、および H264 はすべてこの形式を使用します。このうち、Cr は RGB 入力信号の赤の部分と RGB 信号の輝度値の差を反映し、Cb は RGB 入力信号の青の部分と RGB 信号の輝度値の差を反映します。いわゆる色差信号。
このうち、Y は輝度成分、Cb は青の彩度成分、Cr は標準の YUV のレプリカである赤の彩度成分を指します。
一般的に言えば、YUV は主にYCbCrを指します。以下、YCbCrをYUVと称する。
同じ絵のカラー絵、Y成分、V成分、U成分
YUVのサンプリング、分類、および保存形式
分類
サンプリング
多くの種類の YUV サンプリングがあり、一般的に使用されるのは 444、422、420 などです。人間の目はUやVよりもYに敏感であるため、複数のYコンポーネントがUVのセットを共有できる場合があります。これにより、スペースを大幅に節約し、品質を損なうことはありません。
データ量の小さいものから大きいものまで、YUV 420 、 YUV 422 、YUV 444です。
取得方法を視覚的に表すために 3 つの図を使用します。黒い点はピクセルの Y コンポーネントを表し、白抜きの円はピクセルの UV コンポーネントを表します。
- YUV 4:4:4 サンプリング、各 Y は一連の UV コンポーネントに対応します。
4:4:4 フォーマット、24 ビット/ピクセル
合計データ ボリューム サイズ = w*h*3、スペースを節約しない
- YUV 4:2:2 サンプリング、2 つの Y ごとに一連の UV コンポーネントを共有します。
4:2:2 フォーマット、16 ビット/ピクセル
合計データ ボリューム サイズ = w*h*2、yuv444 と比較して 1/3 のスペースを節約
- YUV 4:2:0 サンプリング、4 つの Y ごとに一連の UV コンポーネントを共有します。
4:2:0 フォーマット、12 ビット/ピクセル
合計データ ボリューム サイズ = w*h*1.5、yuv444 と比較して 1/2 のスペースを節約
基本的なストレージ形式
ストレージ形式は、次の 3 つのカテゴリに分類できます。
- 平面: YUV の 3 つのコンポーネントは別々に格納されます。最初にすべての Y、次にすべての U(V)、次にすべての V(U) を格納します。
- Packed: YUV の 3 つのコンポーネントはすべてインターリーブされ、YUV は次のように順番に格納されます。
- Semi Planar: Y コンポーネントは個別に保存され、UV コンポーネントはインターリーブされて保存されます。すべての Y が最初に保存され、残りの UV はインターリーブされて保存されます。
- 最初の 2 つの方法の特性を組み合わせて、Y コンポーネントは個別に保存され、UV はインターリーブされて保存されます。
パックされた YUV422
2 つの連続する Y コンポーネントごとに UV 空間が共有され、YUV はインターリーブされて格納されます。
UYVY422(COLOR_FormatYUV422PackedPlanar)。
パックされた YUV420
連続する 4 つの Y コンポーネントごとに UV 空間が共有され、yuv はインターリーブされて格納されます。
かんなYUV422
2 つの連続する Y コンポーネントごとに UV 空間を共有し、最初にすべての Y、次に U(V)、最後に V(U) を格納します。
YUV422P(COLOR_FormatYUV422Planar)。
かんなYUV420
連続する 4 つの Y コンポーネントごとに UV 空間が共有されます。すべての Y を最初に格納し、次に U(V)、最後に V(U) を格納します。、
YUV420P(COLOR_FormatYUV422Planar)。
セミプレーナー YUV422
2 つの連続する Y コンポーネントごとに UV 空間を共有します。すべての Y を最初に格納し、次に UV インターリーブ ストレージを格納します。
YUV422SP(COLOR_FormatYUV422SemiPlanar)。
セミプレーナー YUV420
連続する 4 つの Y コンポーネントごとに UV 空間が共有されます。すべての Y を最初に格納し、次に UV インターリーブ ストレージを格納します。
YUV422SP(COLOR_FormatYUV422SemiPlanar)。
派生ストレージ形式
I420 -- YUV 420 プレーナー
I420 は YUV 420 Planar の一種です。YUV コンポーネントは、最初に Y、次に U、最後に V のように別々に保存されます。
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
U U U
U U U
U U U
V V V
V V V
V V V
YV12 -- YUV 420 平面
YV12 は YUV 420 Planar の一種で、YUV コンポーネントは別々に保存されます。最初は Y、次に V、最後に U です。
I420 とは異なり、YV12 は最初に V、次に U です。
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
V V V
V V V
V V V
U U U
U U U
U U U
NV12 -- YUV 420 セミプレーナー
NV12 は YUV 420 Semi-Planar の一種です。Y コンポーネントは個別に保存され、UV コンポーネントはインターリーブされます。
UVを並べる時はまずU、次にV。
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
U V U V U V
U V U V U V
U V U V U V
NV21 -- YUV 420 セミプレーナー
NV21 は YUV 420 Semi-Planar の一種で、Y コンポーネントは個別に保存され、UV コンポーネントはインターリーブされて保存されます。
NV12との違いは、UVを配置するときはVが先でUが先。
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
V U V U V U
V U V U V U
V U V U V U
I422 -- YUV 422 平面
I422 は YUV 422 Planar の一種です. YUV コンポーネントは、最初に Y、次に U、最後に V のように別々に保存されます。
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
U U U U U U
U U U U U U
U U U U U U
V V V V V V
V V V V V V
V V V V V V
YV16 -- YUV 422 平面
YV16 は YUV 422 Planar の一種で、YUV コンポーネントは別々に保存されます。最初は Y、次に V、最後に U です。
I422 とは異なり、YV16 は最初に V、次に U です。
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
V V V V V V
V V V V V V
V V V V V V
U U U U U U
U U U U U U
U U U U U U
NV16 -- YUV 422 セミプレーナー
NV16 は YUV 422 Semi-Planar の一種で、Y コンポーネントは個別に保存され、UV コンポーネントはインターリーブされて保存されます。
UVを並べる時はまずU、次にV。
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
U V U V U V
U V U V U V
U V U V U V
U V U V U V
U V U V U V
U V U V U V
NV61 -- YUV 422 セミプレーナー
NV61 は YUV 422 Semi-Planar の一種で、Y コンポーネントは個別に保存され、UV コンポーネントはインターリーブされて保存されます。
UVを並べるときは、まずV、次にU。
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
V U V U V U
V U V U V U
V U V U V U
V U V U V U
V U V U V U
V U V U V U
YUVY -- YUV 422 パック インターリーブ
YUVY は YUV 422 Interleaved の一種です。
実際には、Interleaved は Packed に属しますが、422 では、Interleaved を使用する方がより鮮明です。
Packed 内では、YUV の配列順序は YUVY であり、2 つの Y が 1 セットの UV を共有しています。
Y U V Y Y U V Y Y U V Y
Y U V Y Y U V Y Y U V Y
Y U V Y Y U V Y Y U V Y
Y U V Y Y U V Y Y U V Y
Y U V Y Y U V Y Y U V Y
Y U V Y Y U V Y Y U V Y
VYUY -- YUV 422 パック インターリーブ
VYUY は YUV 422 Interleaved の一種です。
Packed 内では、YUV の配列順序は VYUY であり、2 つの Y が 1 セットの UV を共有しています。
V Y U Y V Y U Y V Y U Y
V Y U Y V Y U Y V Y U Y
V Y U Y V Y U Y V Y U Y
V Y U Y V Y U Y V Y U Y
V Y U Y V Y U Y V Y U Y
V Y U Y V Y U Y V Y U Y
UYVY -- YUV 422 パック インターリーブ
UYVY は YUV 422 Interleaved の一種です。
Packed 内では、YUV の配置順序は UYVY であり、2 つの Y が 1 セットの UV を共有しています。
U Y V Y U Y V Y U Y V Y
U Y V Y U Y V Y U Y V Y
U Y V Y U Y V Y U Y V Y
U Y V Y U Y V Y U Y V Y
U Y V Y U Y V Y U Y V Y
U Y V Y U Y V Y U Y V Y
I444 -- YUV 444 プランナー
I444 は YUV 444 Plannar の一種です。
YUV コンポーネントは、最初に Y、次に U と個別に保存されます。
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
U U U U U U
U U U U U U
U U U U U U
U U U U U U
U U U U U U
U U U U U U
V V V V V V
V V V V V V
V V V V V V
V V V V V V
V V V V V V
V V V V V V
YV24 -- YUV 444 プランナー
YV24 は YUV 444 Plannar の一種であり、YUV コンポーネントは、最初に Y、次に V、最後に U のように別々に保存されます。
I444 とは異なり、YV24 は V を最初に配置します。
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
V V V V V V
V V V V V V
V V V V V V
V V V V V V
V V V V V V
V V V V V V
U U U U U U
U U U U U U
U U U U U U
U U U U U U
U U U U U U
U U U U U U
NV24 -- YUV 444 セミプレーナー
NV24 は YUV 444 Semi-Planar の一種で、Y コンポーネントは個別に保存され、UV コンポーネントはインターリーブされて保存されます。
UVを配置するとUから始まります。
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
U V U V U V U V U V U V
U V U V U V U V U V U V
U V U V U V U V U V U V
U V U V U V U V U V U V
U V U V U V U V U V U V
U V U V U V U V U V U V
NV42 -- YUV 444 セミプレーナー
NV42 は YUV 444 Semi-Planar の一種で、Y コンポーネントは個別に保存され、UV コンポーネントはインターリーブされて保存されます。
UVを並べるとVから始まります。
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
V U V U V U V U V U V U
V U V U V U V U V U V U
V U V U V U V U V U V U
V U V U V U V U V U V U
V U V U V U V U V U V U
V U V U V U V U V U V U
YUV 444 パック
Y U V Y U V Y U V Y U V Y U V Y U V
Y U V Y U V Y U V Y U V Y U V Y U V
Y U V Y U V Y U V Y U V Y U V Y U V
Y U V Y U V Y U V Y U V Y U V Y U V
Y U V Y U V Y U V Y U V Y U V Y U V
Y U V Y U V Y U V Y U V Y U V Y U V
YUV422 ~ RGB565
自然界の色は絶え間なく変化しています. 色の定量的尺度を与えるために, さまざまな色を記述する色空間モデルを確立する必要があります. 人々の色の知覚は複雑な生理学的および心理的プロセスであるため, 異なる順序でさまざまな色空間モデルの適用分野におけるそれぞれのニーズをより適切かつ正確に満たすために、さまざまな色空間モデルが登場し、色を定量化して記述しています。RGB / CMYK / YIQ / YUV / HSI などを含むことが多いものです。
デジタル・エレクトロニック・マルチメディアの分野で、私たちがよく触れる色空間の概念は、主にRGBとYUVです(実際、この2つのシステムには、sRGB、Adobe RGB、YUV422、 YUV420…)。
RGB は三原色プラス光システムの原理に従って色を記述し、YUV は明度と色差の原理に従って色を記述します。RGB と YUV の 2 つの主要な色空間だけであっても、関連する知識は非常に豊富で複雑です。
Camera Sensor で最も一般的に使用されるYUVモデルはYUV422形式です。これは、4バイトを使用して 2 つのピクセルを記述し、RGB565モデルとの互換性が高いためです。カメラ センサーとカメラ コントローラーのソフトウェアおよびハードウェア インターフェイス設計に役立ちます。
YUV モデルはPAL TV システムで使用され、Y は明るさを意味し、UVは任意の単語の省略形ではありません。
YIQ モデルはYUVモデルに似ており、 NTSC TV システムで使用されます。YIQ色空間のIおよびQコンポーネントは、 YUV空間のUVコンポーネントの33度回転に相当します。
YCbCr 色空間は、YUV色空間から派生した色空間で、主にデジタル TV システムで使用されます。RGBからYCbCrへの変換では、入力と出力は両方とも8ビットのバイナリ形式です。
RGBからYUV
- Y=0.30R + 0.59G + 0.11B
- U=0.493(B -Y)
- V=0.877(R -Y)
式から理解する必要がある重要なポイントは、UV/CbCr信号は実際には青の差信号と赤の差信号であり、実際には青と赤の強度をある程度間接的に表しているということです。さまざまな色変換処理のプロセスを理解するのに非常に役立ちます。
YUVからRGBへの高速アルゴリズム
ここでいう YUV とは、実は YcrCb のことで、YUV2RGB の変換式自体は非常に単純ですが、浮動小数点演算を伴うため、高速なアルゴリズムを実装したい場合は、アルゴリズムの構造そのものを学ぶ必要はありません。メソッドは、整数演算またはルックアップ テーブルを使用して計算を高速化することです。
まず、変換式は次のように導出できます。
- R = Y + 1.4075 *(V-128)
- G = Y – 0.3455 *(U –128) – 0.7169 *(V –128)
- B = Y + 1.779 *(U – 128)
整数演算
もちろん、浮動小数点演算を整数演算に置き換えるには、シフトを使用する必要があります.次のアルゴリズムを簡単に取得できます。
- u = YUVdata[UPOS] - 128;
- v = YUVdata[VPOS] - 128;
- rdif = v + ((v * 103) >> 8); // (1+103/256 = 1.4023)*v
- invgdif = ((u * 88) >> 8) +((v * 183) >> 8); // (u*0.3437 + v*0.7148)
- bdif = u +( (u*198) >> 8); // (1 + 198/256 = 1.7734) *u
- r = YUVdata[YPOS] + rdif;
- g = YUVdata[YPOS] - invgdif;
- b = YUVdata[YPOS] + bdif;
RGB24 からRGB565データに変換するには、シフトと OR 演算が必要です。
RGBdata[1] =( (r & 0xF8) | ( g >> 5) );
RGBdata[0] =( ((g & 0x1C) << 3) | ( b >> 3) );
ルックアップ テーブル方式
少し。
付録
YUV422 から RGB565 への実装コード
参考文献とリンク
https://www.jianshu.com/p/538ee63f4c1c
https://www.jianshu.com/p/3e44c2262775
https://www.cnblogs.com/huaping-audio/archive/2009/12/27/1633624.html
http://blog.sina.com.cn/s/blog_475e9bf20100siir.html