Comments
Description
Transcript
カラー スペース コンバータ : YCrCb から RGB
ア プ リ ケーシ ョ ン ノ ー ト : Virtex-4, Virtex-II Pro, Virtex-II, Spartan-3 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB 著者 : Gabor Szedo XAPP931 (v1.0) 2006 年 5 月 9 日 は じ めに こ のアプ リ ケーシ ョ ン ノ ー ト では、 多数のビデオ デザ イ ンで必要 と な る YCbCr か ら RGB へのカ ラ ー ス ペー ス変換回路の イ ン プ リ メ ン テーシ ョ ン について説明 し ま す。 リ フ ァ レ ン ス デザ イ ン フ ァ イ ルに は、5 つの乗算器のみを使用 し て YCrCb か ら RGB への変換を実行す る最適化済みス ト ラ ク チ ャ を定義 す る RTL VHDL コ ー ド が含まれます。 コ ンパ イ ルする ソ ース フ ァ イ ル順は次の と お り です。 1. GenXlib_util.vhd 2. GenXlib_arch.vhd 3. color_space_pkg.vhd 4. Xil_YCrCb2RGB.vhd System Generator を使用する 場合は、 HDL コー ド を カプセル化す る System Generator ト ー ク ンが利用 可能です。 ま た、 System Generator の テ ス ト ベ ン チ を 使用す る と 、 出力結果 を GUI で確認で き ま す。 コ ー ド は、 入力/出力精度 (8 ビ ッ ト ま たは 10 ビ ッ ト )、 内部ワ ー ド 長、 お よ び係数精度 (8 ビ ッ ト か ら 18 ビ ッ ト が定義済み) に対応す る よ う パ ラ メ ー タ 設定 さ れてい ま す。 多 く の規格に対応す る 、 一般的な ス ケー リ ン グ、 オ フ セ ッ ト 、 ク リ ッ ピ ン グ、 お よ び ク ラ ン ピ ン グ パ ラ メ ー タ が提供 さ れてい ます。 概要 リ フ ァ レ ン ス デザ イ ンの CE、 CLK、 お よ び SCLR ポー ト は完全な同期 イ ン タ ーフ ェ イ ス です。 ポー ト Y、 Cr、 Cb は YCrCb カ ラ ー スペース入力、 R、 G、 B は RGB カ ラ ー スペース出力です (図 1 参照)。 Y R Cr G Cb B H_SYNC_in H_SYNC_out V_SYNC_in V_SYNC_out PIX_EN_in PIX_EN_out CLK CE SCLR x931_01_032406 図 1 : YCrCb - RGB コ ンバー タ のピ ン 実際の ビデオ シ ス テ ムへす ぐ に挿入で き る リ フ ァ レ ン ス デザ イ ン を活用す る と 、 最大 3 つの ス ト リ ー ム制御信号 (H_SYNC、 V_SYNC、 PIX_EN) が使用可能で、 こ れ ら は適切に遅延 さ せ る こ と がで き る ため、 制御信号 と 出力ス ト リ ームの同期化が容易です。 リ フ ァ レ ン ス デザ イ ン では制御信号を使用 し て いないので、 こ れ ら の信号の接続はオプシ ョ ン と な り ます。 © 2006 Xilinx, Inc. All rights reserved. すべての Xilinx の商標、登録商標、特許、免責条項は、http://www.xilinx.co.jp/legal.htm にリストされています。他のすべての商標お よび登録商標は、それぞれの所有者が所有しています。すべての仕様は通知なしに変更される可能性があります。 保証否認の通知 : Xilinx ではデザイン、コード、その他の情報を「現状有姿の状態」で提供しています。この特徴、アプリケーションまたは規格の一実施例としてデザイン、 コード、その他の情報を提供しておりますが、Xilinx はこの実施例が権利侵害のクレームを全く受けないということを表明するものではありません。お客様がご自分で実装 される場合には、必要な権利の許諾を受ける責任があります。Xilinx は、実装の妥当性に関するいかなる保証を行なうものではありません。この保証否認の対象となる保証 には、権利侵害のクレームを受けないことの保証または表明、および市場性や特定の目的に対する適合性についての黙示的な保証も含まれます。 XAPP931 (v1.0) 2006 年 5 月 9 日 www.xilinx.co.jp 1 R パラ メ ー タ 設定 カ ラ ー スペース コ ンバー タ : YCrCb から RGB 表 1 に、 デザ イ ンの入力パ ラ メ ー タ を示 し ます。 表 1 : デザイ ン パラ メ ー タ デザイ ン パラ メ ー タ タ イプ 範囲 説明 FAMILY_HAS_MAC 整数 0、 1 タ ーゲ ッ ト デバ イ ス に MAC ユニ ッ ト な ど の DSP48 が搭載 さ れてい る 場合は 1 (1) FABRIC_ADDS 整数 0、 1 加算器/減算器を フ ァ ブ リ ッ ク に イ ンプ リ メ ン ト する必要があ る場合は 1 (1) IWIDTH 整数 8、 10 入力 (RGB) デー タ 幅 CWIDTH 整数 8 ~ 18 係数デー タ 幅 MWIDTH 整数 IWIDTH+1 ~ 18 エンベデ ッ ド 乗算器幅(2) OWIDTH 整数 8、 10 出力 (YCrCb) デー タ 幅 RGBMAX 整数 0 ~ 2OWIDTH-1 R、 G、 B 出力の ク リ ッ ピ ン グ値 RGBMIN 整数 0 ~ 2OWIDTH-1 R、 G、 B 出力の ク ラ ン ピ ン グ値 COFFSET 整数 0 ~ 2OWIDTH-1 色度 (Cr、 Cb) 出力のオ フ セ ッ ト 値 ACOEF 整数 BCOEF 整数 CCOEF 整数 DCOEF 整数 ROFFSET 整数 0 ~ 2OWIDTH-1 R 出力のオ フ セ ッ ト 値 GOFFSET 整数 0 ~ 2OWIDTH-1 G 出力のオ フ セ ッ ト 値 BOFFSET 整数 0 ~ 2OWIDTH-1 B 出力のオ フ セ ッ ト 値 HAS_CLIP 整数 0、 1 出力に ク リ ッ ピ ン グ ロ ジ ッ ク があ る 場合は 1 (4) HAS_CLAMP 整数 0、 1 出力に ク ラ ン ピ ン グ ロ ジ ッ ク があ る 場合は 1 (4) 係数 A の値(3) -2CWIDTH ~ 2CWIDTH-1 係数 B の値(3) 係数 C の値(3) 係数 D の値(3) メモ : 1. 2. 3. 4. 図 3 を参照 し て く だ さ い。 「エ ラ ー解析」 を参照 し て く だ さ い。 「デザ イ ン パ ラ メ ー タ 値の割 り 当て」 を参照 し て く だ さ い。 「出力 ク リ ッ ピ ン グ ノ イ ズ」 を参照 し て く だ さ い。 詳細説明 カ ラ ー スペース カ ラ ー スペース と は、 色を規定す る数学的表現体系の こ と であ り 、 次の 3 つの主要モデルがあ り ます。 • RGB ( コ ン ピ ュ ー タ グ ラ フ ィ ッ ク で使用)、 R’G’B’ ( ガ ン マ補正済み RGB) • YIQ、 YUV、 YCrCb ( ビデオ シ ス テ ム で使用) • CMYK ( カ ラ ー プ リ ン ト で使用) ただ し 、 カ ラ ー スペース は色相、 彩度、 お よ び明度の知覚的認識に直接関連 し ます。 すべてのカ ラ ー スペース は、 カ メ ラ やス キ ャ ナな ど の機器か ら の RGB 情報を元に再現で き ます。 各カ ラ ー スペース には、 異な る アプ リ ケーシ ョ ン用に発展 し て き た経緯があ り 、 それぞれのカ ラ ー ス ペース が選択 さ れた背景には特定の理由があ り ます。 た と えば、 必要な ス ト レージ、 バン ド 幅、 アナ ロ グ ま たはデジ タ ルでの演算処理が少ないアプ リ ケーシ ョ ン では、 それ用に よ り 適 し た カ ラ ー スペース が 選択 さ れま し た。 2 www.xilinx.co.jp XAPP931 (v1.0) 2006 年 5 月 9 日 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB それぞれのカ ラ ー スペース が選択 さ れて き た経緯にいかな る 理由があ っ て も 、 コ ン ピ ュ ー タ 、 イ ン タ ー ネ ッ ト 、多様な ビデオ機器はすべて異な る カ ラ ー体系を使用 し てお り 、今日のデジ タ ル設計者は、カ ラ ー スペース変換を含めた設計を行 う 必要があ り ます。 つま り 、 アルゴ リ ズ ムお よ びプ ロ セ ス実行前にすべ ての入力を共通のカ ラ ー スペース に変換す る必要があ る のです。 コ ンバー タ は、 画像処理やビデオ処理 を含む広範のマーケ ッ ト で有用です。 こ のアプ リ ケーシ ョ ン ノ ー ト では、 こ の よ う な コ ンバー タ の 1 つ について説明 し ます。 RGB カ ラ ー スペース RGB (Red、 Green、 Blue) カ ラ ー スペース は、 コ ン ピ ュ ー タ グ ラ フ ィ ッ ク 分野で広 く 使用 さ れてい ま す。 赤、 緑、 青は加法混色の三原色であ り 、 こ れ ら を混ぜ合わせる こ と に よ っ て適切な色が作成 さ れ、 3 次元のデカル ト 座標系で表 さ れます ([参考文献 2])。 表 2 に、 RGB の各値を 100% で表す 100% 飽和色バーを示 し ます。 こ れ ら は、 ビデオ テ ス ト で頻繁に 使用 さ れ る 信号です [参考文献 1]。 RGB は、 赤、 緑、 青を組み合わせて任意の色を作成 し 、 表現で き る ため、コ ン ピ ュ ー タ グ ラ フ ィ ッ ク 用に最 も 普及 し てい る カ ラ ー スペース です。 し たがっ て、RGB カ ラ ー ス ペー ス を選択す る こ と に よ っ て、 シ ス テ ム のアーキ テ ク チ ャ お よ びデザ イ ン が簡潔化 し ま す。 ま た、 RGB カ ラ ー スペース は長年に渡 り 広 く 普及 し てい る ため、 こ のカ ラ ー スペース を使用す る よ う 設計 さ れたシ ス テ ムは、 非常に多 く の既存 ソ フ ト ウ ェ ア アルゴ リ ズ ム を活用で き ます。 ただ し 、 RGB は実在す る 対象の画像処理には必ず し も 有効ではあ り ません。 RGB カ ラ ー キ ューブ内で 任意の色を作成す る には、 3 つの コ ン ポーネ ン ト すべて を同一バン ド 幅にす る 必要があ り ます。 さ ら に、 RGB カ ラ ー スペース での画像処理は、 通常、 最 も 効率的な方法ではあ り ま せん。 た と えば、 あ る ピ ク セルの強度ま たは色を修正す る には、 3 つの RGB 値すべての読み出 し 、修正、お よ びフ レーム バ ッ フ ァ への再書 き 込みが必要 と な り ます。 強度お よ び色の形式で保存 さ れた画像にア ク セ ス で き る シ ス テ ム で は、 こ の よ う な処理手順が短縮 し ます。 表 2 : 100% RGB カ ラ ー バー 公称範囲 白 黄色 シアン 緑 マゼン タ 赤 青 黒 R 0 ~ 255 255 255 0 0 255 255 0 0 G 0 ~ 255 255 255 255 255 0 0 0 0 B 0 ~ 255 255 0 255 0 255 0 255 0 R'G'B' カ ラ ー スペース RGB が コ ン ピ ュ ー タ グ ラ フ ィ ッ ク に理想的な カ ラ ー スペース であ る のに対 し 、 8 ビ ッ ト リ ニア ラ イ ト コ ーデ ィ ン グでは表示画像の品質が低下 し ます [参考文献 2]。 高品質で表示 さ せ る には、 各 コ ン ポーネ ン ト が 12 ま たは 14 ビ ッ ト であ る 必要があ り ます。 非 リ ニアの光度に対す る ヒ ト の視覚反応を模倣 し た 非 リ ニ ア コ ーデ ィ ン グ を 使用す る こ と に よ っ て、 限 ら れ た ビ ッ ト 数 を 最大限に活用 し ま す。 ビ デオ JPEG、 MPEG、 コ ン ピ ュ ー タ 、 デジ タ ル静止画像な ど では、 RGB 信号に非 リ ニア転送機能を使用 し て、 非 リ ニ ア方式で コ ー ド 化 さ れたガ ン マ補正済み コ ン ポーネ ン ト (R'G'B' と 表示) を使用 し ます。 709 [参 考文献 4] ま たは sRGB と 同様の変換機能を使用す る 10 ビ ッ ト の非 リ ニ ア コ ーデ ィ ン グに よ っ て、 高 品質画像が実現で き ます。 YUV カ ラ ー スペース YUV カ ラ ー スペース は、 PAL、 NTSC、 お よ び SECAM カ ラ ー ビデオ/TV 規格で使用 さ れます。 以前 の白黒シ ス テ ムでは輝度 (Y) 情報のみを使用 し てい ま し たが、 こ れに、 通常の白黒映像が白黒レ シーバ で表示 さ れ る よ う 彩度情報 (U お よ び V) を追加 し たのが YUV カ ラ ー スペース です。 XAPP931 (v1.0) 2006 年 5 月 9 日 www.xilinx.co.jp 3 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB YCrCb ( または YCbCr) カ ラ ー スペース YCbCr カ ラ ー スペース は、 デジ タ ル コ ン ポーネ ン ト と し てのビデオの世界規格を策定中に ITU-R BT.601 [参考文献 3] の一部 と し て開発 さ れま し た。 YCbCr は、 YUV カ ラ ー スペース を部分的 に使用す る オ フ セ ッ ト バージ ョ ン です。 Y は 16 ~ 235 の公称範囲で定義 さ れ、 Cb お よ び Cr は 16 ~ 240 の公称範囲で定義 さ れます。 4:4:4、 4:2:2、 4:2:0 な ど複数の YCbCr サンプ リ ン グ フ ォーマ ッ ト が あ り ます。 図 2 : RGB および YCrCb カ ラ ー表示 変換式 微分変換式 輝度 (Y、 ま たは灰色の値) コ ン ポーネ ン ト を作成す る ため、 ヒ ト の目が赤色、 緑色、 青色の強度を ど の よ う に感知す る か を計測す る生体実験が実施 さ れま し た。 こ の実験結果か ら 、 係数 CA お よ び CB の最 適値は次の式か ら 求め ら れ る こ と がわか り ま し た。 Y = CA∗ R + ( 1 – CA – CB)∗ G + CB∗ 等式 1 CA お よ び CB の実際の値は、 規格に よ っ てわずかに異な り ます。 RGB カ ラ ー スペース か ら 輝度お よ び色度 ( カ ラ ー コ ン ポーネ ン ト の差分) への変換は、次の式で表す こ と がで き ます。 Y CA 1 – CA – CB CB R B – Y = – CA CA + CB – 1 1 – CB G R– Y 1 – CA CA + CB – 1 – CB B 等式 2 係数 CA、 CB、 お よ び 1-CA-CB は 0 か ら 1 の間で選択 さ れ、 こ れに よ っ て、 Y の範囲は RGBmin と RGBmax 間に制限 さ れます。 ただ し 、 B-Y の最大値 と 最小値は次の式で求め ら れ る値にな り ます。 minB-Y= RGBmin – (CA*RGBmax + (1- CA- CB)*RGBmax + CB*RGBmin) = -(1-CB) * (RGBmax -RGBmin) minB-Y= RGBmax – (CA*RGBmin + (1- CA- CB)*RGBmin + CB*RGBmax) = (1-CB) * (RGBmax -RGBmin) し たがっ て、 B-Y の範囲は 2(1-CB) (RGBmax -RGBmin) と な り ます。 同様に、 R-Y の最大値 と 最小値は次の式で求め ら れ る値にな り ます。 minR-Y= RGBmin – (CA*RGBmin + (1- CA- CB)*RGBmax + CB*RGBmax) = -(1-CA) * (RGBmax -RGBmin) minR-Y= RGBmax – (CA*RGBmax + (1- CA- CB)*RGBmin + CB*RGBmin) = (1-CA) * (RGBmax -RGBmin) し たがっ て、 R-Y の範囲は 2(1-CA) 4 (RGBmax -RGBmin) www.xilinx.co.jp と な り ます。 XAPP931 (v1.0) 2006 年 5 月 9 日 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB 実際の イ ンプ リ メ ン テーシ ョ ンでは、 輝度お よ び色度 コ ン ポーネ ン ト の範囲は同一であ る必要があ り ま す。 こ れには、 輝度 コ ン ポーネ ン ト (B-Y お よ び R-Y) の正規化 (圧縮 と オ フ セ ッ ト 補正) が可能か、 あ る いは色度範囲の上下の値が ク リ ッ プ可能かの 2 つの方法があ り ます。 ク リ ッ ピ ン グお よ びダ イ ナ ミ ッ ク 範囲の圧縮 と 再量子化に よ っ て情報が失われますが、 その影響には差 異があ り ます。 入力 (RGB) 範囲の差を活用す る には、異な る規格に対す る ク リ ッ ピ ン グ と 正規化にそれ ぞれの ト レー ド オ フ があ り ます。 YCrCb か ら RGB への変換アプ リ ケーシ ョ ンは、 次の標準公式に当てはま る変換のみをサポー ト し ます。 Y CR = CB OY CA 1 – CA – CB CB R CC( – CA) CC( CA + CB – 1 ) CC( 1 – CB) G + OC CD( 1 – CA) CD( CA + CB – 1 ) CD( –CB) B OC 等式 3 CC お よ び CD の値に よ っ て、 B-Y お よ び R-Y のダ イ ナ ミ ッ ク 範囲の縮小が可能であ り 、 等式か ら 求め ら れ る CB お よ び CR のオ フ セ ッ ト 圧縮が容易にな る よ う OY お よ び OC に制限が与え ら れます。 こ の 係数 CC お よ び CD に よ っ て、 色度 コ ン ポーネ ン ト (CB お よ び CR) のダ イ ナ ミ ッ ク 範囲を狭め る こ と がで き ます。 RGB 値を [0..1[range, OC = 0.5 に制約す る場合、 次の よ う にな り ます。 1 CC = -------------------------2 ( 1 – CB) 1 CD = -------------------------2 ( 1 – CA) 等式 4 こ れに よ り 、 演算でのオーバーフ ロ ーお よ びア ン ダーフ ロ ーを回避 し ます。 逆に、 等式 3 に示 し た行列式を変形す る こ と に よ っ て、 YCrCb か ら RGB カ ラ ー スペースへの変換式 は、 次の よ う に定義で き ます。 Y –0Y 1 1 ⁄ CC 0 R – CA – CB G = 1 ---------------------------------------------- ---------------------------------------------- CR – OC CC( 1 – CA – CB) CD( 1 – CA – CB) B CB – OC 1 0 1 ⁄ ( CD) 等式 5 デザイ ン パラ メ ー タ 値の割 り 当て 次に、 使用頻度の高い規格に対す る特定のパ ラ メ ー タ 値を示 し ます。 通常、 COEF お よ び OFFSET 以 外のパ ラ メ ー タ には表に記載 さ れてい る値を その ま ま設定で き ます。 VHDL パ ラ メ ー タ に対応す る整 数値の割 り 当て前に、 次の等式を使用 し て、 こ れ ら のパ ラ メ ー タ の算出、 ス ケール、 丸め込みを行 う 必 要があ り ます。 1ACOEF = 2 CWIDTH – 2 ------CC – CA BCOEF = 2 CWIDTH – 2 --------------------------------------------CC( 1 – CA – CB) – CB CCOEF = 2 CWIDTH – 2 --------------------------------------------CD( 1 – CA – CB) –1 DCOEF = 2 CWIDTH – 2 ------CD [ ] は、 近似整数への丸め込みを示 し ます。 XAPP931 (v1.0) 2006 年 5 月 9 日 www.xilinx.co.jp 5 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB OFFSET パ ラ メ ー タ の算出には、 次の変数を使用 し ます。 ROUNDING_CONST = 2MWIDTH-OWIDTH - 2- FAMILY_HAS_MAC SCALE_M = 2IWIDTH+CWIDTH – MWIDTH + FAMILY_HAS_MAC ROFFSET = [ROUNDING_CONST- (ACOEF · COFFSET + YOFFSET)/SCALE_M] GOFFSET = [ROUNDING_CONST- ((BCOEF + CCOEF) · COFFSET + YOFFSET)/SCALE_M] BOFFSET = [ROUNDING_CONST- (DCOEF · COFFSET + YOFFSET)/SCALE_M] VHDL パ ラ メ ー タ 値の算出は負荷であ る と 思われ る か も し れませんが、 こ れに よ っ て、 4 つの乗算器を 使用す る ソ リ ュ ーシ ョ ン を構成す る ための値ではな く 、 通常は COEF お よ び OFFSET 値を指定す る任 意の規格か ら の値を置換で き ます (図 3)。 次の表は、 [参考文献 1]、 [参考文献 2]、 [参考文献 3]、 お よ び [参考文献 4] に記載のデー タ に基づいてい ます。 ITU 601 (SD) および 709 - 1125/60 (NTSC) 表 3 : 601 および NTSC 709 規格のパラ メ ー タ 値 係数/ パラ メ ー タ 範囲 16-240 16-235 0-255 CA 0.299 0.2568 CB 0.114 0.0979 CC 0.564 CD 0.713 0.5772 0.7295 YOFFSET 2OWIDTH-4 COFFSET 2OWIDTH-1 0.5910 HAS_CLIP 1 0 HAS_CLAMP 1 0 YMAX 240*2OWIDTH-8 235*2 OWIDTH-8 255*2 OWIDTH-8 CMAX 240*2 OWIDTH-8 235*2 OWIDTH-8 255*2 OWIDTH-8 YMIN 16*2 OWIDTH-8 0 CMIN 16*2 OWIDTH-8 0 ITU 709 (HD) 1250/50 (PAL) 規格 表 4 : PAL 709 規格のパラ メ ー タ 値 係数/ パラ メ ー タ 6 入力範囲 16-240 16-235 0-255 CA 0.2126 0.1819 CB 0.0722 0.0618 CC 0.5389 CD 0.6350 0.5512 0.6495 YOFFSET 2OWIDTH-4 COFFSET 2OWIDTH-1 www.xilinx.co.jp 0.6495 XAPP931 (v1.0) 2006 年 5 月 9 日 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB 表 4 : PAL 709 規格のパラ メ ー タ 値 (続き ) 係数/ パラ メ ー タ 入力範囲 16-240 16-235 0-255 HAS_CLIP 1 0 HAS_CLAMP 1 0 YMAX 240*2 OWIDTH-8 235*2 OWIDTH-8 255*2 OWIDTH-8 CMAX 240*2 OWIDTH-8 235*2 OWIDTH-8 255*2 OWIDTH-8 YMIN 16*2 OWIDTH-8 0 CMIN 16*2 OWIDTH-8 0 YUV 規格 表 5 : YUV 規格のパラ メ ー タ 値 係数/ パラ メ ー タ 値 CA 0.299 CB 0.114 CC 0.492111 CD 0.877283 YOFFSET 2 OWIDTH-4 COFFSET 2 OWIDTH-1 HAS_CLIP 1 HAS_CLAMP 1 YMAX 240*2 OWIDTH-8 CMAX 240*2 OWIDTH-8 YMIN 16*2 OWIDTH-8 CMIN 16*2 OWIDTH-8 カ ラ ー スペース変換式 R= ACOEF * Cr + Y + ROFFSET G = BCOEF * Cb + CCOEF *Cr + Y + GOFFSET B= DCOEF * Cb + Y + BOFFSET こ れ ら の変換式は、 図 3 に示す回路図に直接マ ッ プで き ます。 XAPP931 (v1.0) 2006 年 5 月 9 日 www.xilinx.co.jp 7 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB Round Y G CCOEF ROFFSET Cr MAX MIN R ACOEF MAX BOCEF Cb MIN GOFFSET B DCOEF BOFFSET MAX MIN x931_03_032406 図 3 : ア プ リ ケーシ ョ ン回路図 エ ラ ー解析 灰色のボ ッ ク ス は ロ ジ ッ ク ブ ロ ッ ク を示 し 、タ ーゲ ッ ト デバ イ ス で DSP ブ ロ ッ ク が使用可能な場合は、 常に DSP ブ ロ ッ ク を使用 し て イ ン プ リ メ ン ト さ れ ま す。 Virtex-4 デバ イ ス を タ ーゲ ッ ト と し てい る 場 合は FAMILY_HAS_MAC を 1 に設定 し ます。 FABRIC_ADDS = 1 と 設定する と 、デザ イ ン内のほか 演算 コ ン ポーネ ン ト も DSP ブ ロ ッ ク にマ ッ プ さ れます。 DSP fundamentals [ 参考文献 5] に基づ く 次の解析は、 IWIDTH ビ ッ ト RGB 入力デー タ 、 OWIDTH ビ ッ ト 幅 YCrCb 出力デー タ 、 お よ び CWIDTH ビ ッ ト を 係数精度に使用す る こ と を 前提 し た場合の YCrCb か ら RGB 変換の MSE (平均二乗誤差) の算出を示 し ます。 [参考文献 5] の場合 も 固定係数値お よ び入力 と 出力は、 同様の結果 と な り ます。 丸め込み/量子化を考慮す る と 、 図 3 に示すス ト ラ ク チ ャ は次の等式を イ ンプ リ メ ン ト し ます。 R = Cr ⋅ ACOEF + ROFFSET +Y OWIDTH 等式 6 G = Cb ⋅ BCOEF + Cr ⋅ CCOEF + ROFFSET +Y OWIDTH 等式 7 B = Cb ⋅ DCOEF + BOFFSET +Y OWIDTH 等式 8 [ ]k は、 k ビ ッ ト への丸め込みを示 し ます。 DSP48 ブ ロ ッ ク を内蔵 し ないデバ イ ス を タ ーゲ ッ ト と し て、 デザ イ ン を イ ンプ リ メ ン ト す る 場合、乗算器の出力は、加算 さ れ る 前に MWIDTH の値に切 り 捨て ら れ、 フ ァ ブ リ ッ ク ベース の加算器のサ イ ズお よ びキ ャ リ ー チ ェ ーン の長 さ が縮小 し ま す。 こ の切 り 捨てに 起因す る ノ イ ズは、 ワ ー ド 長が さ ら に OWIDTH ま で短縮 さ れ る段階で挿入 さ れ る量子化 ノ イ ズ以下に 抑制で き ます。 6.02 MWIDTH [dB] で SQNR を概算す る場合、 MWIDTH を増加 さ せ る こ と に よ っ て、 丸め込みに よ る ノ イ ズ を削減で き る こ と がわか り ま す。 ただ し 、 MWIDTH は、 デザ イ ン におけ る リ ソ ース使用率お よ び最大キ ャ リ ー チ ェーン長、 つま り は最大ス ピー ド に影響を与え ます。 MWIDTH >18 と す る と 、 デ ザ イ ン で 使用す る 専用乗算器数 が 大幅 に 増加 し ま す。 し た が っ て、 IWIDTH+4 ~ 18 の範囲で最適な MWIDTH 値では、 リ ソ ース数は大幅に増加 し ませんが、 挿入 さ れた 量子化 ノ イ ズが無視で き る ほ ど小 さ く な り ます (最大で も 入力 ノ イ ズ よ り 20dB 低い)。 8 www.xilinx.co.jp XAPP931 (v1.0) 2006 年 5 月 9 日 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB デザ イ ンの出力では、 量子化 ノ イ ズお よ び ク リ ッ ピ ン グ ノ イ ズが発生する 可能性があ り ます。 デー タ が 出力で OWIDTH ビ ッ ト に丸め ら れ る と 、 量子化 ノ イ ズが挿入 さ れます。 R、 G、 B 値が出力フ ォーマ ッ ト [0..1) 許容範囲 よ り 大 き く な る ( オーバーフ ロ ー ) ま たは小 さ く な る ( ア ン ダーフ ロ ー ) 可能性のあ る COEF お よ び OFFSET 値が選択 さ れ る と 、 ク リ ッ ピ ン グ ノ イ ズが発生す る場合があ り ます。 こ れ ら の ノ イ ズ ソ ース の解析前に、入力の SQNR (信号 - 量子化 ノ イ ズ比) を確認 し ます。 量子化エ ラ ー が均等に分散 し てい る こ と を前提 と す る と 、 Y 入力チ ャ ネルの SQNR は等式 9 にな り ます。 2 YMAX Px x – m( x) dx YMIN SQNRYCrCb = 10 log ------- = 10 log ----------------------------------------------------------PN 1 Δ⁄2 2 x dx --- 等式 9 Δ –Δ ⁄ 2 LSB =2-INBITS (INBITS は入力 (RGB) 精度) に置換す る と 、 SQNRRGB は入力ダ イ ナ ミ ッ ク 範囲の関数 と な り ます。 こ の関数を簡潔に示すため、 YCrCb in the x =[0,1) 範囲での YCrCb を使用す る 代わ り に INBITS =8 と し て、 次の範囲の SQNRYCrCb を算出す る と 、 次の よ う にな り ます。 YCrCb 値が (0, 255) 範囲の場合 : 3 1 - 255 2 1 --------x dx ----------------255 255 0 3 ⋅ 255 SQNRYCrCb = 10 log -------------------------------------- = 10 log ------------------------------------- = 54.15 dB 11⁄2 2 ----x dx 12 –1 ⁄ 2 等式 10 YCrCb 値が (16, 240) 範囲の場合 : 等式 11 等式 12 1 - 240 2 --------x dx 16 224 - = 53.92 dB SQNRYCrCb = 10 log ------------------------------------1⁄2 2 x dx –1 ⁄ 2 RGB 値が (16, 235) 範囲の場合 : 1 - 235 2 --------x dx 16 219 - = 53.47 dB SQNRYCrCb = 10 log ------------------------------------1⁄2 2 x dx –1 ⁄ 2 XAPP931 (v1.0) 2006 年 5 月 9 日 www.xilinx.co.jp 9 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB 出力量子化 ノ イ ズ 量子化回路を適切な AWGN ソ ース に置 き 換え る こ と に よ っ て、 図 3 に基づ く 信号フ ロ ーの量的 ノ イ ズ 解析のグ ラ フ が得 ら れますが、 ク リ ッ ピ ン グ ノ イ ズ も 考慮す る最終的な ノ イ ズ を求め る式の微分は非常 に複雑であ り 、 こ のアプ リ ケーシ ョ ン ノ ー ト では取 り 扱い ません。 表 6 に、 標準的なパ ラ メ ー タ の組み合わせに よ る ノ イ ズ計測結果を示 し ます [参考文献 3]。 表 6 : ITU-REC 601 (SD) での入力および出力 SNR 計測結果 [dB] SNR IWIDTH = OWIDTH = 8 ビッ ト IWIDTH = OWIDTH = 10 ビ ッ ト 53.5 47.7 42.4 45.7 53.4 47.5 42.1 45.5 53.3 47.2 42.0 45.3 65.6 59.7 54.4 57.9 65.3 59.4 54.2 57.5 65.2 59.3 54.1 57.3 SNRYCrCb (入力) SNRR SNRG SNRB SNRYCrCb (入力) SNRR SNRG SNRB SNRYCrCb (入力) SNRR SNRG SNRB 入力範囲 [0..255] (8 ビ ッ ト ) ま たは [0..1023] (10 ビ ッ ト ) [16..240] (8 ビ ッ ト ) ま たは [64..960] (10 ビ ッ ト ) [16..235] (8 ビ ッ ト ) ま たは [64..920] (10 ビ ッ ト ) 出力 ク リ ッ ピ ング ノ イ ズ 入力 (R、 G、 B) お よ びパ ラ メ ー タ (COEF と OFFSET) の組み合わせに よ っ ては、出力可能な範囲 [0..1) を越え る 値が出力 さ れ る 場合があ り ます。 出力値が最大値 よ り 大き く な る (オーバーフ ロ ー) ま たは最小 値 よ り 小 さ く な る ( ア ン ダーフ ロ ー ) 可能性があ り 、 こ の結果、 出力値が不適切 と な り ます。 ク リ ッ ピ ン グ ロ ジ ッ ク のないデザ イ ン (HAS_CLIPPING=0) でオーバーフ ロ ー ま たはア ン ダーフ ロ ーが発生 し た場合、 バ イ ナ リ 値が ラ ッ プア ラ ウ ン ド し 、 出力に多 く の ノ イ ズが発生 し ます。 HAS_CLIPPING=1 の 場合は、 出力値がサチ ュ レー ト し 、 ノ イ ズ発生は抑制 さ れます (図 4)。 255 240 16 0 x931_04_32806 図4: ラ ッ プ ア ラ ウン ド と サチ ュ レー ト 同様に、 HAS_CLAMPING=1 と す る と 、 デザ イ ンに ク ラ ン ピ ン グ ロ ジ ッ ク が含まれます。 ク リ ッ ピ ン グお よ び ク ラ ン ピ ン グ を使用す る こ と に よ り 、 デザ イ ン で使用す る ス ラ イ ス数が約 6OWIDTH ス ラ イ ス分増加 し ます。 タ ーゲ ッ ト と し た規格で、 出力値が ITU-R BT.601-5 [参考文献 3] な ど のバ イ ナ リ 値ではな く 、 定義済 みの範囲に制限 さ れてい る 際には、 規格仕様に基づいて YMAX お よ び YMIN 値 (輝度に対す る 制約) と CMAX お よ び CMIN 値 (色度に対す る 制約) を設定す る こ と に よ っ て、 ク リ ッ ピ ン グお よ び ク ラ ン ピ ン グ ロ ジ ッ ク を使用す る と 、 制約のあ る出力値があ ら か じ め定義 さ れた範囲内で使用で き ます。 10 www.xilinx.co.jp XAPP931 (v1.0) 2006 年 5 月 9 日 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB パ フ ォ ーマ ン ス、 レ イ テ ン シ、 リ ソ ース概算 オプシ ョ ン をデフ ォ ル ト 設定 と す る ISE 8.1 ツールを使用 し てテ ス ト を実施 し 、 評価デー タ を取得 し ま し た。 XST では、 最適化ゴールを をエ リ アに設定 し ま し た。 ま た、 MAP の最適化お よ び タ イ ミ ン グ ド リ ブン パ ッ キ ン グ オプシ ョ ンはオン と し てい ます。 Virtex-4 テ ス ト には、 -10 ス ピー ド グ レー ド 、 FF668 パ ッ ケージの XC4VSX35 デバ イ ス を使用 し ま し た (表 7)。 表 7 : Virtex-4 デバイ スのパフ ォ ーマ ン スおよび リ ソ ース概算 288.76MHz 最大動作周波数 ス ラ イ ス フ リ ッ プ フ ロ ッ プ数 141 4 入力 LUT 数 122 使用ス ラ イ ス数 97 DSP48 数 4 Spartan™-3 テ ス ト には、 -4 ス ピー ド グ レー ド 、 FG320 パ ッ ケージの XC3S1000 デバ イ ス を使用 し ま し た (表 8)。 表 8 : Spartan-3 デバイ スのパフ ォ ーマ ン スおよび リ ソ ース概算 158.17MHz 最大動作周波数 ス ラ イ ス フ リ ッ プ フ ロ ッ プ数 206 4 入力 LUT 数 122 使用ス ラ イ ス数 131 MULT18x18 数 4 モジ ュ ールの正確な レ イ テ ン シ を計算す る には、 次の フ ァ ン ク シ ョ ンが使用可能です。 YCrCb2RGB_LATENCY(FAMILY_HAS_MAC, FABRIC_ADDS, HAS_CLIP, HAS_CLAMP: integer) return integer こ の フ ァ ン ク シ ョ ンは、 color_space_pkg.vhd に含まれ、 YCrCb2RGB モジ ュ ールの レ イ テ ン シ を返 し ます。 XAPP931 (v1.0) 2006 年 5 月 9 日 www.xilinx.co.jp 11 R System Generator の カ ラ ー スペース コ ンバー タ : YCrCb から RGB System Generator を使用 し て開発 さ れた複雑なシ ス テ ムへの YCrCb - RGB 変換デザ イ ンの 統合を容易 にす る ため、 VHDL コ ー ド を カプセル化する ト ー ク ンが提供 さ れてい ます。 ト ーク ン 図 5 : System Generator の ト ー ク ン ト ー ク ン を ダブル ク リ ッ ク す る と 、 ア ク テ ィ ブな GUI 上で System Generator イ ン ス タ ン ス のパ ラ メ ー タ が設定で き ます。 YCrCb か ら RGB の変換で 「デザ イ ン パ ラ メ ー タ 値の割 り 当て」 に記載の汎用規格 を使用す る 場合に必要な設定は、GUI の [Basic] タ ブ (図 6) で規格お よ び必要な入力/出力精度を選択す る のみです。 System Generator ト ー ク ン を適切に実行 さ せる には、次の フ ァ イ ルを MATLAB の作業デ ィ レ ク ト リ に コ ピーす る 必要があ り ます。 • Xil_YCrCb2RGB_config.m • ycrcb2rgb_action.m • ycrcb2rgb_enablement.m • Xil_YCrCb2RGB_GUI.xml 図 6 : System Generator GUI の [Basic] タ ブ 12 www.xilinx.co.jp XAPP931 (v1.0) 2006 年 5 月 9 日 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB ド ロ ッ プ ダ ウ ン リ ス ト に 表示 さ れ な い、 カ ス タ ム 設計 の コ ン バー タ ま た は規格 を 使用す る 場合、 [Standard Selection] で [Custom] を選択する と [Advanced] タ ブ (図 7) を使用 し た設定が可能 と な り ま す。 [Conversion matrix] では、 「変換式」 に記載の CA、 CB、 CC、 お よ び CD のパ ラ メ ー タ を浮動小 数点形式 (範囲 [0..1) で直接入力で き ます。 [Advanced] タ ブは、 RGB か ら YCrCb への変換用 リ フ ァ レ ン ス デザ イ ンの も の と 非常に類似す る よ う 設計 さ れてい ます。 こ れ ら の GUI に同一のパ ラ メ ー タ を入 力す る こ と で、 演算 ノ イ ズ以外が一致す る 変換ペアが得 ら れ、 こ れはオ リ ジナルの ピ ク セル デー タ を返 し ます。 オ フ セ ッ ト 圧縮、 ク リ ッ ピ ン グ、 お よ び ク ラ ン ピ ン グ設定は、 「パ ラ メ ー タ 設定」 に記載の VHDL パ ラ メ ー タ と 同様です。 [Advanced] タ ブに表示 さ れ る 値は、 [Custom] を選択す る 前の規格に対応す る 値に初期化 さ れてい ます が、 こ れ ら のオプシ ョ ン設定後は、 定義済み規格 と カ ス タ ム規格間で選択変更を繰 り 返 し て も 、 GUI に はユーザーが定義 し た値が表示 さ れます。 図 7 : [Advanced] タ ブ 3 つめの タ ブは [Implementation] タ ブであ り (図 8)、 デザ イ ンの レ イ ア ウ ト を決定す る オプシ ョ ンが設 定で き ます。 こ こ で設定可能な係数ビ ッ ト お よ び乗算器入力ビ ッ ト は、 共にデザ イ ンの リ ソ ース使用率 と ノ イ ズに影響を与え ます。 定義済みの値を使用す る と 、デザ イ ンでの DSP48 使用数を増加 さ せ る こ と な く 、 最大の SNR を実現で き ます。 ま た、 乗算器の入力ビ ッ ト 幅を小 さ く す る と 、 使用ス ラ イ ス数が削 減 さ れます。 DSP48 を 内蔵す る デバ イ ス を タ ーゲ ッ ト と し て デザ イ ン を イ ン プ リ メ ン ト す る 場合、 そ の直後に DSP48 を使用す る 4 つの乗算器 と 3 つの加算器、 お よ びパ イ プ ラ イ ン レ ジ ス タ が イ ンプ リ メ ン ト さ れ ます。 DSP48 が使用可能であ る 場合に、 DSP48 に イ ン プ リ メ ン ト さ れ る ロ ジ ッ ク は、 図 3 で背景色が 灰色 と な っ てい ます。 FABRIC_ADDS VHDL パ ラ メ ー タ に対応する [Use fabric for adders] チ ェ ッ ク ボ ッ ク ス は、 その他の 加算器 を ( ス ラ イ ス ベー ス の ロ ジ ッ ク を 使用 し て ) ロ ジ ッ ク フ ァ ブ リ ッ ク に イ ン プ リ メ ン ト す る か、 DSP48 に イ ンプ リ メ ン ト す る か を制御 し ます。 XAPP931 (v1.0) 2006 年 5 月 9 日 www.xilinx.co.jp 13 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB 図 8 : [Implementation] タ ブ System Generator の テ ス ト ベン チ YCrCb か ら RGB 変換のサブシ ス テ ムのプ ロ ト タ イ ピ ン グ、 テ ス ト 、 お よ び検証を実施す る ために、 リ フ ァ レ ン ス デザ イ ン には System Generator のテ ス ト ベンチが含ま れ ます。 テ ス ト ベンチ フ ァ イ ルは、 /sysgen/testbench デ ィ レ ク ト リ 以下にあ り ます。 テ ス ト ベンチを開 く には、 MATLAB デ ィ レ ク ト リ を /sysgen/testbench に変更 し 、 Xil_YCrCb2RGB_tb.mdl を取 り 込んで く だ さ い (図 9)。 図 9 : System Generator のテ ス ト ベン チ モデルの初期化中、 Xil_YCrCb2RGB_preload_mdl.m が実行さ れ、 カ ラー バーで使用 さ れる ス テ ィ ミ ュ ラ ス ワー ク プレ イ ス変数、 input_image、 input_image_r、 input_image_g、 input_image_b が初期化 さ れ ます (図 10)。 ま た、 既に ロー ド さ れた フ ァ ン ク シ ョ ンは、 フ ァ ン ク シ ョ ン double_ycrcb2rgb を使用し て 出力 matlab_y、 matlab_cr、 matlab_cb の リ フ ァ レ ン ス と な り ます。 14 www.xilinx.co.jp XAPP931 (v1.0) 2006 年 5 月 9 日 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB 図 10 : R、 G、 B ス テ ィ ミ ュ ラ ス テ ス ト ベン チの実行 メ モ : テ ス ト ベンチは、 デフ ォ ル ト パ ラ メ ー タ 設定の ト ー ク ン を実行す る よ う 設定 さ れてい ます。 パ ラ メ ー タ IWIDTH ま たは OWIDTH を変更する と 、 R、 G、 お よ び B の Gateway In モジ ュ ールでビ ッ ト 数 と バ イ ナ リ ポ イ ン ト 設定を変更す る必要があ り ます。 テ ス ト ベンチは、 ISE シ ミ ュ レー タ ISIM、 外部シ ミ ュ レー タ ModelSim、 あ る いはハー ド ウ ェ ア コ シ ミ ュ レ ー シ ョ ン を 使 用 し て 実行可能 で す。 ハ ー ド ウ ェ ア コ シ ミ ュ レ ー シ ョ ン の 詳細 は、 System Generator のマニ ュ アルを参照 し て く だ さ い。 デフ ォ ル ト では、 テ ス ト ベン チは ModelSim を使用 し 、 シ ミ ュ レーシ ョ ン完了後 も ModelSim のシ ミ ュ レーシ ョ ン ウ ィ ン ド ウ が開かれた ま ま と な る オプシ ョ ンが使用 さ れます。 1. シ ミ ュ レータ を変更する には、 YCrCb2RGB ト ー ク ンで右 ク リ ッ ク し 、表示 メ ニ ューか ら [Mask] → [Look] を選択 し て く だ さ い。 2. Colorspace ト ー ク ンでダブル ク リ ッ ク し 、 表示 さ れ る ブ ロ ッ ク の [Properties] ダ イ ア ロ グボ ッ ク ス でシ ミ ュ レーシ ョ ン モー ド を選択 し ます。 ModelSim のみに対する オプシ ョ ンは、 ModelSim ト ー ク ン を ダブル ク リ ッ ク し て設定で き ま す。 重要な機能 と し て、 シ ミ ュ レ ーシ ョ ン開始前にマ ク ロ フ ァ イ ルを読み込む こ と がで き、 こ の機能に よ っ て、 シ ミ ュ レーシ ョ ン実行中に追加 (内部) VHDL 信号の表示が可能 と な り ます。 ModelSim は、 ブ ラ ッ ク ボ ッ ク ス デザ イ ンのデバ ッ グ機能に優れた ツールです。 3. マ ク ロ フ ァ イ ル名を指定す る には、 ModelSim ブ ロ ッ ク の [Properties] ダ イ ア ロ グボ ッ ク ス で [Advanced] タ ブを選択 し 、 [Script to run after vsim] に .do フ ァ イ ル名を 入力 し ます。 デフ ォ ル ト では、 wave_add_rgb.do が取 り 込まれ、 重要な信号のい く つかが波形ウ ィ ン ド ウ に表示 さ れます。 4. シ ミ ュ レーシ ョ ン開始ア イ コ ン (-) を ク リ ッ ク し て、 シ ミ ュ レーシ ョ ン を実行 し ます。 シ ミ ュ レー シ ョ ン完了後、 フ ァ ン ク シ ョ ン Xil_YCrCb2RGB_post_proc が呼び出 さ れ、 検証用に VHDL 出力 が GUI に表示 さ れます (図 11)。 XAPP931 (v1.0) 2006 年 5 月 9 日 www.xilinx.co.jp 15 R カ ラ ー スペース コ ンバー タ : YCrCb から RGB 図 11 : Y, Cb, Cr Output リ フ ァ レンス デザイ ン フ ァ イル プ ロ セ ス後の フ ァ ン ク シ ョ ンには、VHDL 出力 と 倍精度 MATLAB モデル間の主なエ ラ ー統計算出用の テ ンプ レー ト が含まれます。 ま た、 VHDL 結果の bit-true 検証を容易にする 固定小数点 MATLAB モデ ル (Xil_YCrCb2RGB_fi_model.m) がバン ド ル さ れてい ます。 リ フ ァ レ ン ス デザ イ ン フ ァ イ ルは、 次のザ イ リ ン ク ス の ウ ェ ブ サ イ ト か ら ダ ウ ン ロ ー ド で き ます。 http://www.xilinx.co.jp/bvdocs/appnotes/xapp931.zip 参考資料 1. 2. 3. 4. 5. 改訂履歴 次の表に、 こ の文書の改訂履歴を示 し ます。 16 Keith Jack, Video Demystified, 4th Edition, ISBN 0-7506-7822-4, pp 15-19. Charles Poynton, Digital Video and HDTV, ISBN 1-55860-792-7, pp 302-321. Recommendation ITU-R BT.601-5 standard definition: http://www.itu.int. Recommendation ITU-R BT.709-5 standard definition: http://www.itu.int. Gary Sullivan, “Approximate theoretical analysis of RGB to YCbCr to RGB conversion error,” in Joint Video Team (JVT) of ISO/IEC MPEG & ITU-T VCEG (ISO/IEC JTC1/SC29/WG11 and ITU-T SG16 Q.6.) 日付 バージ ョ ン 2006/05/09 1.0 内容 初版 リ リ ース www.xilinx.co.jp XAPP931 (v1.0) 2006 年 5 月 9 日