(57)【要約】  画像処理ソフトウェア開発において、部品図接続によるモデルベース開発と、組込ＬＳＩ用プログラミング言語ライブラリと連携可能なソースコードの自動コード生成とを両立する。  プログラミング言語用の画像処理ライブラリ機能と、前記機能への入出力データ構造に対し、入出力データメモリ管理部品図、入力データ値設定部品図、ライブラリ実行部品図、出力データ値取得部品図、の４種の部品図を有し、さらに、前記４種の部品図を下位部品図としてあらかじめ利用順に接続した上位部品図を有し、下位部品図と上位部品図を組み合わせてアルゴリズムを記述、実行する。また、記述されたアルゴリズムから、画像処理ライブラリを呼び出すプログラミング言語ソースコードを生成する。
2013018204.tif 000002
【特許請求の範囲】
【請求項１】
画像処理装置用プログラミング言語ライブラリを用いたソフトウェアの開発を支援する、画像処理ソフトウェア開発装置上で実行される画像処理ソフトウェア開発方法であって、
前記画像処理ソフトウェア開発装置は、記憶装置と、モデル図編集部を構成するための制御装置とを有しており、
前記記憶装置には、ソフトウェアが記述されるモデル図の構成要素である４種の下位部品図として、入出力データメモリ管理部品図、入力データ値設定部品図、ライブラリ実行部品図、および、出力データ値取得部品図がそれぞれ部品図定義部に記憶されており、
前記下位部品図は、前記プログラミング言語ライブラリの関数と、その関数を実行するときの入出力データを指定するための接続端子とを有しており、
前記接続端子を介して接続される４種の前記下位部品図をグループ化した上位部品図も、前記記憶装置に記憶されており、
前記モデル図編集部は、
モデル図への前記下位部品図または前記上位部品図の追加操作を受け付けると、受け付けた前記下位部品図または前記上位部品図をモデル図へと追加するとともに、複数の前記下位部品図の前記接続端子についての接続操作を受け付けると、受け付けた前記接続端子間を有向リンクで接続することで、モデル図を作成させることを特徴とする
画像処理ソフトウェア開発方法。
【請求項２】
前記画像処理ソフトウェア開発装置の制御装置は、さらに、モデル実行部を構成し、
前記モデル実行部は、
前記作成されたモデル図内の部品図接続関係から各部品図の処理順序を特定し、処理順序に従って作成されたモデル図内の前記下位部品図を１つずつ選択し、
選択される前記下位部品図が前記入出力データメモリ管理部品図であるときには、前記プログラミング言語ライブラリのライブラリ関数に入出力するデータ構造用のメモリを確保および解放し、
選択される前記下位部品図が前記入力データ値設定部品図であるときには、前記確保されたメモリに対して、前記ライブラリ関数に入出力するデータ構造の値を設定し、
選択される前記下位部品図が前記ライブラリ実行部品図であるときには、前記ライブラリ関数に入出力するデータ構造の値を参照して、前記プログラミング言語ライブラリを呼び出し、
選択される前記下位部品図が前記出力データ値取得部品図であるときには、前記プログラミング言語ライブラリを呼び出した実行結果が格納されているデータ構造から、実行結果を読み取ることを特徴とする
請求の範囲第１項に記載の画像処理ソフトウェア開発方法。
【請求項３】
前記画像処理ソフトウェア開発装置の制御装置は、さらに、コード生成部を構成し、
前記コード生成部は、
前記作成されたモデル図内の部品図接続関係から各部品図の処理順序を特定し、処理順序に従って作成されたモデル図内の前記下位部品図を１つずつ選択し、
選択される前記下位部品図が前記入出力データメモリ管理部品図であるときには、前記プログラミング言語ライブラリのライブラリ関数に入出力するデータ構造用のメモリを前記画像処理装置内のメモリから確保および解放するための前記プログラミング言語ソースコードを出力し、
選択される前記下位部品図が前記入力データ値設定部品図であるときには、前記画像処理装置内で確保されたメモリに対して、前記ライブラリ関数に入出力するデータ構造の値を設定するための前記プログラミング言語ソースコードを出力し、
選択される前記下位部品図が前記ライブラリ実行部品図であるときには、前記ライブラリ関数に入出力するデータ構造の値を参照して、前記画像処理装置内で前記プログラミング言語ライブラリを呼び出すための前記プログラミング言語ソースコードを出力し、
選択される前記下位部品図が前記出力データ値取得部品図であるときには、前記画像処理装置内で前記プログラミング言語ライブラリを呼び出した実行結果が格納されているデータ構造から、実行結果を読み取るための前記プログラミング言語ソースコードを出力することを特徴とする
請求の範囲第１項に記載の画像処理ソフトウェア開発方法。
【請求項４】
前記モデル図編集部は、モデル図内の第１前記上位部品図内の前記入出力データメモリ管理部品図の前記接続端子から、モデル図内の第２前記上位部品図内の前記ライブラリ実行部品図の前記接続端子への接続操作を受け付けると、受け付けた接続操作に従って、前記入出力データメモリ管理部品図の前記接続端子から前記ライブラリ実行部品図の前記接続端子への有向リンクをモデル図に追加することを特徴とする
請求の範囲第１項ないし第３項のいずれか１項に記載の画像処理ソフトウェア開発方法。
【請求項５】
前記ライブラリ関数に入出力するデータ構造が画像データである場合、その接続端子には画像データの管理情報を入出力するための前記下位部品図の前記接続端子を接続するとともに、画像データ内に含まれる画素データは画像処理ライブラリ内部で管理することを特徴とする
請求の範囲第１項ないし第３項のいずれか１項に記載の画像処理ソフトウェア開発方法。
【請求項６】
画像処理装置用プログラミング言語ライブラリを用いたソフトウェアの開発を支援する、画像処理ソフトウェア開発装置であって、
前記画像処理ソフトウェア開発装置は、記憶装置と、モデル図編集部を構成するための制御装置とを有しており、
前記記憶装置には、ソフトウェアが記述されるモデル図の構成要素である４種の下位部品図として、入出力データメモリ管理部品図、入力データ値設定部品図、ライブラリ実行部品図、および、出力データ値取得部品図がそれぞれ部品図定義部に記憶されており、
前記下位部品図は、前記プログラミング言語ライブラリの関数と、その関数を実行するときの入出力データを指定するための接続端子とを有しており、
前記接続端子を介して接続される４種の前記下位部品図をグループ化した上位部品図も、前記記憶装置に記憶されており、
前記モデル図編集部は、
モデル図への前記下位部品図または前記上位部品図の追加操作を受け付けると、受け付けた前記下位部品図または前記上位部品図をモデル図へと追加するとともに、複数の前記下位部品図の前記接続端子についての接続操作を受け付けると、受け付けた前記接続端子間を有向リンクで接続することで、モデル図を作成させることを特徴とする
画像処理ソフトウェア開発装置。
【請求項７】
前記画像処理ソフトウェア開発装置の制御装置は、さらに、モデル実行部を構成し、
前記モデル実行部は、
前記作成されたモデル図内の部品図接続関係から各部品図の処理順序を特定し、処理順序に従って作成されたモデル図内の前記下位部品図を１つずつ選択し、
選択される前記下位部品図が前記入出力データメモリ管理部品図であるときには、前記プログラミング言語ライブラリのライブラリ関数に入出力するデータ構造用のメモリを確保および解放し、
選択される前記下位部品図が前記入力データ値設定部品図であるときには、前記確保されたメモリに対して、前記ライブラリ関数に入出力するデータ構造の値を設定し、
選択される前記下位部品図が前記ライブラリ実行部品図であるときには、前記ライブラリ関数に入出力するデータ構造の値を参照して、前記プログラミング言語ライブラリを呼び出し、
選択される前記下位部品図が前記出力データ値取得部品図であるときには、前記プログラミング言語ライブラリを呼び出した実行結果が格納されているデータ構造から、実行結果を読み取ることを特徴とする
請求の範囲第６項に記載の画像処理ソフトウェア開発装置。
【請求項８】
前記画像処理ソフトウェア開発装置の制御装置は、さらに、コード生成部を構成し、
前記コード生成部は、
前記作成されたモデル図内の部品図接続関係から各部品図の処理順序を特定し、処理順序に従って作成されたモデル図内の前記下位部品図を１つずつ選択し、
選択される前記下位部品図が前記入出力データメモリ管理部品図であるときには、前記プログラミング言語ライブラリのライブラリ関数に入出力するデータ構造用のメモリを前記画像処理装置内のメモリから確保および解放するための前記プログラミング言語ソースコードを出力し、
選択される前記下位部品図が前記入力データ値設定部品図であるときには、前記画像処理装置内で確保されたメモリに対して、前記ライブラリ関数に入出力するデータ構造の値を設定するための前記プログラミング言語ソースコードを出力し、
選択される前記下位部品図が前記ライブラリ実行部品図であるときには、前記ライブラリ関数に入出力するデータ構造の値を参照して、前記画像処理装置内で前記プログラミング言語ライブラリを呼び出すための前記プログラミング言語ソースコードを出力し、
選択される前記下位部品図が前記出力データ値取得部品図であるときには、前記画像処理装置内で前記プログラミング言語ライブラリを呼び出した実行結果が格納されているデータ構造から、実行結果を読み取るための前記プログラミング言語ソースコードを出力することを特徴とする
請求の範囲第６項に記載の画像処理ソフトウェア開発装置。
【請求項９】
請求の範囲第１項ないし第５項のいずれか１項に記載の画像処理ソフトウェア開発方法を、コンピュータである前記画像処理ソフトウェア開発装置に実行させるための画像処理ソフトウェア開発プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理ソフトウェア開発方法、画像処理ソフトウェア開発装置、および、画像処理ソフトウェア開発プログラムの技術に関する。
【背景技術】
【０００２】
画像処理システムの処理性能向上により、その応用分野が、従来のＦＡ（Factory Automation）分野から、屋内外の人物監視、デジタルカメラなどの顔認識、車載カメラによる外界認識など、幅広い分野に広がりを見せている。【０００３】
一方で、画像処理システムの開発では、処理対象となるデータが非常に多くなることから、汎用ＣＰＵ（Central Processing Unit）による処理では十分なコストパフォーマンス（または電力あたりパフォーマンス）が得られないため、画像処理用のハードウェアアクセラレータを内包する組込ＬＳＩ（Large Scale Integration）を用いることが多い。なお、組込ＬＳＩとは、組込機器に搭載される回路であり、組込機器は組込ＬＳＩを用いて画像処理を高速に実行する。【０００４】
従って、組込ＬＳＩで動作するドライバソフトウェアを実現するためのプログラミング言語ライブラリを用いて認識ソフトウェアを開発する必要がある。なお、組込機器用ソフトウェアの開発では、Ｃ言語などのプログラミング言語を用いることが一般的であり、組込ＬＳＩ用のドライバソフトウェアも同様にプログラミング言語ライブラリとして提供されている。このため、認識ソフトウェア開発者が用いる開発方法も、必然的にプログラミング言語によるプログラミングが一般的になっている。【０００５】
しかし、プログラミング言語によるプログラミングを行う場合、実装工数が多い、実装に伴うヒューマンエラーが多いなどの問題があった。
これらの問題に対して有効な既存技術が、モデルベース開発技術である。
モデルベース開発技術は、従来のプログラミング言語ベース開発とは異なり、
（ａ）あらかじめソフトウェア開発環境上に定義された処理ブロックを処理順に列挙する
（ｂ）同じくソフトウェア開発環境上に定義されたソフトウェア部品図を図面上で接続する
などの方法によりソフトウェア処理フロー（以下、「モデル」と呼ぶ）を記述し、そのモデルを計算機上でシミュレーション動作させて動作検証し、場合によってはモデルからプログラミング言語ソースコードを生成する、という技術である。モデルベース開発の一例として、特許文献１のような技術がある。なお、特許文献１は（ａ）に類する例である。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−０８７１４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１に記載された技術では、組込ＬＳＩ用のプログラミング言語ライブラリと連動した認識アルゴリズムの開発ができない（または、ＰＣなど開発環境上でのシミュレーションは可能でも、組込ＬＳＩ用のプログラミング言語ライブラリを呼び出すソースコードの生成ができない）という問題があった。【０００８】
また、モデルベース開発では、プログラミング言語を用いた開発よりも開発効率を高めるために、あらかじめ定義されるソフトウェア部品の抽象度を、プログラミング言語用関数よりも高く設定することが多く、ソフトウェア部品の実行に要する組込機器の計算機リソース（計算量およびメモリ使用量）を減らすことが難しかった。【０００９】
そこで、本発明は、画像処理を実行する組込ＬＳＩ用のプログラミング言語ライブラリを統合したモデルベース開発、より具体的には、開発環境上での（プログラミング言語を用いない）部品図接続型認識アルゴリズム開発、および、組込機器の計算機リソース使用量を減らしたソースコード生成が可能なモデルベース開発環境を提供することを主な目的とする。
【課題を解決するための手段】
【００１０】
前記課題を解決するために、本発明は、画像処理装置用プログラミング言語ライブラリを用いたソフトウェアの開発を支援する、画像処理ソフトウェア開発装置上で実行される画像処理ソフトウェア開発方法であって、
前記画像処理ソフトウェア開発装置が、記憶装置と、モデル図編集部を構成するための制御装置とを有しており、
前記記憶装置には、ソフトウェアが記述されるモデル図の構成要素である４種の下位部品図として、入出力データメモリ管理部品図、入力データ値設定部品図、ライブラリ実行部品図、および、出力データ値取得部品図がそれぞれ部品図定義部に記憶されており、
前記下位部品図が、前記プログラミング言語ライブラリの関数と、その関数を実行するときの入出力データを指定するための接続端子とを有しており、
前記接続端子を介して接続される４種の前記下位部品図をグループ化した上位部品図も、前記記憶装置に記憶されており、
前記モデル図編集部が、
モデル図への前記下位部品図または前記上位部品図の追加操作を受け付けると、受け付けた前記下位部品図または前記上位部品図をモデル図へと追加するとともに、複数の前記下位部品図の前記接続端子についての接続操作を受け付けると、受け付けた前記接続端子間を有向リンクで接続することで、モデル図を作成させることを特徴とする。
その他の手段は、後記する。
【発明の効果】
【００１１】
本発明によれば、画像処理を実行する組込ＬＳＩ用のプログラミング言語ライブラリを統合したモデルベース開発、より具体的には、開発環境上での（プログラミング言語を用いない）部品図接続型認識アルゴリズム開発、および、組込機器の計算機リソース使用量を減らしたソースコード生成が可能なモデルベース開発環境を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態に関する画像処理ソフトウェア開発システムを示す構成図である。
【図２】本発明の一実施形態に関する部品図定義部に定義される部品図を示す説明図である。
【図３】本発明の一実施形態に関する部品図定義部内に定義された上位部品図および下位部品図の別の例として、エッジ角度量子化関数の例を示す説明図である。
【図４】本発明の一実施形態に関する図２，図３で説明した各上位部品図を、モデル図編集部のモデル図画面上に配置および接続した例を示す説明図である。
【図５】本発明の一実施形態に関する図４と同じ処理フローを、上位部品図と下位部品図を併用して構築した例を示す説明図である。
【図６】本発明の一実施形態に関するモデル実行部の処理を示すフローチャートである。
【図７】本発明の一実施形態に関するコード生成部の処理を示すフローチャートである。
【図８】本発明の一実施形態に関するプログラミング言語ソースコードの一例として、図４の処理フローに対してコード生成した結果を示す説明図である。
【発明を実施するための形態】
【００１３】
以下、本発明の一実施形態を、各図面を参照して詳細に説明する。
【００１４】
図１は、画像処理ソフトウェア開発システムを示す構成図である。画像処理ソフトウェア開発システムは、画像処理ソフトウェア開発装置１と、組込機器７０とにより構成される。
画像処理ソフトウェア開発装置１は、制御装置であるＣＰＵとメモリとハードディスク（記憶手段）とネットワークインタフェースを有するコンピュータとして構成され、このコンピュータは、ＣＰＵが、メモリ上に読み込んだプログラムを実行することにより、各処理部を動作させる。
組込機器７０は、画像処理などを実行する組込ＬＳＩが搭載されている計算機であり、画像処理ソフトウェア開発装置１よりも、計算機リソース（ＣＰＵの処理能力、メモリの記憶容量）などが少ないことが多い。
【００１５】
画像処理ソフトウェア開発装置１は、部品図定義部１０、モデル図編集部２０、モデル実行部３０、コード生成部４０、プログラミング言語ライブラリ５０、および、プログラミング言語ソースコード６０により構成される。
部品図定義部１０には、プログラミング言語ライブラリ５０の各関数およびデータ構造と対応する部品図があらかじめ決まった構造で定義されている。この構造については後記する。以下、プログラミング言語ライブラリ５０の関数を、「ライブラリ関数」と略す。
モデル図編集部２０は、部品図定義部１０に定義されている各部品図を用いて、画像処理フローを記述する。この手順については後記する。
【００１６】
モデル実行部３０は、モデル図編集部２０を用いて作成されたモデル図をもとに、画像処理フローを実行する（詳細は、図６参照）。具体的には、モデル実行部３０は、画像処理ソフトウェア開発装置１上で、組込機器７０を模擬動作する（以下、シミュレーションとも呼ぶ）。
模擬動作の一例として、組込機器７０を画像処理ソフトウェア開発装置１内の仮想計算機として構築し、その仮想計算機のハードウェアリソースとＯＳ上のプロセスとを模擬した上で、画像処理アルゴリズムを模擬動作する形態がある。
模擬動作の別の一例として、画像処理ソフトウェア開発装置１のハードウェアリソースとＯＳ上で、画像処理アルゴリズムを模擬動作する形態としてもよい。
【００１７】
コード生成部４０は、モデル図編集部２０を用いて作成されたモデル図をもとに、プログラミング言語ソースコード６０を生成する（詳細は、図７参照）。そして、生成されたプログラミング言語ソースコード６０は、組込機器７０用のコンパイラでコンパイル＆リンクすることにより、バイナリファイルが作成される。組込機器７０は、作成されたバイナリファイルを受信し（図１の破線矢印）、そのバイナリファイルを組込ＬＳＩを用いて動作させる。
【００１８】
プログラミング言語ライブラリ５０は、組込機器７０に搭載されている組込ＬＳＩで動作するドライバソフトウェアを実現するためのライブラリである。本実施形態では、プログラミング言語ライブラリ５０の一例として、画像処理（特に、画像処理のうちのエッジ角度抽出処理などの画像認識処理）を実行するためのＣ言語で記述されるライブラリを例示する。一方、プログラミング言語ライブラリであればさまざまな種類に適用可能である。例えば、画像ではなく音声認識ライブラリなどに適用可能で、かつ、ライブラリを利用するプログラミング言語もＣ言語に限定されるものではない。
【００１９】
プログラミング言語ソースコード６０は、コード生成部４０により生成されるもので、プログラミング言語ライブラリ５０を呼び出すアプリケーションソースコードである。
【００２０】
次に、画像処理ソフトウェア開発装置１の処理概要について、説明する。
まず、ユーザ１１０は、部品図定義部１０にあらかじめ定義された部品図を、モデル図編集部２０のモデル図画面上に配置し、それら部品図間の入出力端子を接続することで画像処理フローを示すモデル図を記述する。
【００２１】
次に、ユーザ１１０は、モデル実行部３０に対しモデル図の実行を指示すると、モデル実行部３０は、モデル図編集部２０で作成されたモデル図に記述されている画像処理フローの先頭から順番に、処理フローを実行する。この際、画像処理フローを構成する各部品図に対応づけられるプログラミング言語ライブラリ５０内の機能を順次呼び出すことにより、画像処理アルゴリズムのシミュレーションを行う。
【００２２】
次に、ユーザ１１０は、コード生成部４０に対しコード生成を指示すると、コード生成部４０は、モデル図編集部２０で作成されたモデル図に記述されている画像処理フローを元に、プログラミング言語ソースコード６０を出力する。
【００２３】
図２は、部品図定義部１０に定義される部品図を示す説明図である。
【００２４】
図２（ａ）は、図２（ｂ）の下位部品図と対応するプログラミング言語ライブラリ５０の関数や構造体を示す。まず、ライブラリ関数「エッジ角度抽出関数（ExtractEdgeAngle）」は、引数で指定された画像ＩＤ（IMGID）に該当する画像内の各画素に対して、画素（ｘ、ｙ）ごとのエッジ強度および角度（rho、theta）を出力する。また、エッジ角度抽出制御構造体（EDGE_CTL型）は、エッジ角度抽出処理の制御に必要な制御パラメータで、エッジ強度下限閾値と、最大エッジ数をもつ。
【００２５】
この制御パラメータに基づき、指定された閾値よりも強いエッジ強度の画素に対するエッジ強度および角度を計算し、エッジ角度抽出結果構造体（EDGE_TBL）配列に出力する。この際、エッジ角度抽出結果構造体配列は、あらかじめ十分な個数（例えば、画面内の全画素数分）確保されているものとし、その個数はエッジ角度抽出制御構造体メンバであるmaxEdgeに設定する必要がある。なお、エッジ角度抽出関数の戻り値は、実際に抽出されたエッジ数とする。
【００２６】
図２（ｂ）は、ライブラリ関数の１つである「エッジ角度抽出関数」と、そのライブラリ関数に対応する部品図群を示す。部品図は、ライブラリ関数１個当たり４種の下位部品図と、それらをまとめた（グループ化した、または、階層化したともいえる）上位部品図とで構成される。
【００２７】
各下位部品図の外観については、部品図内部のラベル文字列のうち、上部の文字列（例えば、「ExtractEdgeAngle」）が下位部品図の名称、左側の文字列（例えば、「IMGID」）が入力端子、右側の文字列（例えば、「edgeCount」）が出力端子、左右中央の文字列（例えば、「pEdgeTbl」）が入出力共用端子をそれぞれ表している。
よって、図２では、下位部品図を利用順に左から右へ配置し、各入出力端子の型が整合するように接続することにより、上位部品図２７０内の処理フローが構成される。この際、下位部品図内の入出力端子のうち、下線を引いてある端子（例えば、GetEdgeTbl２５０内の「EDGE_TBL」）が、上位部品図の入出力端子となる。
【００２８】
下位部品図は、以下に示すように、入出力データメモリ管理部品図、入力データ値設定部品図、ライブラリ実行部品図、および、出力データ値取得部品図の４種に分類される。
（ａ）入出力データメモリ管理部品図は、ライブラリ関数に入出力するデータ構造それぞれに対してデータ構造メモリを確保・解放するための下位部品図であり、例えば、EDGE_CTL構造体のメモリ管理（確保、解放）を行うAllocEdgeCtl２２０や、EDGE_TBL構造体のメモリ管理を行うAllocEdgeTbl２３０である。
（ｂ）入力データ値設定部品図は、確保したデータ構造に対して値を設定するための下位部品図であり、例えば、エッジ角度抽出関数の制御構造体であるEDGE_CTL構造体に対して値を設定するSetEdgeCtl２４０である。
（ｃ）ライブラリ実行部品図は、ライブラリ関数を呼び出すための下位部品図であり、例えば、エッジ角度抽出関数に対応するExtractEdgeAngle２１０である。ExtractEdgeAngle２１０内のedgeCountがエッジ角度抽出関数の戻り値に該当する。なお、ライブラリ実行部品図は、ライブラリ関数１個あたりひとつ定義される。
（ｄ）出力データ値取得部品図は、ライブラリ関数の実行結果が格納されているデータ構造から値を取り出すための下位部品図であり、例えば、エッジ角度抽出処理結果が格納されているEDGE_TBL構造体から値を取得するGetEdgeTbl２５０や、EDGE_CTL構造体から値を取得するGetEdgeCtl２６０である。
【００２９】
データメモリに関係する下位部品図２２０〜２６０は基本的にはそれぞれデータ型１個当たり、（ａ）入出力データメモリ管理部品図、（ｂ）入力データ値設定部品図、（ｄ）出力データ値取得部品図の３種一組ずつ定義される。例えば、EDGE_CTL構造体については下位部品図２２０、２４０、２６０が組をなす。
ただし、例外として、データ構造が認識結果出力専用であって値の設定が不要な場合は、入力データ値設定部品図は定義しなくても構わない。例えば、EDGE_TBL構造はエッジ角度抽出関数の出力を受け取る用途にしか使わない（つまり、ユーザ１１０が値を設定することはない）ため、入力データ値設定部品図は定義しなくても構わない。
【００３０】
上位部品図２７０は、下位部品図２１０〜２６０を利用順にあらかじめ接続してひとまとめにグループ化したものである。なお、本実施形態では、上位部品図の命名規則を、「（下位部品図の）ライブラリ実行部品図名＋ｐｋｇ」として説明する。「ｐｋｇ」は、パッケージの略である。
なお、本実施形態ではライブラリ関数とそのデータ構造に関係する部品図について説明するが、下位部品図として条件分岐、繰り返しなどの処理フロー制御部品図を追加してもよい。これにより、より複雑なアルゴリズムを記述することが可能になる。
【００３１】
次に、モデル図編集部２０に配置される処理フロー図について、図３〜図５を用いて説明する。
【００３２】
図３は、部品図定義部１０内に定義された上位部品図および下位部品図の別の例として、エッジ角度量子化関数の例を示す説明図である。
【００３３】
図３（ａ）は、図３（ｂ）の下位部品図と対応するライブラリ関数であるエッジ角度量子化関数（ResampleEdgeAngle）を示す。なお、エッジ角度量子化とは、エッジ角度抽出処理によって１度刻み３６０度の分解能でEDGE_TBL構造体に出力されたエッジ角度情報を、指定された角度分解能（例えば８方向符号であれば３６０度を４５度刻み８方向の分解能）に変換する処理のことである。この処理は、エッジ角度情報に基づく画像識別特徴量の抽出などにおいて利用される。
【００３４】
エッジ角度量子化関数（ResampleEdgeAngle）は、前段で処理されたエッジ角度抽出関数から出力されるエッジ角度抽出結果構造体（EDGE_TBL）配列を第１引数pInEdgeTblから入力し、さらに制御用の入力情報として、第３引数edgeCountにはEDGE_TBL構造体配列の数を、第４引数resolutionには量子化後の分解能をそれぞれ入力し、エッジ角度量子化処理を行い、第２引数から出力用として受け取った別のエッジ角度抽出結果構造体（EDGE_TBL）配列に処理結果を入れて出力する。なお、関数の戻り値は量子化後のエッジ角度量子化テーブル数である。
【００３５】
図３（ｂ）では、エッジ角度量子化関数に対応するResampleEdgeAngle３１０がライブラリ実行部品図に該当し、その他の入出力データ型は図２と同じであるため、下位部品図２３０、２５０は部品図定義部１０に定義済みの部品図を流用することができる。さらに、上位部品図３２０は、下位部品図２３０、３１０、２５０を利用順にあらかじめ接続してひとまとめにグループ化したものである。
【００３６】
図４は、図２，図３で説明した各上位部品図を、モデル図編集部２０のモデル図画面上に配置および接続した例を示す説明図である。
本実施形態においてユーザ１１０がアルゴリズムを記述する方法は、図４（ａ）の部品図定義部１０に定義されている部品図群から画像処理アルゴリズム処理フローで用いる部品図を選択し、図４（ｂ）のモデル図編集部２０上に配置し、各部品図の接続端子を利用順番（後記する図６，図７での「処理順番」に相当）かつ型整合性が取れるように接続する、という手順になる。
【００３７】
まず、ユーザ１１０は、部品図定義部１０に定義済みの画像メモリ確保（AssignImg）４１０を選択して（例えば、マウスのドラッグ操作）、モデル図編集部２０上に下位部品図４４０として配置する（例えば、マウスのドロップ操作）。つまり、部品図定義部１０に定義されている部品図はあくまで「部品の定義情報」であって、モデル図編集部２０上に配置されて初めて「部品図の実体」として機能する。
【００３８】
続いて、ユーザ１１０は、同様に残りの部品図も配置する。つまり、確保した画像メモリに画像を取得し（部品図４２０から部品図４４５）、最大取得エッジ数「maxEdge=1024」、エッジ強度閾値「minThr=30」という制御パラメータ定数値を設定し（部品図４３０から部品図４５０、４５５）、それらを入力してエッジ角度抽出を行う（ExtractEdgeAnglePkg）（部品図２７０から部品図４６０）。
【００３９】
さらに、ユーザ１１０は、角度分解能「resolution=8」という制御パラメータ定数値を設定し（部品図４３０から部品図４６５）、エッジ角度抽出結果を量子化する（ResampleEdgeAngle）（部品図３２０から部品図４７０）という部品図を配置する。さらに、各部品図の入出力端子間を接続し、画像処理フローを構築する。
【００４０】
このように、部品図定義部１０内にあらかじめ下位部品図の接続関係をまとめた形で上位部品図を定義してあるため、ユーザ１１０は、モデル図編集部２０上での上位部品図４６０、４７０には、下位部品図群によって構成される処理フロー全体の入力情報、および、出力情報だけを接続すればよく、接続すべき部品図を少なくすることができる。よって、アルゴリズム試作時など、数多くのアルゴリズムを迅速に構築し、比較評価をする際などに効果的である。
【００４１】
図５は、図４と同じ処理フローを、上位部品図と下位部品図を併用して構築した例を示す説明図である。図５の例では、まず、ユーザ１１０は、図４と上位部品図を用いて同様の処理フローを記述する。次に、ユーザ１１０は、上位部品図の中に含まれる下位部品図を表示状態にする。なお、表示状態の切り替え方法は公知の方法で構わない。例えば、部品図編集用のメニュー等から下位部品図の表示／非表示を切り替えてもよいし、上位部品図をダブルクリックすることによって別画面を出すなどしてもよい。
【００４２】
ユーザ１１０は、下位部品図を表示状態にした後、下位部品図同士の接続関係を編集することができる。従って、ユーザ１１０は、複数の上位部品図に含まれる下位部品図の間で、処理が不要または重複している部品図を消し（もしくは、接続関係を修正して処理をスキップさせ）、再接続することができる。
そのため、モデル図編集部２０は、モデル図内の第１上位部品図内の入出力データメモリ管理部品図の接続端子から、モデル図内の第２上位部品図内のライブラリ実行部品図の接続端子への接続操作を受け付けると、受け付けた接続操作に従って、入出力データメモリ管理部品図の接続端子からライブラリ実行部品図の接続端子への有向リンクをモデル図に追加する。
【００４３】
例えば、図２内上位部品図２７０の中に含まれる下位部品図２３０（AllocEdgeTbl）と、図３内上位部品図３２０の中に含まれる下位部品図２３０（AllocEdgeTbl）とが重複しており、図４のように上位部品図４６０、４７０同士を接続しただけの状態では、EDGE_TBL構造体メモリを二重に確保していることになる。従って、図５の例では、ユーザ１１０は、上位部品図４６０内の下位部品図２３０で確保したEDGE_TBL構造体メモリを、後段の上位部品図４７０内でそのまま利用するように接続関係を書き換えている。
【００４４】
さらに、上位部品図４６０内処理フローの最後段に位置する、EDGE_CTL構造体値取得部品図２６０（GetEdgeCtl）と、EDGE_TBL構造体値取得部品図２５０（GetEdgeTbl）は不要な処理であるため、ユーザ１１０は、エッジ角度抽出関数実行部品図２１０（ExtractEdgeAngle）の出力結果をそのままエッジ角度量子化関数実行部品図３１０（ResampleEdgeAngle）に入力するように接続関係を書き換えている。
【００４５】
このように、ユーザ１１０は、モデル図編集部２０を介して、上位部品図の内部に定義されている下位部品図に対する表示および編集ができるため、シミュレーションを通じて確定したアルゴリズムが動作する組込機器７０の計算機リソース使用効率を改善する（具体的には組込機器７０のメモリ確保量の削減と、組込機器７０のメモリ確保処理に伴う処理時間の削減）ことができる。
【００４６】
図６は、モデル実行部３０の処理を示すフローチャートである。
【００４７】
モデル実行部３０は、基本的に、モデル図編集部２０内に構築された処理フロー内の各部品図を先頭から終端に向かって順番に処理していく（Ｓ６１０、Ｓ６１５、Ｓ６５０、Ｓ６５５）。この際、まず、上位部品図群を接続して構成される上位階層の処理フロー（図４の例に相当）をチェックして、その先頭から終端に向かって部品図の処理順番を決定する。次に、各上位部品図の内部に定義されている、下位部品図群を接続して構成される下位階層の処理フロー（図５の例に相当）をチェックして、その先頭から終端に向かって部品図の処理順番を決定する。
【００４８】
以下、具体的な例として、図４の処理フローの例で説明する。
【００４９】
まず、上位部品図の処理順番を決定する。処理フローを先頭から順にたどっていくと、図４の例では、
第１部品図集合＜部品図４４０→部品図４４５→部品図４５０→部品図４５５→部品図４６０→部品図４６５→部品図４７０＞
の順になる。なお、部品図４５０、４５５などの並列関係にある部品図の処理順番は、その後段の処理である部品図４６５よりも前に順序付けされるが、部品図４５０と部品図４５５との間の順序関係は任意である。例えば、部品図をモデル図編集部２０に配置した順番で決定しても構わない。
【００５０】
次に、下位部品図の処理順番を決定する。まず上位部品図４６５については、図２の処理フローより、
第２部品図集合＜部品図２２０→部品図２３０→部品図２４０→部品図２１０→部品図２５０→部品図２６０＞
の順になる（並列関係にある部品図の処理順番については同様である）。
次に、上位部品図４７０については、図３の処理フローより、
第３部品図集合＜部品図２３０→部品図３１０→部品図２５０＞
の順になる（並列関係にある部品図の処理順番については同様である）。
【００５１】
以上をまとめると、各部品図の処理順番は、以下のようになる。ここで、「まとめる」とは、第１部品図集合内の上位部品図４６５，４７０を、それぞれ前記した下位部品図の集合（第２部品図集合、第３部品図集合）に置き換えることである。
＜部品図４４０→部品図４４５→部品図４５０→部品図４５５→部品図４６０→部品図２２０→部品図２３０→部品図２４０→部品図２１０→部品図２５０→部品図２６０→部品図２３０→部品図３１０→部品図２５０＞
になる。
【００５２】
次に、処理順番に従って各部品図を処理していく。各部品図の処理では、まず部品図の種別をチェックし（Ｓ６２０）、部品図種別ごとに処理を分岐する。
【００５３】
部品図種別が「入出力データメモリ管理部品図」の場合は、実行タイミングが処理フローの開始時点か終了時点かによって処理を分岐する。開始時点の場合はデータ構造のメモリを確保し（Ｓ６２５）、終了時点の場合はデータ構造のメモリを解放する（Ｓ６３０）。
【００５４】
部品図種別が「入力データ値設定部品図」の場合は、該当するデータ構造に指定された値を設定する（Ｓ６３５）。なお、データ構造と設定値は部品図の入力端子から指定されたものを使用する。
【００５５】
部品図種別が「ライブラリ実行部品図」の場合は、該当するライブラリ関数を呼出し、実行結果を受け取る（Ｓ６４０）。なお、ライブラリ関数に引き渡す引数（入力用引数と出力用引数）は部品図の入力端子から指定されたものを使用し、ライブラリ関数の実行結果を保持するデータ構造と戻り値は出力端子から出力する。
【００５６】
部品図種別が「出力データ値取得部品図」の場合は、該当するデータ構造から値を取得する（Ｓ６４５）。なお、取得元データ構造、取得するデータ要素、取得結果の格納先データ構造は部品図の入力端子から指定されたものを使用し、格納先データ構造を出力端子から出力する。
【００５７】
なお、本実施形態では入出力データメモリ管理部品図はガーベジコレクタ（使用済みメモリの回収）機能をシミュレートする。ただし、これは本実施形態の必須要件ではない。例えば、ガーベジコレクタ機能がない場合は、入出力データメモリ管理部品図を「入出力データメモリ確保部品図」「入出力データメモリ解放部品図」の２種類に分けた上で、入出力データメモリ解放部品図をモデル図編集部２０内に構築された処理フローの適切な個所（一般的には、処理フロー終端）に接続すればよい。
【００５８】
また、本実施形態ではライブラリ関数とそのデータ構造に関係する部品図について説明するが、下位部品図として条件分岐、繰り返しなどの処理フロー制御部品図を追加した場合、Ｓ６２０の処理分岐先が部品図種別ごとに増える。分岐先での部品図実行は公知の方法で構わない。例えば、部品図種別が処理分岐部品図であれば条件判定と判定結果に応じた処理を行う。
【００５９】
図７は、コード生成部４０の処理を示すフローチャートである。
【００６０】
コード生成部４０は、基本的に、モデル図編集部２０内に構築された処理フロー内の各部品図を先頭から終端に向かって順番に処理していく（Ｓ７１０、Ｓ７１５、Ｓ７５０、Ｓ７５５）。この際、まず、上位部品図群を接続して構成される上位階層の処理フロー（図４の例に相当）をチェックして、その先頭から終端に向かって部品図の処理順番を決定する。次に、各上位部品図の内部に定義されている、下位部品図群を接続して構成される下位階層の処理フロー（図５の例に相当）をチェックして、その先頭から終端に向かって部品図の処理順番を決定する。その後、処理順番に従って各部品図を処理していく。
【００６１】
各部品図の処理では、まず部品図の種別をチェックし（Ｓ７２０）、部品図種別ごとに処理を分岐する。
【００６２】
部品図種別が「入出力データメモリ管理部品図」の場合は、実行タイミングが処理フローの開始時点か終了時点かによって処理を分岐する。開始時点の場合はデータ構造のメモリを確保するソースコード（例えば、Ｃ言語であればmalloc文）を生成し（Ｓ７２５）、終了時点の場合はデータ構造のメモリを解放するソースコード（例えば、Ｃ言語であればfree文）を生成する（Ｓ７３０）。
【００６３】
部品図種別が「入力データ値設定部品図」の場合は、該当するデータ構造に指定された値を設定するソースコード（例えば、Ｃ言語であれば構造体メンバ変数への代入文）を生成する（Ｓ７３５）。なお、データ構造と設定値は部品図の入力端子から指定されたものを使用する。
【００６４】
部品図種別が「ライブラリ実行部品図」の場合は、該当するライブラリ関数を呼出し、実行結果を受け取るソースコードを生成する（Ｓ７４０）。なお、ライブラリ関数に引き渡す引数（入力用引数と出力用引数）は部品図の入力端子から指定されたものを使用し、ライブラリ関数の実行結果を保持するデータ構造と戻り値は出力端子から出力する。
【００６５】
部品図種別が「出力データ値取得部品図」の場合は、該当するデータ構造から値を取得するソースコード（例えば、取得元データ構造体とは別の変数への代入）を生成する（Ｓ７４５）。ただし、出力データ値取得部品図の出力端子が未接続の場合は、取得した値を格納する先がないものとして、その端子に関するソースコードは生成しない。なお、取得元データ構造、取得するデータ要素、取得結果の格納先データ構造は部品図の入力端子から指定されたものを使用し、格納先データ構造を出力端子から出力する。
【００６６】
図８は、プログラミング言語ソースコード６０の一例として、図４の処理フローに対してコード生成した結果を示す説明図である。「sizeX=640、sizeY=480」については、モデルの外部からパラメータを与えた例として記載している。
なお、本実施形態では、変数名の決定方法として、各部品図の入出力端子名を基準に設定する方法を用いているが、他の方法でも構わない。例えば、部品図間の接続線に名前を付け、その名前を変数名にしてもよい。
【００６７】
また、本実施形態ではライブラリ関数とそのデータ構造に関係する部品図について説明するが、下位部品図として条件分岐、繰り返しなどの処理フロー制御部品図を追加した場合、Ｓ７２０の処理分岐先が部品図ごとに増える。分岐先でのコード生成処理は公知の方法で構わない。例えば、部品図種別が処理分岐部品図であれば条件判定文と判定結果に応じた処理のコード生成を行う（Ｃ言語であればif〜else文を生成する）。
【００６８】
以上説明した本実施形態は、ソフトウェア処理を、プログラミング言語ではなく部品図接続によって記述するモデルベース開発技術に関するものであり、特に、画像センサによる認識ソフトウェアのモデルベース開発技術に関するものである。
【００６９】
本実施形態の画像処理ソフトウェア開発装置１は、プログラミング言語用の画像処理ライブラリ機能と、前記機能への入出力データ構造に対し、入出力データメモリ管理部品図、入力データ値設定部品図、ライブラリ実行部品図、出力データ値取得部品図、の４種の部品図を有し、さらに、前記４種の部品図を下位部品図として一組にまとめた上位部品図を有し、下位部品図と上位部品図を組み合わせてソフトウェアを記述することを特徴とする。
【００７０】
本実施形態の画像処理ソフトウェア開発装置１は、前記部品図として、画像処理ライブラリ機能の入出力引数と対応する部品図接続端子を有し、前記接続端子は、画像処理ライブラリ機能の入出力変数名もしくはデータ型名を接続端子名とする。さらに、画像処理ソフトウェア開発装置１を用いて記述されたソフトウェア処理フロー図から、前記処理フロー図を構成する部品図と対応する画像処理ライブラリ機能の呼出しソースコードを、プログラミング言語で出力する機能を有する。
【００７１】
本実施形態の画像処理ソフトウェア開発装置１は、ある前記上位部品図の下位階層に含まれる入出力データメモリ管理部品図によって確保されたメモリ領域を、別の上位部品図の下位階層に含まれるライブラリ実行部品図に接続可能な構造を有する。
【００７２】
本実施形態の画像処理ソフトウェア開発装置１は、前記入出力データ構造が画像データである場合、前記部品図接続端子には画像データの管理情報を入出力し、画像データ内に含まれる画素データはプログラミング言語ライブラリ５０の内部で管理する。
つまり、ライブラリ関数に入出力するデータ構造が画像データである場合、その接続端子には画像データの管理情報を入出力するための下位部品図の接続端子を接続するとともに、画像データ内に含まれる画素データは画像処理ライブラリ内部で管理する。
【００７３】
本実施形態では、データのメモリ管理方法を、計算機の記憶装置に対する領域割当処理および解放処理によって実装し、データの入出力方法を、計算機の記憶装置に対する入出力処理によって実装し、データの処理を計算機の演算処理によって実装した、画像処理ソフトウェア開発プログラム、および、該コンピュータプログラムを計算機上で実行するソフトウェア開発装置、によって構成される。
【００７４】
本実施形態により、画像処理ソフトウェア開発者は、プログラミング言語によるプログラミングを行わず、部品図接続によって画像処理アルゴリズムを設計、実装することができる。さらに、設計、実装されたモデル図から自動コード生成機能を用いて、組込ＬＳＩ用のプログラミング言語ライブラリ５０を呼び出すコードを生成することができる。この際、上位部品図と下位部品図を組み合わせて用いることで、計算機リソース使用量を減らしたソースコードを生成することができる。
【００７５】
アルゴリズム試作時点では上位部品図接続によるモデルベース開発を行うことにより、プログラミング言語よりも抽象度の高い（つまり、実装すべき内容が少ない）部品図接続によりアルゴリズム開発することができる。また、アルゴリズム確定後は下位部品図の接続関係を改善することで、組込機器７０の処理効率およびメモリ使用効率の高い実装を行うことができる。
【００７６】
さらに、自動コード生成の際に、各データ構造に対するメモリ確保（および解放）、値の代入、値の取得を行うコードに加え、組込ＬＳＩ用にあらかじめ規定されたライブラリ関数の呼出しコードを生成することができ、プログラミング言語によるプログラミングを行わずに画像処理ソフトウェアの開発を行うことができる。つまり、プログラミング言語ライブラリ５０を統合したモデルベース開発を実現することができる。
【００７７】
なお、本実施形態では、本実施形態による処理を実行する計算機環境において、本実施形態における任意の一つの処理手段を二つ以上の処理手段に分割して実現しても、二つ以上の任意の処理手段を統合して一つの処理手段として実現してもよく、本実施形態の提供する機能を損なわない限りその実現形態を制約するものではない。
【符号の説明】
【００７８】
１      画像処理ソフトウェア開発装置
１０    部品図定義部
２０    モデル図編集部
３０    モデル実行部
４０    コード生成部
５０    プログラミング言語ライブラリ
６０    プログラミング言語ソースコード
７０    組込機器
【図１】
2013018204.tif 000003
【図２】
2013018204.tif 000004
【図３】
2013018204.tif 000005
【図４】
2013018204.tif 000006
【図５】
2013018204.tif 000007
【図６】
2013018204.tif 000008
【図７】
2013018204.tif 000009
【図８】
2013018204.tif 000010
【国際調査報告】
2013018204.tif 000011
2013018204.tif 000012
2013018204.tif 000013
2013018204.tif 000014