映像が「出ている」だけでは、処理が正しいか分からない
映像処理の確認で、写真や画面キャプチャを一枚流して「自然に見えたから大丈夫」と判断したくなる場面があります。私も最初はそう考えました。しかし、自然画は情報が多すぎます。RGBとY'CbCrを取り違えたのか、色差の位置がずれたのか、黒レベルだけが違うのかを、木の葉や人物の肌から見分けるのは難しいものです。
そこで、色・階調・線・位置を意図的に決めた幾何テストパターンを使います。入力が分かっていれば、出力のどこを見るべきかも決まります。これは画質を競うための画像ではなく、処理経路を切り分けるための入力データです。
この記事から始まるシリーズでは、PC表示でよく出会うRGB系の条件から、放送・業務用映像で使われるY'CbCr系の条件まで、同じ考え方で扱える検証環境を目指します。完成済みアプリの紹介ではありません。最終的に何を作り、その前に何を理解しておくべきかを先に整理します。
この記事で持ち帰ってほしいこと
- テストパターンは「きれいな絵」ではなく、特定の崩れを目立たせるための入力です。
- 同じ図形でも、RGB/Y'CbCr、色差サブサンプリング、range、bit深度、格納形式が変われば、確認すべき点が変わります。
- RAWは画素の並びだけでは読み切れません。生成条件と、RAWを読むためのmanifestを一組で残す必要があります。
- 目標は、特定の規格への適合を保証する測定器ではなく、条件を明示したテストデータを生成・確認・派生出力できる検証環境です。
最終的に作りたいのは「パターン」と「読み方」を一緒に扱う環境
最終目標は、パターン名だけでなく、サイズ・色モデル・色差サブサンプリング・bit深度・range・matrix・格納形式を条件として選び、RAWを生成することです。生成結果はRAW単体で渡さず、読み方を記したmanifestと、確認用のPNGプレビューを同じ出力セットにします。
ここでいう「VESA系」は、PC表示で使う解像度・アスペクト比・RGB表示を意識した条件群のことです。「放送系」は、Y'CbCr、色差サブサンプリング、limited range、10bit格納のような条件群を指します。どちらか一方をもう一方へ変換するだけではなく、同じ幾何パターンを異なる条件で出し、どこに差が現れるかを確認できるようにします。
VESAやARIBなどの規格を、このツールが自動で満たすという意味ではありません。規格・機器・インターフェースごとに必要な条件を確認し、検証用の入力データを自分で固定するための土台です。放送向けのカラーバーにも複数の規格・用途があります。ARIBでも、番組制作や国際交換の運用を意識したUHDTV用カラーバーが定められています。1
パターンは、崩れ方から選ぶ
テストパターンを増やすこと自体が目的ではありません。どの現象を見つけたいかを先に決め、必要な形を選びます。
| 観測したいこと | 向くパターン | 見る場所 |
|---|---|---|
| 成分順・色の解釈 | カラーバー、色ブロック | 特定の色が別の色になっていないか |
| 黒・白・中間階調 | グレーステップ、ランプ | 黒つぶれ、白飛び、段差がないか |
| 座標・アスペクト比 | 格子、円、十字 | 正円が楕円にならないか、中心がずれないか |
| 解像感・サンプリング | 線対、ハッチ、斜めエッジ | 細線の消失、色にじみ、境界のずれがないか |
| 周波数応答の傾向 | ゾーンプレート、マルチバースト | 場所によって偽模様やモアレが出ないか |
たとえばカラーバーは、色の名前を確認するためだけのものではありません。Y'CbCrへの変換、range、matrix、成分順のどこかを取り違えたときに、違和感がまとまった領域として現れます。線対やハッチは、細かい成分を間引く4:2:2/4:2:0で何が失われるかを見やすくします。ゾーンプレートは、周辺へ行くほど細かくなるため、解像度やサンプリングに起因する偽模様の観察に向きます。
generated/ には、実際にこの目的で作ったカラーバー、格子、線対、斜めエッジ、ゾーンプレートなどのPNGプレビューとRAWセットがあります。記事では、各回の主題に必要なものだけを使います。2026年8月15日時点で実装に登録されている42種類を最初に並べるより、「この崩れならこの形を見る」という関係を先に覚えたほうが、生成条件を選ぶ理由が分かりやすいためです。
画像形式をまたぐと、同じ絵でも確認項目が増える
同じ1920×1080のカラーバーでも、RGB888として並べる場合と、10bit Y'CbCr 4:2:2として並べる場合では、確認項目が違います。
- RGBでは、R・G・Bの順序、1成分あたりのbit数、行ごとの並び方が中心になります。
- Y'CbCrでは、Y'・Cb・Crの順序に加え、4:4:4/4:2:2/4:2:0、range、matrix、色差サンプルの位置も関わります。
- 10bitでは、10bit値を16bit容器の上位・下位どちらへ寄せるか、あるいはv210やMIPI10のように複数画素へ詰めるかも読み方の一部になります。
ここで重要なのは、画面に見える絵と、RAWに並んでいる値を同じものだと思わないことです。プレビューはRAWを復号し、必要に応じて色変換して初めて表示できます。正しいプレビューが出たとしても、それだけで外部機器との互換性や規格適合性までは保証しません。
すでに公開している放送映像の10bit Y'CbCrをRGB/TIFFへ変換する記事では、limited range、成分順、パッキングの取り違えが画像へどう出るかを具体的に扱いました。このシリーズでは、その条件を毎回手入力して忘れないための保存方法と確認方法を追加していきます。
RAW・manifest・圧縮画像は、同じ役割ではない
RAWは、意図した画素値を格納するためのペイロードです。ヘッダを持たないRAWでは、幅・高さ・色モデル・格納形式をファイル本体だけから一意に決められません。
manifestは、そのRAWを読むための外側の契約です。生成条件、関連ファイル、バイト数、ハッシュなどを残し、別のPCや別の時点でも同じ前提で開けるようにします。PNGプレビューは、RAWを正しい条件で復号できたかを人が短時間で確認するための派生物です。
一方、PNGやJPEGは、ファイル内にデコーダーが読むための構造を持つ画像形式です。RAWへmanifestを添える話と、PNG/JPEGの可逆・非可逆圧縮を選ぶ話は、似て見えて別の問題です。この違いは、第3回「RAW・PNG・JPEGを同じ「画像」として扱わない」で整理しています。
アプリは、仕様の置き場所を一つにするために使う
最終的には、WPFの画面から出力条件を選び、Python側の生成基盤でRAW・manifest・PNGプレビューを作り、同じアプリでmanifestを起点に開き直す構成を考えています。さらに、確認用のPNG/JPEG/TIFFなどを書き出し、RAWコピーと混同しないように扱います。
閲覧・検査を担うRawInspectorは第6回で扱います。一方、生成画面はまだ変更中です。画面の項目や処理の順序が変わり得る段階で操作手順を記事の中心にすると、記事だけが先に古くなります。このため、第7回に相当する生成操作の記事は、実機確認とmasterへの統合が済むまで保留します。
このシリーズの順番
| 回 | 主題 | この回で分かること |
|---|---|---|
| 第1回 | 放送映像の10bit Y'CbCrをPCで読む | range・成分順・パッキングを間違えると何が起きるか |
| 第2回 | RAWとmanifestの読取契約 | RAWを単体で渡さず、読み方を残す理由 |
| 第3回 | RAW・PNG・JPEGの役割 | 画素値、ファイル内の構造、圧縮の違い |
| 第4回 | パターンを観測対象から選ぶ | 色・階調・位置・解像感のどれを見るか |
| 第5回 | 色変換とサブサンプリングを分ける | 変換・間引き・量子化・格納を切り分ける方法 |
| 第6回 | manifestからRAWを検査する | RawInspectorで記録条件と表示条件を分けて確認する方法 |
| 第7回(保留) | GUIからテストデータを生成する | 生成画面の実機確認後に扱う |
今回の記事はこのシリーズの導入として置きます。第1回の技術説明を置き換えるものではありません。どのRAW条件を扱うのか、なぜテストパターンが必要なのかを先に示し、個別の記事を読む目的を作る役目です。
ここで扱わないこと
- VESA、ARIB、ITU-Rなど、個別規格の適合判定
- 測定器としての精度・校正・インターフェース適合性の保証
- カメラメーカー固有RAW、DNG、EXIFなどの写真RAW現像
- JPEGや映像コーデックの内部アルゴリズム
- アプリの確定していない画面操作や実装仕様
まとめ
- 幾何テストパターンは、映像処理の崩れを意図して見つけるための入力です。
- パターンは種類から選ぶのではなく、色・階調・位置・解像感など、観測したい現象から選びます。
- RAWを検証用データとして扱うなら、RAW・manifest・プレビューを一組で残します。
- 先に基礎知識を積み、統合アプリが固まった段階で、生成・確認・派生出力の実装へつなげます。
-
ARIB STD-B66の概要。本シリーズは同規格の図版や標準画像を収録せず、目的に合わせた自作パターンを扱います。 ↩
