Main Content

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

Computer Vision Toolboxを使用した Sobel エッジ検出アルゴリズム

この例では、Sobel エッジ検出アルゴリズムに適用される「トップダウン」設計手法を示し、説明します。Sobel エッジ検出アルゴリズムは、一般的でありながらシンプルなエッジ検出アルゴリズムであり、この例の焦点です。この例では、次のことを学びます。

  • Simulink® を使用してデジタル信号処理 (DSP) アルゴリズムをシステム レベルで設計する方法。

  • ハードウェアで実現できるように設計をどのように練り上げるか。

  • Simulink環境で、手書きの HDL コード ( Simulinkモデルに対応) を ModelSim® または Cadence® Xcelium® と共同シミュレーションする方法。

このアプローチは、「モデルベースの設計」の一例です。モデル ベース デザインの詳細については、https://www.mathworks.com/solutions/model-based-design.htmlを参照してください。

この例のすべてのモデルを実行するには、次の製品が必要です。

  • MATLAB®

  • Simulink

  • Fixed-Point Designer™

  • HDL Verifier™

  • Computer Vision Toolbox™

  • DSP System Toolbox™

  • ModelSim SE または PE。またはケイデンス・ゼリウム

Sobel エッジ検出アルゴリズムの実行可能仕様

設計が大規模かつ複雑になるにつれて、設計を高いレベルで記述することが必要になってきています。この高レベルの記述により、設計者はシミュレーションをより速く実行できるだけでなく、開発プロセス全体で検証のために使用することもできます。この結果として得られるプロセスにより、開発者は早期にバグを特定し、開発の終盤でコストのかかるバグの発見を回避できるようになります。この高度な設計は通常、システム エンジニアによって行われます。

DSP アルゴリズムを ASIC や FPGA などのハードウェアに実装するには、システム レベル エンジニアがまずアルゴリズムを設計し、アルゴリズムがプロジェクトの要件を満たしていることを検証します。この設計は、後にアルゴリズムをハードウェアに組み込む責任を負うエンジニアにとっての黄金のリファレンスとなります。

この例では、Sobel エッジ検出アルゴリズムがSimulinkに実装されています。executable modelを開き、[Sobel Edge Detection] ブロックをダブルクリックして、アルゴリズムがSimulinkでどのように実装されているかを確認してください。Sobel Edge Detection ブロックをダブルクリックすると、アルゴリズムが 2 つの 2D フィルターで構成されていることがわかります。1 つは列方向の勾配を計算するもの (上のフィルター)、もう 1 つは行方向の勾配を計算するもの (下のフィルター) です。フィルター)。どちらのフィルターも 3x3 カーネルを使用します。

このSimulinkモデルは、残りの開発パスの仕様として機能します。これは「実行可能な仕様」であり、このモデルをSimulink環境で簡単に実行できることを意味します。

この例では、衛星画像をエッジ検出アルゴリズムへの入力として使用します。このイメージは入力テスト ベクトルとして機能し、例全体で使用されます。アルゴリズムのハードウェア実装を担当するエンジニアがSimulink環境でも作業する場合、テスト ベクトルを別のアプリケーションに移植したり、人的エラーが発生しやすいテスト ハーネスを作成したりするための余分なオーバーヘッドは必要ありません。実行可能仕様で使用されているテスト ハーネスが、例全体で使用されています。

実装のためのアルゴリズムの設計と検証

実行可能モデルを設計するとき、システム エンジニアは通常、実装の詳細を念頭に置くのではなく、動作要件に一致するアルゴリズムを実装します。システム エンジニアが実行可能仕様を開発チームに提出すると、開発チームは、メモリや処理能力などのリソースが限られているリアルタイム システムに設計を適合させるために、実行可能仕様に変更を加える必要がある場合があります。

