Excel(VBA)でRGB2YUVの確認
前回の「浮動小数を使用せず演算」で記載したRGB→YUV変換(演算式②)の精度を確認するため、Excel VBAでプログラムを作りました。
Excelを使用することにより、以下のように画像確認ができます。
前回の参考記事は、以下になります。
前回の内容
以下がYUV変換(演算式②)となります。
係数は以下の通りとなり、n=16(×65536)でVBAを作成しました。
VBAを使う理由
演算精度を確認する場合、Excelが便利です。
が、一番の理由は視覚的にすぐ修正できる所です。
特に画像処理の場合は、期待値を作るのと同時作業ができます。
補足)
半導体設計では、期待値というものを作る必要があります。
これは設計した回路が正しく出力されているかシミュレーションで確認するためのものです。
回路では並列処理のためFFでバトンリレーのように処理します。
一つでもタイミングがズレていたりすると出力値が違ってくるためそれを確認します。
画像処理では、何万というデータがあります。
その一つ一つを正しく出力しているか、期待値を準備して比較アプリ(コマンド)で確認します。
※目視確認では何万とういうデータを確認する為に時間がかかるため。
(この期待値を作るために、C言語やVBAを自然と勉強してしまいます。)
プログラム構成
テストがしやすいように2階層に分かれています。
各Functionの概要と引数は以下の通りとなります。
Function CalcRGB2YUV
R,G,B成分と係数やClip処理用変数を受け、演算します。
また、上位階層で係数を負数(-???)で設定することにより、U,V成分の演算が可能になります。
記述
VBAプログラムは以下の通りです。
検証
Functionを使用しているため、Excelのユーザー定義マクロとして使用できます。
従って、Excelを使って簡単に検証(デバッグ)が可能です。
確認内容を以下に示します。
「入力値」の各RGB成分使って「通常係数」の場合と「係数×65536」で計算します。
「通常係数」が浮動小数で演算した値を示し、「係数×65536」がCalcRGB2YUVで演算した値となります。
上表より、各YUV成分の整数部の誤差は1と分かります。
Function RGB2YUV
引数Pointに指定したセルの背景色から各RGBを取得し、YUV変換の計算を行います。
記述
VBAプログラムは以下の通りです。
YUV変換で必要な各パラメータは「Const」で指定できるようにしています。
精度を変更する場合でもこのConstの値を変更するだけで良いようになっています。
Y成分は「ValueY」、U成分は「ValueU」、V成分は「ValueV」に代入し、変数Modeの設定値に応じて選択して返します。
検証
入力用のシートを準備し、Y,U,V成分の値を出力し、確認します。
入力画像
入力画像を以下に示します。
簡易的にテストするため、縦横32画素としています。
入力画像は以下の式で生成しています。
「Cells(Y + 2, X + 2).Interior.Color」の記述でセルに色を設定しています。
出力値
RGB2YUV()のPointに入力画像の各セルを指定し、Y成分、U成分、V成分の値をセルに出力し、色付けして確認します。
各結果を以下に示します。
Y成分結果
U成分結果
V成分結果
最後に
画像処理のデバッグ段階では、Excelを使った方が便利です。
画像のように2次元的に見れるのと、シミュレーション結果との違いも色をつけたり、視覚的にとらえることが可能です。
ただ、欠点もあります。
私の場合(半導体設計時)は、ブロック単位のデバッグ時はExcelで期待値を作って視覚的にデータ解析を行います。
その後、C言語を使って大きいサイズの期待値を作成し、期待値比較確認を行うようにしています。