この例では、開発者は、より効率的なハードウェア実装のために、2 乗演算を削除し、絶対値演算に置き換えることを決定する場合があります。これにより、協調シミュレーション結果とゴールデン リファレンスの間に差が生じますが、この例では、その差は許容できるものと仮定します。edge detection design モデルを開きます。以前のモデルと同じテスト ベクトルが引き続き使用されていることがわかります。結果は、ゴールデンリファレンスと比較して簡単に検証できます。数値表示には、ゴールデン リファレンスと新しいデザインの平均差が表示されます。

固定小数点設計

最終的な目標はアルゴリズムを FPGA または ASIC に実装することなので、倍精度設計を固定小数点設計に変換する必要があります。これはSimulink を使用して簡単に実行できます。前のセクションで開発した倍精度モデルを使用して、新しいブロックを導入せずに固定小数点モデルを直接開発します。Simulink を使用すると、データのビット数とスケーリング、および数学的演算を決定でき、システムの固定小数点演算を分析するための優れた環境を提供します。

この固定小数点設計では、フィルターへの入力は符号付き 9 ビット整数で、フィルターの出力は符号付き 11 ビット整数です。フィルターや合計ブロックなどの各計算ブロックをダブルクリックすると、開発者がそのブロックの内部計算に関連するビット幅とスケーリングを簡単に調整できることがわかります。これにより、設計者は、デバイス上の領域を節約するために必要な最小限のビット数を使用しながら、ゴールデン リファレンスの出力を一致させることの間で妥協することができます。

fixed-point modelを開き、2D フィルターや加算ブロックなどの計算ブロックをダブルクリックし、対応する固定小数点パネルを見て、固定小数点がどのように実装されているかを調べます。

デザインの精緻化

この例では、エッジ検出アルゴリズムへの入力はサイズ 200x100 の 2 次元画像です。リアルタイム システムでは、入力は行列ではなくシリアル データ ストリームである可能性が高くなります。たとえば、このシリアル データ ストリームは、電荷結合素子 (CCD) によって生成できます。したがって、エッジ検出アルゴリズムがデータのシリアル ストリームを受け入れて 2D フィルタリングを実行できるように、設計の構造を変更する必要があります。

この点で、まず入力イメージをシリアル化します。次に、このシリアル データに対して 2D フィルタリングを実行します。後でデータ ストリームを逆シリアル化して、出力をゴールデン リファレンスと比較できるようにします。これがどのように行われるかを確認するには、edge detection elaborationモデルを参照してください。

この操作は下部フィルターに対してのみ行われます。予想どおり、新しい設計でも以前とまったく同じ結果が得られます。シリアライザー ブロックのバフを補償するために 2 つの遅延要素が追加されました。この設計は、 Simulinkのマルチレート機能も示しています。シリアライザー ブロックの出力は、そのブロックへの入力と比較して、サンプリング レートが 20000 倍高くなります。

Simulink®コシミュレーション

前のセクションのモデルは、前のセクションで設計した 2D フィルターを使用して、対応する VHDL または Verilog コードを作成できる HDL 設計者に渡すことができます。コードが記述されると、HDL 設計者はHDL Verifier™を使用して、ModelSim または Xcelium を使用するSimulink環境で HDL 設計をシミュレートし、HDL 設計の出力を実行可能仕様の出力と比較できます。このプロセスでは、HDL テストベンチを生成する必要がないことに注意してください。Simulinkモデルは、 HDL Verifierを通じて入力テスト ベクトルを ModelSim または Xcelium にフィードし、ModelSim または Xcelium からデータを抽出してSimulink環境に戻します。HDL 設計者は、HDL コードが仕様に従って実行されるかどうかを容易に検証できます。

  • モデルシム/クエストシム

HDL Verifier を使用してSimulinkと ModelSim を協調シミュレーションする方法については、VHDL modelまたはVerilog modelを参照してください。最後の図は、ModelSim に表示される信号のスナップショットを示しています。

  • Xcelium HDL Verifierソフトウェアを使用してSimulinkと Xcelium プラットフォームを協調シミュレーションする方法については、 Verilog modelを参照してください。