(57)【要約】【課題】ユーザが有している特定のアプリケーション画像処理についての知識を利用して、より効率かつ高速な画像処理を実現できる構成が要望されている。【解決手段】画像処理装置は、複数の処理部と、被測定物を撮像することで生成された画像データを受付ける入力部と、対話処理部と、対話処理部が受付けた画像処理についての設定に従って、複数の処理部に対する命令列を生成する生成部とを含む。対話処理部は、並列的な実行の設定を指示するユーザ操作に応答して、インターフェイス画面において、並列的な実行の開始を指示する開始処理項目と当該並列的な実行の終了を指示する終了処理項目との組を、指定されている処理項目の実行順序に関連付けて追加するとともに、複数の処理部のうち２つ以上の処理部に対して並列的に実行させるそれぞれの処理項目の選択を任意に受付けることができるように構成される。【選択図】図６
2014203309.tif 000002
【特許請求の範囲】
【請求項１】
画像処理装置であって、
複数の処理部と、
被測定物を撮像することで生成された画像データを受付ける入力部と、
予め定義された複数の処理項目のうち前記画像データに対する画像処理に用いる１つ以上の処理項目の選択、およびその選択された処理項目の実行順序の指定を受付けるためのインターフェイス画面を少なくとも提供する対話処理部と、
前記対話処理部が受付けた画像処理についての設定に従って、前記複数の処理部に対する命令列を生成する生成部とを備え、
前記対話処理部は、並列的な実行の設定を指示するユーザ操作に応答して、前記インターフェイス画面において、並列的な実行の開始を指示する開始処理項目と当該並列的な実行の終了を指示する終了処理項目との組を、指定されている処理項目の実行順序に関連付けて追加するとともに、前記複数の処理部のうち２つ以上の処理部に対して並列的に実行させるそれぞれの処理項目の選択を任意に受付けることができるように構成される、画像処理装置。
【請求項２】
前記生成部は、前記開始処理項目と前記終了処理項目との間で並列的に実行されるように指定されたそれぞれの処理を、互いに異なる処理部で実行させるための命令列を出力する、請求項１に記載の画像処理装置。
【請求項３】
前記生成部は、前記開始処理項目と前記終了処理項目との間で並列的に実行されるように指定されたそれぞれの処理のすべてについて実行が完了した後に、前記終了処理項目に引き続いて指定されている処理項目を実行させるための命令列を出力する、請求項２に記載の画像処理装置。
【請求項４】
前記対話処理部は、並列的な実行の設定の削除を指示するユーザ操作に応答して、前記開始処理項目と前記終了処理項目との組を同時に削除する、請求項１〜３のいずれか１項に記載の画像処理装置。
【請求項５】
前記対話処理部は、前記開始処理項目と前記終了処理項目との間で並列的に実行されるように指定された処理の各々として、複数の処理項目を受付けることができるように構成される、請求項１〜３のいずれか１項に記載の画像処理装置。
【請求項６】
前記開始処理項目は、並列的な実行の開始前に、当該並列的な実行に係る処理部にそれぞれ対応付けられた記憶領域を確保するとともに、当該並列的な実行の前に使用されている画像データを各記憶領域に複製するための命令を含む、請求項１〜３のいずれか１項に記載の画像処理装置。
【請求項７】
前記終了処理項目は、並列的な実行の開始前に使用されていた画像データを復元するための命令を含む、請求項６に記載の画像処理装置。
【請求項８】
並列的な実行が設定された処理項目以外の処理項目について、予め定められた規則に従って、前記２つ以上の処理部に対して並列的に実行させるように設定を変更する変更部をさらに備える、請求項１に記載の画像処理装置。
【請求項９】
被測定物を撮像することで生成された画像データに対する画像処理を実行する、複数の処理部を含む画像処理装置における制御方法であって、
予め定義された複数の処理項目のうち前記画像データに対する画像処理に用いる１つ以上の処理項目の選択、およびその選択された処理項目の実行順序の指定を受付けるためのインターフェイス画面を少なくとも提供するステップと、
並列的な実行の設定を指示するユーザ操作に応答して、前記インターフェイス画面において、並列的な実行の開始を指示する開始処理項目と当該並列的な実行の終了を指示する終了処理項目との組を、指定されている処理項目の実行順序に関連付けて追加するとともに、前記複数の処理部のうち２つ以上の処理部に対して並列的に実行させるそれぞれの処理項目の選択を任意に受付けるステップと、
入力された画像処理についての設定に従って、前記複数の処理部に対する命令列を生成するステップとを備える、制御方法。
【請求項１０】
被測定物を撮像することで生成された画像データに対する画像処理を実行する、複数の処理部を含む画像処理装置に向けられたプログラムであって、コンピュータに
予め定義された複数の処理項目のうち前記画像データに対する画像処理に用いる１つ以上の処理項目の選択、およびその選択された処理項目の実行順序の指定を受付けるためのインターフェイス画面を少なくとも提供するステップと、
並列的な実行の設定を指示するユーザ操作に応答して、前記インターフェイス画面において、並列的な実行の開始を指示する開始処理項目と当該並列的な実行の終了を指示する終了処理項目との組を、指定されている処理項目の実行順序に関連付けて追加するとともに、前記複数の処理部のうち２つ以上の処理部に対して並列的に実行させるそれぞれの処理項目の選択を任意に受付けるステップと、
入力された画像処理についての設定に従って、前記複数の処理部に対する命令列を生成するステップとを実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の処理部を有する画像処理装置、その画像処理装置における制御方法、およびその画像処理装置に向けられたプログラムに関するものである。
【背景技術】
【０００２】
ＦＡ（Factory Automation）分野などにおいては、ワークなどの被測定物上の欠陥や汚れの有無を検査したり、その大きさなどを計測したり、被測定物上の文字や図形などを認識したりする装置として、いわゆる視覚センサが実用化されている。このような視覚センサは、被測定物を撮像することで得られる画像データに対して、各種の画像処理を行うことで、上述のような計測処理を実現する。
【０００３】
このようなＦＡ分野では、ライン速度の向上や装置コストの低減といったニーズが存在する。このようなニーズに応えるため、１台の画像処理装置に複数の処理部を搭載して、並列処理を行う構成が知られている。例えば、特開２０１１−０５３７８７号公報（特許文献１）は、ニーズに応じて複数の並列処理を選択的に実行可能な画像処理装置などを開示する。より具体的には、特許文献１は、モード選択手段により選択された並列処理モードに従って、対象の処理手順に含まれる複数の処理単位の各々を複数の演算処理のいずれかに割当てる並列化手段を含む。
【０００４】
特許文献１に開示される画像処理装置は、複数の並列処理モードのうちユーザが選択した並列処理モードに従って、一部の処理が自動的に並列化される。すなわち、特許文献１に開示される技術は、一連の処理に対する並列化を自動的に実現するためのものである。特許文献１の図１３は、ユーザがドラッグ・ドロップ操作によって、ユーザが処理単位の追加・削除や実行順序の並び替えを行うことができる構成を開示するが、並列化自体は画像処理装置（並列化手段）が自動的に実行する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−０５３７８７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述のような自動的な並列化を採用した場合には、予め定められた一般的な規則に従って、処理項目を並列化するため、画像処理装置が適用されるアプリケーションの種類によっては、潜在的に並列化できる処理項目があるにもかかわらず、その潜在的な可能性までをカバーできない場合がある。すなわち、特許文献１に開示される構成は、画像処理についての知識の乏しいユーザに対しては好適であるが、画像処理についての知識を有しているユーザに対しては、その潜在的な可能性を十分に利用できない場合がある。
【０００７】
そのため、ユーザが有している特定のアプリケーション画像処理についての知識を利用して、より効率かつ高速な画像処理を実現できる構成が要望されている。
【課題を解決するための手段】
【０００８】
本発明のある局面に係る画像処理装置は、複数の処理部と、被測定物を撮像することで生成された画像データを受付ける入力部と、予め定義された複数の処理項目のうち画像データに対する画像処理に用いる１つ以上の処理項目の選択、およびその選択された処理項目の実行順序の指定を受付けるためのインターフェイス画面を少なくとも提供する対話処理部と、対話処理部が受付けた画像処理についての設定に従って、複数の処理部に対する命令列を生成する生成部とを含む。対話処理部は、並列的な実行の設定を指示するユーザ操作に応答して、インターフェイス画面において、並列的な実行の開始を指示する開始処理項目と当該並列的な実行の終了を指示する終了処理項目との組を、指定されている処理項目の実行順序に関連付けて追加するとともに、複数の処理部のうち２つ以上の処理部に対して並列的に実行させるそれぞれの処理項目の選択を任意に受付けることができるように構成される。
【０００９】
好ましくは、生成部は、開始処理項目と終了処理項目との間で並列的に実行されるように指定されたそれぞれの処理を、互いに異なる処理部で実行させるための命令列を出力する。
【００１０】
さらに好ましくは、生成部は、開始処理項目と終了処理項目との間で並列的に実行されるように指定されたそれぞれの処理のすべてについて実行が完了した後に、終了処理項目に引き続いて指定されている処理項目を実行させるための命令列を出力する。
【００１１】
好ましくは、対話処理部は、並列的な実行の設定の削除を指示するユーザ操作に応答して、開始処理項目と終了処理項目との組を同時に削除する。
【００１２】
好ましくは、対話処理部は、開始処理項目と終了処理項目との間で並列的に実行されるように指定された処理の各々として、複数の処理項目を受付けることができるように構成される。
【００１３】
好ましくは、開始処理項目は、並列的な実行の開始前に、当該並列的な実行に係る処理部にそれぞれ対応付けられた記憶領域を確保するとともに、当該並列的な実行の前に使用されている画像データを各記憶領域に複製するための命令を含む。
【００１４】
さらに好ましくは、終了処理項目は、並列的な実行の開始前に使用されていた画像データを復元するための命令を含む。
【００１５】
好ましくは、画像処理装置は、並列的な実行が設定された処理項目以外の処理項目について、予め定められた規則に従って、２つ以上の処理部に対して並列的に実行させるように設定を変更する変更部をさらに含む。
【００１６】
本発明の別の局面に係れば、被測定物を撮像することで生成された画像データに対する画像処理を実行する、複数の処理部を含む画像処理装置における制御方法が提供される。制御方法は、予め定義された複数の処理項目のうち画像データに対する画像処理に用いる１つ以上の処理項目の選択、およびその選択された処理項目の実行順序の指定を受付けるためのインターフェイス画面を少なくとも提供するステップと、並列的な実行の設定を指示するユーザ操作に応答して、インターフェイス画面において、並列的な実行の開始を指示する開始処理項目と当該並列的な実行の終了を指示する終了処理項目との組を、指定されている処理項目の実行順序に関連付けて追加するとともに、複数の処理部のうち２つ以上の処理部に対して並列的に実行させるそれぞれの処理項目の選択を任意に受付けるステップと、入力された画像処理についての設定に従って、複数の処理部に対する命令列を生成するステップとを含む。
【００１７】
本発明のさらに別の局面に係れば、被測定物を撮像することで生成された画像データに対する画像処理を実行する、複数の処理部を含む画像処理装置に向けられたプログラムが提供される。当該プログラムは、コンピュータに、予め定義された複数の処理項目のうち画像データに対する画像処理に用いる１つ以上の処理項目の選択、およびその選択された処理項目の実行順序の指定を受付けるためのインターフェイス画面を少なくとも提供するステップと、並列的な実行の設定を指示するユーザ操作に応答して、インターフェイス画面において、並列的な実行の開始を指示する開始処理項目と当該並列的な実行の終了を指示する終了処理項目との組を、指定されている処理項目の実行順序に関連付けて追加するとともに、複数の処理部のうち２つ以上の処理部に対して並列的に実行させるそれぞれの処理項目の選択を任意に受付けるステップと、入力された画像処理についての設定に従って、複数の処理部に対する命令列を生成するステップとを実行させる。
【発明の効果】
【００１８】
本発明によれば、ユーザが有している特定のアプリケーション画像処理についての知識を利用して、より効率かつ高速な画像処理を実現できる。
【図面の簡単な説明】
【００１９】
【図１】本実施の形態に係る画像処理装置を含む画像処理システムの全体構成を示す概略図である。
【図２】本実施の形態に係る画像処理装置の機能構成を示す模式図である。
【図３】本実施の形態に係る画像処理装置が提供するフロー作成に係る操作画面を示す図である。
【図４】フローに対する自動並列化の一例を説明するための図である。
【図５】フローに対する自動並列化および手動並列化を比較して説明するための図である。
【図６】本実施の形態に係る画像処理装置が提供する手動並列化に係る画面ユーザインターフェイスの一例を示す図である。
【図７】本実施の形態に係る画像処理装置が提供する手動並列化に係る画面ユーザインターフェイスの一例を示す図である。
【図８】本実施の形態に係る画像処理装置に実装される制御プログラムの構成を示す模式図である。
【図９】本実施の形態に係る並列化処理の実行に伴う画像データの取扱いを説明するための図である。
【図１０】本実施の形態に係る画像処理装置における処理手順を説明するためのフローチャートである。
【図１１】本実施の形態に係る画像処理装置を含む画像処理システムの全体構成を示す概略図である。
【図１２】図１０に示す画像処理システムにおけるフローに対する並列化を説明するための図である。
【図１３】図１２（ｃ）に示すフローに対応する画面ユーザインターフェイスの一例を示す図である。
【図１４】本実施の形態に係る画像処理装置を含む画像処理システムの全体構成を示す概略図である。
【図１５】図１４に示す画像処理システムにおけるフローに対する並列化を説明するための図である。
【図１６】図１５（ｃ）に示すフローに対応する画面ユーザインターフェイスの一例を示す図である。
【発明を実施するための形態】
【００２０】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００２１】
＜Ａ．画像処理システムの構成＞
まず、本発明の実施の形態に係る画像処理装置１００を含む画像処理システム１の全体構成について説明する。図１は、本実施の形態に係る画像処理装置１００を含む画像処理システム１の全体構成を示す概略図である。
【００２２】
図１を参照して、画像処理システム１は、主要なコンポーネントとして、視覚センサとも称される画像処理装置１００と、画像処理装置１００に接続された撮像部８ａ，８ｂと、画像処理装置１００と通信可能なＰＬＣ（Programmable Logic Controller）５とを含む。一例として、表示部１０２と一体的に構成された画像処理装置１００を示す。
【００２３】
画像処理装置１００は、生産ラインなどに組み込まれ、被測定物（以下「ワーク２」とも称す。）上の欠陥や汚れの有無の検査、ワーク２の大きさや配置向きなどの計測、ワーク２表面上の文字や図形などの認識といった画像処理を実行する。すなわち、画像処理装置１００は、ワーク２を撮像することで生成された画像データに対する画像処理を実行する。画像処理システム１においては、ワーク２はベルトコンベヤなどの搬送機構６によって搬送され、撮像部８ａ，８ｂによって順次撮像される。ＰＬＣ５は、画像処理装置１００と連係して、搬送機構６などの制御を実行する。
【００２４】
撮像部８ａ，８ｂ（以下「撮像部８」とも総称する。）は、一例として、レンズなどの光学系に加えて、ＣＣＤ（Coupled Charged Device）やＣＭＯＳ（Complementary Metal Oxide Semiconductor）センサといった、複数の画素に区画された撮像素子を含んで構成される。撮像部８による撮像によって取得された画像データ（以下「カメラ画像」とも称す。）は、画像処理装置１００へ伝送される。そして、画像処理装置１００は、撮像部８により撮像されたカメラ画像に対して画像処理を行う。撮像部８によって撮像されるワーク２に対して光を照射する照明装置をさらに設けてもよい。より多くの撮像部８を接続できるように画像処理装置１００を構成してもよい。
【００２５】
画像処理装置１００は、撮像部８からのカメラ画像に対して予め設定された画像処理を実行するための「測定モード」と、画像処理の内容を設定や調整するための「設定モード」とを少なくとも有している。「設定モード」において、ユーザは、画像処理を実現するための処理項目およびその実行順などを画像処理装置１００に対して設定できる。この画像処理に係る設定手順などの詳細については、後述する。
【００２６】
＜Ｂ．画像処理装置の構成＞
次に、図１に示す画像処理システム１に含まれる画像処理装置１００の全体構成について説明する。図２は、本実施の形態に係る画像処理装置１００の機能構成を示す模式図である。
【００２７】
図２を参照して、画像処理装置１００は、典型的には、汎用的なコンピュータアーキテクチャに従う構造を有しており、予めインストールされたプログラムをプロセッサが実行することで、後述するような各種の画像処理を実現する。
【００２８】
より具体的には、画像処理装置１００は、ＣＰＵ（Central Processing Unit）やＭＰＵ（Micro-Processing Unit）などのプロセッサ１１０と、ＲＡＭ（Random Access Memory）１１２と、表示コントローラ１１４と、システムコントローラ１１６と、Ｉ／Ｏ（Input Output）コントローラ１１８と、ハードディスク１２０と、カメラインターフェイス１２２と、入力インターフェイス１２４と、ＰＬＣインターフェイス１２６と、通信インターフェイス１２８と、メモリカードインターフェイス１３０とを含む。これらの各部は、システムコントローラ１１６を中心として、互いにデータ通信可能に接続される。
【００２９】
プロセッサ１１０は、複数の処理部に相当する複数のプロセッサコア（第１コア１１０ａ、第２コア１１０ｂ、第３コア１１０ｃ、第４コア１１０ｄ）を有する。プロセッサ１１０は、システムコントローラ１１６との間でプログラム（コード）などを交換して、これらを所定順序で実行することで、目的の演算処理を実現する。
【００３０】
コア１１０ａ〜１１０ｄは、互いに独立して命令を実行可能である。プロセッサ１１０に実装されるコアの数は、４個に限られず、技術的に実現可能な範囲の複数個であればよい。図２には、単一のプロセッサ内に複数のコアが実装されている構成（いわゆる、マルチコアプロセッサシステム）を示すが、複数のプロセッサを実装する構成（いわゆる、マルチプロセッサシステム）を採用してもよい。さらに、マルチプロセッサシステムを構成するプロセッサの一部または全部がマルチコアプロセッサシステムを採用していてもよい。すなわち、本実施の形態に係る画像処理装置は、互いに独立して処理を実行可能な複数の処理部を有していれば、どのようなアーキテクチャを採用してもよい。
【００３１】
システムコントローラ１１６は、プロセッサ１１０、ＲＡＭ１１２、表示コントローラ１１４、およびＩ／Ｏコントローラ１１８とそれぞれバスを介して接続されており、各部との間でデータ交換などを行うとともに、画像処理装置１００全体の処理を司る。
【００３２】
ＲＡＭ１１２は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）などの揮発性の記憶装置であり、ハードディスク１２０から読み出されたプログラムや、撮像部８によって取得されたカメラ画像（画像データ）、カメラ画像に対する処理結果、およびワークデータなどを保持する。
【００３３】
表示コントローラ１１４は、表示部１０２と接続されており、システムコントローラ１１６からの内部コマンドに従って、各種の情報を表示するための信号を表示部１０２へ出力する。表示部１０２は、一例として、液晶ディスプレイや有機ＥＬ（Electro Luminescence）ディスプレイや有機ＥＬなどを含む。
【００３４】
Ｉ／Ｏコントローラ１１８は、画像処理装置１００に接続される記録媒体や外部機器との間のデータ交換を制御する。より具体的には、Ｉ／Ｏコントローラ１１８は、ハードディスク１２０と、カメラインターフェイス１２２と、入力インターフェイス１２４と、ＰＬＣインターフェイス１２６と、通信インターフェイス１２８と、メモリカードインターフェイス１３０と接続される。
【００３５】
ハードディスク１２０は、典型的には、不揮発性の磁気記憶装置であり、プロセッサ１１０で実行される制御プログラム１５０に加えて、各種設定値などが格納される。このハードディスク１２０にインストールされる制御プログラム１５０は、メモリカード１０６などに格納された状態で流通する。さらに、ハードディスク１２０には、後述するロギング処理によって、カメラ画像が格納される。なお、ハードディスク１２０に代えて、フラッシュメモリなどの半導体記憶装置やＤＶＤ−ＲＡＭ（Digital Versatile Disk Random Access Memory）などの光学記憶装置を採用してもよい。
【００３６】
カメラインターフェイス１２２は、ワーク２（被測定物）を撮像することで生成された画像データを受付ける入力部に相当し、プロセッサ１１０と撮像部８との間のデータ伝送を仲介する。より具体的には、カメラインターフェイス１２２は、１つ以上の撮像部８と接続が可能であり、各撮像部８からの画像データを一時的に蓄積するための画像バッファ１２２ａおよび１２２ｂを含む。複数の撮像部８に対して、撮像部８の間で共有できる単一の画像バッファを設けてもよいが、処理高速化のため、それぞれの撮像部８に対応付けて独立に複数配置することが好ましい。
【００３７】
入力インターフェイス１２４は、プロセッサ１１０とキーボード１０４、マウス、タッチパネル、専用コンソールなどの入力装置との間のデータ伝送を仲介する。すなわち、入力インターフェイス１２４は、ユーザが入力装置を操作することで与えられる操作指令を受付ける。
【００３８】
ＰＬＣインターフェイス１２６は、プロセッサ１１０とＰＬＣ５との間のデータ伝送を仲介する。より具体的には、ＰＬＣインターフェイス１２６は、ＰＬＣ５によって制御される生産ラインの状態に係る情報やワーク２に係る情報などをプロセッサ１１０へ伝送する。
【００３９】
通信インターフェイス１２８は、プロセッサ１１０と図示しない他のパーソナルコンピュータやサーバ装置などとの間のデータ伝送を仲介する。通信インターフェイス１２８は、典型的には、イーサネット（登録商標）やＵＳＢ（Universal Serial Bus）などからなる。なお、後述するように、メモリカード１０６に格納されたプログラムを画像処理装置１００にインストールする形態に代えて、通信インターフェイス１２８を介して、配信サーバなどからダウンロードしたプログラムを画像処理装置１００にインストールしてもよい。
【００４０】
メモリカードインターフェイス１３０は、プロセッサ１１０と記録媒体であるメモリカード１０６との間のデータ伝送を仲介する。すなわち、メモリカード１０６には、画像処理装置１００で実行される制御プログラム１５０などが格納された状態で流通し、メモリカードインターフェイス１３０は、このメモリカード１０６から制御プログラムを読み出す。また、メモリカードインターフェイス１３０は、プロセッサ１１０の内部指令に応答して、撮像部８によって取得されたカメラ画像および／または画像処理装置１００における処理結果などをメモリカード１０６へ書き込む。なお、メモリカード１０６は、ＳＤ（Secure Digital）などの汎用的な半導体記憶デバイスや、フレキシブルディスク（Flexible Disk）などの磁気記録媒体や、ＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記録媒体等からなる。
【００４１】
また、画像処理装置１００には、必要に応じて、プリンタなどの他の出力装置が接続されてもよい。
【００４２】
上述のような汎用的なコンピュータアーキテクチャに従う構造を有するコンピュータを利用する場合には、本実施の形態に係る機能を提供するためのアプリケーションに加えて、コンピュータの基本的な機能を提供するためのＯＳ（Operating System）がインストールされていてもよい。この場合には、本実施の形態に係る制御プログラムは、ＯＳの一部として提供されるプログラムモジュールのうち、必要なモジュールを所定の順序および／またはタイミングで呼出して処理を実行するものであってもよい。すなわち、本実施の形態に係るプログラム自体は、上記のようなモジュールを含んでおらず、ＯＳと協働して処理が実行される場合もある。したがって、本実施の形態に係る制御プログラムとしては、このような一部のモジュールを含まない形態であってもよい。
【００４３】
さらに、本実施の形態に係る制御プログラムは、他のプログラムの一部に組み込まれて提供されるものであってもよい。その場合にも、プログラム自体には、上記のような組み合わせられる他のプログラムに含まれるモジュールを含んでおらず、当該他のプログラムと協働して処理が実行される。すなわち、本実施の形態に係る制御プログラムとしては、このような他のプログラムに組み込まれた形態であってもよい。
【００４４】
なお、代替的に、制御プログラムの実行により提供される機能の一部もしくは全部を専用のハードウェア回路として実装してもよい。
【００４５】
＜Ｃ．概要＞
本実施の形態に係る画像処理装置１００では、カメラ画像に対して、ユーザが任意に選択した少なくとも１つの処理項目を含む画像処理を実行可能である。この画像処理に含まれる処理項目は、ユーザによって実行順序が定められており、この一連の処理項目によって定義される画像処理の内容を、以下では「フロー」とも称す。すなわち、「フロー」は、ユーザの入力により選択された処理項目の組み合わせを意味する。また、フローを実行することを「計測処理の実行」とも称す。なお、本明細書における処理項目は、特定の用途を有する機能単位（「処理項目」または「ユニット」）であり、各処理項目について、処理対象および処理結果を特定することができるようになっている。
【００４６】
本実施の形態に係る画像処理装置１００においては、ユーザの知見を利用して画像処理をより効率化かつ高速化できるように、目的の画像処理を構成する処理項目の並列的な実行をより簡単に設定するための画面ユーザインターフェイスが提供される。このようなユーザが明示的に並列実行を指示することを、以下では「手動並列化」とも称す。本実施の形態においては、ユーザが設定したフローに含まれる処理項目について、予め定められた規則に従って並列的に実行されるようにフローを変更するような処理も併せて実装されてもよい。このような画像処理装置が処理項目を並列的に実行するように変更する動作を、以下では「自動並列化」とも称す。より好ましい実施の形態においては、手動並列化に加えて、自動並列化も実装される。
【００４７】
以下、本実施の形態に係る手動並列化に係るより詳細な内容について説明する。
＜Ｄ．フロー作成に係る画面ユーザインターフェイス＞
次に、本実施の形態に係る画像処理装置１００が提供するフロー作成に係る画面ユーザインターフェイスについて説明する。図３は、本実施の形態に係る画像処理装置１００が提供するフロー作成に係る操作画面３００を示す図である。
【００４８】
画像処理装置１００は、対話処理機能として、図３に示すような、予め定義された複数の処理項目のうち画像データに対する画像処理に用いる１つ以上の処理項目の選択、およびその選択された処理項目の実行順序の指定を受付けるためのインターフェイス画面を少なくとも提供する。
【００４９】
より具体的に、ユーザが目的の画像処理を実現するためのフローを作成する手順について説明する。操作画面３００は、設定済フロー表示領域３０２と、処理項目選択領域３０４と、カメラ画像表示領域３０６と、処理項目挿入／追加ボタン３０８と、実行順序入替ボタン３１０とを含む。設定済フロー表示領域３０２には、現在設定されているフローの内容（処理内容）がグラフィカルに表示される。処理項目選択領域３０４には、追加可能な処理項目を示すアイコンがその名称とともに一覧表示される。
【００５０】
ユーザは、操作画面３００の処理項目選択領域３０４において、目的の画像処理に必要な処理項目を選択する（（１）処理項目を選択）とともに、設定済フロー表示領域３０２において選択した処理項目を追加すべき位置（順序）を選択する（追加位置）。そして、ユーザが処理項目挿入／追加ボタン３０８を選択する（（３）挿入／追加ボタンを押す）と、処理項目が追加される（（４）処理項目が追加される）。処理項目追加後のフローの内容は、設定済フロー表示領域３０２に反映される。
【００５１】
ユーザは、この処理を適宜繰返すことで目的の画像処理を実現するためのフローを作成する。また、ユーザは、フローの作成中または作成完了後に、設定済フロー表示領域３０２において処理項目を選択した上で、実行順序入替ボタン３１０を選択することで、実行順序を適宜変更することもできる。
【００５２】
このような操作によって、ユーザは、目的の画像処理に必要なフローを作成できる。このフローの作成は、設定モードにおいて実行される。
【００５３】
その後、測定モードにおいて指示されると、指定されたフローの実行が開始される。より具体的には、フローの作成が完了する（典型的には、作成されたフローが保存される）と、その保存されたフローに対応する命令列が生成される。この命令列がプロセッサにおいて実行されることで、目的の画像処理が実現される。なお、この命令列は、プロセッサに与えられるネイティブコードであってもよいし、ＯＳやミドルウェアに対して与えられる内部コマンドであってもよいし、これらを混合したものであってもよい。
すなわち、画像処理装置１００は、対話処理によって受付けられた画像処理についての設定に従って、複数のプロセッサコア（処理部）に対する命令列を生成する。
【００５４】
＜Ｅ．並列化処理（自動設定および手動設定）＞
次に、ユーザが設定したフローの実行効率を高めるための並列化処理について説明する。特に、並列化処理を自動設定する場合と手動設定する場合とを比較して説明する。図４は、フローに対する自動並列化の一例を説明するための図である。
【００５５】
図４（ａ）には、ユーザが設定したフローの一例を示す。図４（ａ）に示すフロー４００は、直列的に実行される処理項目４０２，４０４，４０６，４０８，４１０，４１２，４１４，４１６を含む。初期段階では、ユーザは、一連の処理が直列的に実行されるようなフローを設計したとする。より具体的には、「０．カメラ画像入力」と表記される処理項目４０２は、カメラ画像を取得する命令を含む。「１．サーチ」と表記される処理項目４０４は、カメラ画像内で予め登録されたモデルと一致する領域をサーチする命令を含む。「２．フィルタ」と表示される処理項目４０６は、カメラ画像を後段の処理項目での処理に適した画像に調整する命令を含む。処理項目４０６は、例えば、指定された範囲の濃度を引き伸ばすことで不要な背景を除去する命令や、画面全体の明度変化の追従や照明ムラなどの段階的な明度変化を除去する命令を含み得る。「３．キズ汚れ」と表示される処理項目４０８は、ワーク２の表面に存在する、キズ、汚れ、部品の欠け、バリなどを検査する命令を含む。「４．カラーグレー」と表示される処理項目４１０は、カラー画像を特定の色で強調されたモノクロ画像に変換する命令を含む。「５．サーチ」と表示される処理項目４１２は、ワーク２の形状識別や位置を検出する命令を含む。「６．ラベリング」と表示される処理項目４１４は、指定した色のラベルがいくつあるかをカウントする命令や、指定したラベルの面積や重心位置を計測する命令を含む。「７．演算」と表示される処理項目４１６は、先に実行された複数の処理項目での結果を用いて評価を行うための命令を含む。処理項目４１６は、例えば、処理項目４１２におけるサーチにおいて一致度（相関度）が８０％以上であり、かつ、処理項目４１４において「輝度値が１００以下」の領域が全体面積の２０％以上存在する場合に「ＯＫ」と判断する、といった複合的な条件を用いて評価する命令を含み得る。
【００５６】
図４（ａ）に示すようなユーザ設定のフロー４００に対して、処理時間短縮を目的として、並列化（マルチタスク化）をする場合を考える。処理項目間の制約を無視して並列化すると、例えば、図４（ｂ）に示すようなフロー４２０へ変換できる。この図４（ｂ）に示すフロー４２０では、処理項目４０２の実行後に、第１タスクとして、処理項目４０４，４１０，４１４，４１６の計４つの処理項目が直列的に実行され、第１タスクと並列的に実行される第２タスクとして、処理項目４０６，４０８，４１２の計３つの処理項目が直列的に実行されることが指示される。
【００５７】
しかしながら、図４（ｂ）に示す並列化されたフロー４２０では、カメラ画像をモノクロ画像に変換する命令である処理項目４１４の実行前に、処理項目４１２（４．カラーグレー）の実行が開始されるので、カラー画像に対してサーチ処理が実行されることになる。すなわち、図４（ｂ）に示すフローでは、処理項目４１２の処理が適切に実行されない。
【００５８】
また、処理項目４１６は、処理項目４１２および処理項目４１４の処理結果を参照して処理を実行する必要があるが、図４（ｂ）に示すフローでは、処理項目４１２の実行完了前に、処理項目４１６の実行が開始されている。すなわち、処理項目４１２におけるサーチ処理が終わる前に処理項目４１６によってそのデータが参照されることになる。この参照先に格納されているデータは、過去の計測処理における計測結果であり、誤った結果が算出されることになる。
【００５９】
このように、フローの並列化には、各処理項目の前後にある関連する処理項目を考慮する必要がある。すなわち、自動的な並列化処理では、以下のような処理項目が存在すれば、その存在する位置で並列に実行される処理を互いに同期させる（つまり、他の処理項目での実行が完了するまで待つ）必要がある。
【００６０】
（１）複数の処理項目が共通して使用する画像データに何らかの加工を加える処理項目
（２）他の処理項目の結果を参照する処理項目
このような制約に従って並列化することで得られるフロー４３０を図４（ｃ）に示す。この図４（ｃ）に示す並列化されたフロー４３０では、処理項目４１２と処理項目４１４とが並列的に実行される。すなわち、処理項目４１２と処理項目４１４とのうち処理完了に要する時間が短い方の処理項目（図４（ｃ）の例では処理項目４１４）の時間分だけ、全体的な処理時間を短縮できる（図４（ｃ）に示す並列化効果）。この図４（ｃ）に示す並列化されたフロー４３０のように、制約に従って並列化した場合には、常に正しく処理されるように並列化されるが、その時間短縮の効果（並列化効果）をあまり高めることができない場合がある。
【００６１】
また、自動的に並列化を行う場合には、それぞれの処理項目が必要とする処理時間やパラメータによっても動作が変化するので、どのような条件においても正しく処理されるように並列化する必要がある。その結果、並列化効果を落とすことになっても、より安全な並列化を行う必要がある。
【００６２】
これに対して、対象のフローを作成したユーザの知見を利用することで、並列化効果をより高めることもできる。
【００６３】
図５は、フローに対する自動並列化および手動並列化を比較して説明するための図である。図５（ａ）には、図４（ａ）と同じフロー４００を示し、図５（ｂ）には、図４（ｂ）と同じ並列化されたフロー４３０を示す。一方、図５（ｃ）および図５（ｄ）には、ユーザの知見を利用して並列化されたフロー４４０および４５０をそれぞれ示す。
【００６４】
一つの知見として、図５（ａ）に示すフロー４００では、処理項目４０２においてカメラ画像を取得した後、実質的には、当該取得したカメラ画像に対して、処理項目４０４のサーチ処理と、処理項目４０６および４０８のキズ汚れ処理との２つの処理が実行される。その後、処理項目４１０においてグレー画像（モノクロ画像）に変換された後、処理項目４１２のサーチ処理および処理項目４１４のラベリング処理がそれぞれ独立に実行される。したがって、モノクロ画像への変換前の段階で、サーチ処理およびキズ汚れ処理を並列化できることがわかる。また、モノクロ画像への変換後の段階で、サーチ処理およびラベリング処理を並列化できることがわかる。このような知見を用いることで、図５（ｃ）に示すようなフロー４３０（手動並列化パターンＡ）を得ることができる。この図５（ｃ）に示すフロー４４０では、図４（ｂ）に示すフロー４２０のような誤った処理が実行されることを回避できる。
【００６５】
別の知見として、図５（ａ）に示すフロー４００では、処理項目４０２において取得されたカメラ画像そのものに対して処理項目４０４のサーチ処理が実行され、その後、処理項目４０６においてフィルタ処理された画像に対して、処理項目４０８のキズ汚れ処理が実行されるとともに、処理項目４１０のフィルタ処理された画像に対して、処理項目４１２，４１４，４１６が実行される。このような知見を用いることで、図５（ｄ）に示すようなフロー４５０（手動並列化パターンＢ）を得ることができる。この図５（ｄ）に示すフロー４５０では、図４（ｂ）に示すフロー４２０のような誤った処理が実行されることを回避できる。
【００６６】
また、図５（ｃ）および図５（ｄ）に示すフローによれば、図５（ｂ）に示す制約に従って自動的に並列化されたフローによって得られる並列化効果に比較して、より大きな並列化効果を得ることができる。
【００６７】
このように、画像処理についての知識を有しているユーザのもつ知見を利用することで、より大きな並列化効果を得ることができる。すなわち、並列化に必要なそれぞれの処理項目の割当てを手動で（つまり、ユーザの知見を利用して）調整することで、より処理時間の短いフローの構成を実現できる。
【００６８】
＜Ｆ．手動並列化に係る画面ユーザインターフェイス＞
次に、本実施の形態に係る手動並列化に係る画面ユーザインターフェイスについて説明する。本実施の形態においては、ユーザが並列化を明示的に設定することができる。すなわち、画像処理装置１００には、手動並列化の機能が搭載されており、その機能設定に係る画面ユーザインターフェイスも提供される。典型的には、図３に示す操作画面３００の処理項目選択領域３０４に表示される処理項目の一つとして、手動並列化の機能を設定するための処理項目が追加される。
【００６９】
図６および図７は、本実施の形態に係る画像処理装置１００が提供する手動並列化に係る画面ユーザインターフェイスの一例を示す図である。図６（ａ）に示すように、初期状態または何らかの処理項目が設定されている状態において、処理項目選択領域３０４に表示される手動並列化のアイコンをユーザが選択することで、設定済フロー表示領域３０２において、手動並列化ブロック３５０が設定中のフローに追加される。
【００７０】
この手動並列化ブロック３５０は、少なくとも、並列処理開始を示す処理項目３５２と、並列処理終了を示す処理項目３５４との組を含む。そして、処理項目３５２と処理項目３５４との間に並列処理の対象になる１つ以上の並列化タスク（図６（ａ）に示す例では、並列化タスク３６０および３７０）を含む。手動並列化ブロック３５０に含まれる並列化タスクの数はユーザが任意に変更することもできる。すなわち、ユーザの操作によって、指定された手動並列化ブロック３５０に対して、並列化タスクの追加または削除が行われる。
【００７１】
並列処理開始を示す処理項目３５２は、複数のプロセッサコア（処理部）に対する命令列を生成するとともに、すべての命令列の処理が終了したら処理終了項目（処理項目３５４）へ移る処理を指示する。また、並列処理終了を示す処理項目３５４は、処理終了項目（処理項目３５４）から処理が移ったら、後続処理に移る。
【００７２】
このように、画像処理装置１００の対話処理機能は、並列的な実行の設定を指示するユーザ操作に応答して、並列的な実行の設定を指示するユーザ操作に応答して、インターフェイス画面において、並列的な実行の開始を指示する開始処理項目（処理項目３５２）と当該並列的な実行の終了を指示する終了処理項目（処理項目３５４）との組を、指定されている処理項目の実行順序に関連付けて追加するとともに、複数のプロセッサコア（処理部）のうち２つ以上の処理部に対して並列的に実行させるそれぞれの処理項目の選択を任意に受付けることができるように構成される。
【００７３】
但し、原理的には、画像処理装置１００に含まれる処理部（典型的には、コア数やプロセッサ数）を超えたタスクを並列実行できないので、手動並列化ブロック３５０は、処理部の数を超えない範囲の数の並列化タスクを含み得る。
【００７４】
本実施の形態においては、一例として、処理項目選択領域３０４に表示される手動並列化のアイコンが選択されると、所定数（典型的には、２個）の並列化タスクを含む並列化ブロックが自動的に挿入される。典型的には、並列化ブロックの各々は、独立したスレッドとして実行される。すなわち、図６（ｂ）に示すような２つの並列化タスクが設定されている場合には、手動並列化ブロック３５０が実行されることで、それぞれの並列化タスクに対応する複数のスレッドが生成され、各スレッドにおいて、予め設定された処理項目がそれぞれ実行される。
【００７５】
並列化ブロックが挿入されたフローに対して並列化タスクを示すブロックをユーザが選択すると、対応する並列化タスクにおいて実行される処理項目がより詳細に表示される。一例として、図６（ａ）に示すように、並列化タスク３６０および３７０を含む手動並列化ブロック３５０が設定済フロー表示領域３０２において設定されており、並列化タスク３６０においては、並列化タスクの開始を示す処理項目３６２に加えて、ユーザが任意に選択した処理項目として、２つのサーチ処理に関する処理項目３６４および３６６が設定されている。並列化タスク３６０においては、処理項目３６２、処理項目３６４および処理項目３６６が直列的に実行される。
【００７６】
同様に、並列化タスク３７０においては、並列化タスクの開始を示す処理項目３７２に加えて、ユーザが任意に選択した処理項目として、エッジコードを用いたサーチ処理にそれぞれ関する処理項目３７４および３７６が設定されている。並列化タスク３７０においては、処理項目３７２、処理項目３７４および処理項目３６６が直列的に実行される。
【００７７】
このように、操作画面３００においては、開始処理項目（処理項目３５２）と終了処理項目（処理項目３５４）との間で並列的に実行されるように指定された処理の各々として、複数の処理項目を受付けることができるように構成される。各プロセッサコア（処理部）について、並列的な実行に係る処理項目を複数指定できるように構成される。言い換えれば、並列化タスク３６０および３７０の各々において、複数の処理項目を設定することもできる。
【００７８】
図６に示すように、それぞれのブロック（処理項目）は、典型的には、ツリー構造を用いて階層的に表示される。図６（ｂ）において、先行の手動並列化ブロックから次の手動並列化ブロックまでが１つの並列処理（スレッド）となる。この１つの並列処理の任意の位置に処理項目を追加することで、並列化タスクに含まれる処理項目として追加される。
【００７９】
上述のような手動並列化としてユーザが設定した内容の詳細は、典型的には、ツリー構造を用いてその階層などに応じて、表示内容を適宜変更することができる。例えば、図７（ａ）に示すように、並列処理開始を示す処理項目３５２のボタン３５２ａをユーザが選択すると、設定されている詳細な内容が展開される。その逆に、詳細な内容が展開表示されている状態から、その詳細な内容を折りたたむことで、簡素化された表示にすることもできる。すなわち、図７には、手動並列化ブロック３５０に含まれるすべての並列化タスクおよびそれに対する設定内容を表示させることができる。
【００８０】
また、いずれかの並列化タスク毎にその設定内容を表示させることもできる。例えば、図７（ｂ）に示すように、並列化タスク３６０のボタン３５２ａをユーザが選択すると、選択された並列化タスクについて設定されている詳細な内容が展開される。
【００８１】
さらに、設定済フロー表示領域３０２においていずれかの処理項目が選択されると、対応する範囲（ブロック）が一括して選択される。例えば、図７（ａ）に示すように、並列処理開始を示す処理項目３５２が選択されると、手動並列化ブロックの全体が選択される。つまり、追加および／または削除については、手動並列化ブロックの単位で実行される。あるいは、図７（ｂ）に示すように、並列化タスク３６０が選択されると、その並列化タスク３６０の全体が選択される。
【００８２】
上述のように、画像処理装置１００の対話処理機能では、並列的な実行の設定の削除を指示するユーザ操作に応答して、並列的な実行に係る開始位置（処理項目３５２）および終了位置（処理項目３５４）の組を同時に削除する。すなわち、手動並列化においては、処理対象の範囲毎に一体的に取扱われ、単一の処理項目ではなく、複数の一体化された処理項目の単位で追加または削除などが実行される。
【００８３】
なお、上述のユーザが手動並列化ブロックを用いて並列化処理を指定したフローに対しても、さらに自動並列化を適用することも可能である。好ましい形態において、画像処理装置１００は、並列的な実行が指示された処理項目以外の処理項目について、予め定められた規則に従って、２つ以上のプロセッサコア（処理部）に対して並列的に実行させるように設定を変更するような機能を実装しておくことが好ましい。
【００８４】
＜Ｇ．制御プログラムの機能構成＞
次に、本実施の形態に係る手動並列化を含む処理を実現するための制御プログラムの機能構成について説明する。図８は、本実施の形態に係る画像処理装置１００に実装される制御プログラム１５０の構成を示す模式図である。
【００８５】
図８を参照して、制御プログラム１５０は、基本的なコンポーネントとして、対話処理モジュール１５２と、自動並列化モジュール１５４と、命令生成モジュール１５６と、画像処理実行モジュール１５８と、ライブラリ１６０とを含む。
【００８６】
対話処理モジュール１５２は、予め定義された複数の処理項目のうち画像データに対する画像処理に用いる１つ以上の処理項目の選択、およびその選択された処理項目の実行順序の指定を受付けるためのインターフェイス画面を少なくとも提供する。すなわち、対話処理モジュール１５２は、ユーザ操作に従って、ユーザが所望の画像処理のフロー１７０を作成するための対話型の画面ユーザインターフェイスを提供する。より具体的には、対話処理モジュール１５２は、上述の図３，６，７に示すような画面ユーザインターフェイスを表示部１０２に表示するとともに、ユーザ操作に従ってフロー１７０を生成する。この生成されたフロー１７０は、ＲＡＭ１１２（図２）などに確保されたワーク領域に一次的に格納される。
【００８７】
自動並列化モジュール１５４は、上述の手動並列化に加えて、フロー１７０に含まれる処理項目を自動的に並列化する。すなわち、自動並列化モジュール１５４は、フロー１７０において並列的な実行が指示された処理項目以外の処理項目について、予め定められた規則に従って、２つ以上のプロセッサコア（処理部）に対して並列的に実行できるか否かを評価する。この自動並列化モジュール１５４による自動並列化の処理は、予め定められた処理項目間の制約に従って実行される。自動並列化モジュール１５４は、フロー１７０に含まれる処理項目のうち、自動並列化の対象となる複数の処理項目を命令生成モジュール１５６へ通知する。すなわち、自動並列化モジュール１５４は、ユーザによって明示的には並列実行を指示されていない処理項目の一部または全部について、予め定められた規則に従って、２つ以上のプロセッサコア（処理部）で並列的に実行されるように、命令生成モジュール１５６へ内部コマンドを発する。
【００８８】
命令生成モジュール１５６は、対話処理モジュール１５２が受付けた画像処理についての設定（フロー１７０）に従って、複数のプロセッサコア（処理部）に対する命令列を生成する。すなわち、命令生成モジュール１５６は、ユーザによって設定されたフロー１７０に従う処理を実現するためのプログラムを生成する。このとき、命令生成モジュール１５６は、命令生成モジュール１５６から自動並列化の対象となる複数の処理項目を通知されていれば、フロー１７０に含まれる当該通知された複数の処理項目がそれぞれ別のプロセッサコア（処理部）に割当てられるように、命令列を生成する。
【００８９】
命令生成モジュール１５６は、開始処理項目（処理項目３５２）と終了処理項目（処理項目３５４）との間で並列的に実行されるように指定されたそれぞれの処理を、互いに異なるプロセッサコア（処理部）で実行させるための命令列を出力する。また、命令生成モジュール１５６は、開始処理項目（処理項目３５２）と終了処理項目（処理項目３５４）との間で並列的に実行されるように指定されたそれぞれの処理のすべてについて実行が完了した後に、終了処理項目（処理項目３５４）に引き続いて指定されている処理項目を実行させるための命令列を出力する。
【００９０】
この生成される命令列（あるいは、プログラム）は、プロセッサ１１０で実行可能なオブジェクト形式のプログラムを含んでいてもよいし、ＯＳに対して、スレッドの起動および終了などを指示する内部コマンドを含んでいてもよい。
【００９１】
この生成された命令列は、ＲＡＭ１１２やハードディスク１２０（図２）などに格納される。画像処理実行モジュール１５８は、命令生成モジュール１５６によって生成された命令列に従って、対象のカメラ画像に対して画像処理を実行し、その結果を出力する。命令列がオブジェクト形式の実行プログラムを含んでいる場合には、画像処理実行モジュール１５８の全部または一部は、命令列によって実現されることになる。実装例として、画像処理実行モジュール１５８は、予め用意されたライブラリ１６０を参照することで、命令列において指定された処理を実行する。すなわち、図３に示す操作画面３００の処理項目選択領域３０４に一覧表示される処理項目にそれぞれ対応するライブラリプログラムがライブラリ１６０に含まれており、画像処理実行モジュール１５８は、必要なライブラリプログラムを呼出すことで、指定された処理項目に対応する画像処理を実行する。このようなライブラリ１６０を採用することで、処理項目の追加や改良をより容易に行うことができる。
【００９２】
なお、図８には、フロー設定、命令列の生成、および画像処理の実行のすべての処理を実行可能な単一の制御プログラム１５０を例示したが、複数のプログラムが連係して、これらの機能を実現するようにしてもよい。例えば、フロー設定および命令列の生成に係る処理については、パーソナルコンピュータ上で実行され、その実行の結果生成される命令列が画像処理装置へ転送されて実行されるという機能を分担するような実装形態を採用することもできる。この場合には、パーソナルコンピュータでは、対話処理モジュール１５２、自動並列化モジュール１５４、および命令生成モジュール１５６に相当するモジュールを含むプログラムが実行され、画像処理装置では、画像処理実行モジュール１５８およびライブラリ１６０を含むプログラムが実行されることになる。このような実装形態についても、本発明の技術的範囲に含まれることは自明である。
【００９３】
＜Ｈ．並列化処理の実行に伴う記憶領域＞
次に、本実施の形態に係る並列化処理の実行時において、並列化タスクの各々が独立に処理を実行できるように、処理対象の記憶領域がそれぞれ独立に用意される。
【００９４】
図９は、本実施の形態に係る並列化処理の実行に伴う画像データの取扱いを説明するための図である。図９には、カメラ画像入力の処理項目の実行後に並列化ブロックが設定されており、並列化ブロックの中では４つの並列化タスクが定義されている。並列化ブロックの実行直前においては、カメラ画像入力の実行によって、撮像部８から取得されたカメラ画像である「画像１」が処理対象として保持されている。並列化ブロックの実行が開始されると、１つの並列化タスク（図９に示す例では、並列化タスク１）は、直前の処理項目の実行時に利用されていた記憶領域をそのまま利用する。つまり、「画像１」が処理対象として保持される。
【００９５】
これに対して、残りの並列化タスク（図９に示す例では、並列化タスク２〜４）の各々に対して、新たな記憶領域が割当てられるとともに、各記憶領域に対して、並列化ブロックの実行直前において保持されていた画像データが複製される。すなわち、並列化ブロックに含まれるすべての並列化タスクの各々は、独立した記憶領域を有しており、各記憶領域の初期データとして、実行直前において保持されていた画像データが用いられる。その後、並列化タスクの各々において、画像データに対する何らかの処理が実行されることで、保持している画像データの内容が更新される。
【００９６】
このような並列化処理の実行時に、新たな並列化タスク（スレッド）を生成し、各スレッドに対応付けられる記憶領域を新たに設定するような処理は、命令生成モジュール１５６（図８）によって生成される命令列によって実現される。すなわち、命令生成モジュール１５６（図８）は、処理項目の並列的な実行の開始前に、当該並列的な実行に係るプロセッサコア（処理部）にそれぞれ対応付けられた記憶領域を確保するとともに、当該並列的な実行の前に使用されている画像データを各記憶領域に複製するための命令を出力する。
【００９７】
そして、並列化処理の実行が完了すると、並列化ブロックの実行前に退避されていた画像データがリカバリされ、後続の処理項目の実行が開始される。このように、開始処理項目（処理項目３５２）は、並列的な実行の開始前に、当該並列的な実行に係る処理部にそれぞれ対応付けられた記憶領域を確保するとともに、当該並列的な実行の前に使用されている画像データを各記憶領域に複製するための命令を含む。終了処理項目（処理項目３５４）は、並列的な実行の開始前に使用されていた画像データを復元するための命令を含む。
【００９８】
このようなスレッドおよびそれに関連付けられた記憶領域を適切に生成することで、他の処理項目に影響されることなく、並列化処理を適切に実行できる。
【００９９】
＜Ｉ．処理手順＞
次に、本実施の形態に係る画像処理装置１００における処理手順について説明する。図１０は、本実施の形態に係る画像処理装置１００における処理手順を説明するためのフローチャートである。図１０に示す処理手順は、画像処理装置１００のプロセッサ１１０が制御プログラム１５０を実行することで実現される。
【０１００】
図１０を参照して、制御プログラム１５０が実行されることで、図３に示すフロー作成に係る操作画面３００が提供される（ステップＳ２）。すなわち、プロセッサ１１０は、予め定義された複数の処理項目のうちカメラ画像（画像データ）に対する画像処理に用いる１つ以上の処理項目の選択、およびその選択された処理項目の実行順序の指定を受付けるためのインターフェイス画面（操作画面３００）を少なくとも提供する。
【０１０１】
この提供される操作画面３００において、プロセッサ１１０は、ユーザ操作を受付ける（ステップＳ４）。このとき、プロセッサ１１０は、図６および図７に示すような手動並列化の設定に係るユーザ操作を受付ける。すなわち、プロセッサ１１０は、インターフェイス画面（操作画面３００）において、複数のプロセッサコア（処理部）のうち２つ以上の処理部に対して並列的に実行させるそれぞれの処理項目の選択を受付ける。
【０１０２】
その後、プロセッサ１１０は、自動並列化の実行が指示されたか否かを判断する（ステップＳ６）。自動並列化の実行が指示された場合（ステップＳ６においてＹＥＳ）には、設定されているフローに対して自動並列化を実行する（ステップＳ８）。自動並列化の実行が指示されなかった場合（ステップＳ６においてＮＯ）には、ステップＳ６の処理はスキップされる。
【０１０３】
そして、プロセッサ１１０は、フロー設定の操作の終了を指示されたか否かを判断する（ステップＳ１０）。フロー設定の操作の終了が指示された場合（ステップＳ１０においてＹＥＳの場合）には、プロセッサ１１０は、最終的に設定されたフローに従って、命令設定を生成する（ステップＳ１２）。すなわち、プロセッサ１１０は、入力された画像処理についての設定に従って、複数のプロセッサコア（処理部）に対する命令列を生成する。そして、処理は終了する。一方、フロー設定の操作の終了が指示されなかった場合（ステップＳ１０においてＮＯの場合）には、ステップＳ４以下の処理が繰返される。
【０１０４】
＜Ｊ．応用例（その１）＞
次に、本実施の形態に係る画像処理装置１００の応用例（その１）について説明する。図１１は、本実施の形態に係る画像処理装置１００を含む画像処理システム１Ａの全体構成を示す概略図である。図１１に示す画像処理システム１Ａが適用されるプロセスでは、ワーク２が積層基板の基材であり、次工程においてワーク２上に別の層が形成される。このようなプロセスにおいて、次工程における層形成の処理に適合するように、ワーク２の位置合わせが行われる。より具体的には、ワーク２は、ＸＹステージ３上に配置されており、４つの撮像部８ａ，８ｂ，８ｃ，８ｄを用いてワーク２の四隅を撮像してワーク２の現在位置を特定するとともに、ＰＬＣ５から指令を与えてＸＹステージ３を移動させて、ワーク２を目的の位置に位置決めする。
【０１０５】
より具体的な手順としては、画像処理装置１００は、撮像部８ａ，８ｂ，８ｃ，８ｄがそれぞれ撮像したワーク２の四隅を示すカメラ画像を取得し、この取得したそれぞれのカメラ画像に含まれるマーク位置を示すオブジェクトを検出する。そして、画像処理装置１００は、それぞれのカメラ画像内で検出されたマーク位置に応じて、ＸＹステージ３の必要な移動量を算出し、その算出した移動量をＰＬＣ５へ送信する。ＰＬＣ５は、画像処理装置１００からの移動量に従って、ＸＹステージ３を移動させる。
【０１０６】
画像処理システム１Ａに対する画像処理の並列化について、自動並列化と手動並列化とを比較して説明する。図１２は、図１０に示す画像処理システム１Ａにおけるフローに対する並列化を説明するための図である。図１３は、図１２（ｃ）に示すフローに対応する画面ユーザインターフェイスの一例を示す図である。
【０１０７】
図１２（ａ）には、上述のような処理を実現するためのフローの一例を示す。この図１２（ａ）には、ユーザが手動並列化を用いずに設定したフローを示す。図１２（ａ）に示すフローにおいては、撮像部８ａ，８ｂ，８ｃ，８ｄがそれぞれ撮像したカメラ画像に対する処理が直列的に実行され、それぞれのカメラ画像に対する処理結果（合計４つ）が参照されて、最終的な移動量が算出される。より具体的には、各隅について、対象となる撮像部を選択し（「カメラ切替」の処理項目）、選択した撮像部から取得したカメラ画像に対してキャリブレーション（「キャリブレーション」の処理項目）を行った上で、予め登録されたモデルと一致する領域をサーチ（「サーチ」の処理項目）する処理が実行される。
【０１０８】
図１２（ｂ）には、図１２（ａ）に示すフローに対して、自動並列化を実行した結果を示す。なお、図１２（ａ）および図１２（ｂ）において、自動並列化に係る処理項目間の制約の対象となっている処理項目をハッチングで示している。自動並列化の処理において、切替えられるカメラ画像の間の関係を画像処理装置１００が知ることはできないので、図１２（ａ）に示すようなフローに対して自動並列化を行ったとしても、いずれの処理項目も並列化されない。
【０１０９】
これに対して、画像処理システム１Ａにおいて要求される処理内容を知っているユーザであれば、各隅についての画像処理を並列的に実行すればよいことがわかる。そのため、図１２（ｃ）に示すような手動並列化ブロックを追加するとともに、その手動並列化ブロック内において、各隅についての画像データに対する画像処理が並列的に実行されるように指定されている。より具体的には、操作画面３００の設定済フロー表示領域３０２において、図１３に示すユーザ設定を行うことで、図１２（ｃ）に示すような手動並列化されたフローを実現できる。
【０１１０】
このように、手動並列化を適切に適用することで、画像処理の全体的な実行速度を高めることができる。
【０１１１】
＜Ｋ．応用例（その２）＞
次に、本実施の形態に係る画像処理装置１００の別の応用例（その２）について説明する。図１４は、本実施の形態に係る画像処理装置１００を含む画像処理システム１Ｂの全体構成を示す概略図である。図１４に示す画像処理システム１Ｂが適用されるプロセスでは、ワーク２がボトルのキャップなどであり、出荷前検査を行った上で、その出荷前検査の結果がＯＫであれば、必要な情報（製造日時およびシリアル番号など）を印字する。より具体的な手順としては、画像処理装置１００は、撮像部８ａが撮像したワーク２のカメラ画像を取得し、この取得したカメラ画像に対して、ワーク２についての、ラベルの色、ラベルの位置、ラベルの形を検査する。この計測結果は、画像処理装置１００からＰＬＣ５へ送信される。１つの項目でも検査にパスしなければ（つまり、いずれかの計測項目がＮＧであれば）、計測処理は終了する。すべての計測項目がＯＫであれば、製造日時およびシリアル番号をチェックして、その計測結果をＰＬＣ５へ送信する。
【０１１２】
画像処理システム１Ｂに対する画像処理の並列化について、自動並列化と手動並列化とを比較して説明する。図１５は、図１４に示す画像処理システム１Ｂにおけるフローに対する並列化を説明するための図である。図１６は、図１５（ｃ）に示すフローに対応する画面ユーザインターフェイスの一例を示す図である。
【０１１３】
図１５（ａ）には、上述のような処理を実現するためのフローの一例を示す。この図１５（ａ）には、ユーザが手動並列化を用いずに設定したフローを示す。図１５（ａ）に示すフローにおいては、ラベルの色を検査するための「色平均・偏差」の処理項目と、ラベルの位置を検査するための「面積重心」の処理項目と、ラベルの形を検査するための「ラベル」の処理項目とが直列的に実行される。そして、これらのそれぞれの検査結果を用いて演算処理が実行される。
【０１１４】
図１５（ｂ）には、図１５（ａ）に示すフローに対して、自動並列化を実行した結果を示す。なお、図１５（ａ）および図１５（ｂ）において、自動並列化に係る処理項目間の制約の対象となっている処理項目をハッチングで示している。自動並列化の処理において、上述の３つの検査の内容および互いの関係を画像処理装置１００は知ることはできないので、図１５（ａ）に示すようなフローに対して自動並列化を行ったとしても、検査項目については並列化されず、その後の汎用文字検査についてのみ並列化される。
【０１１５】
これに対して、画像処理システム１Ｂにおいて要求される処理内容を知っているユーザであれば、各検査項目を並列的に実行すればよいことがわかる。そのため、図１５（ｃ）に示すような手動並列化ブロックを追加するとともに、その手動並列化ブロック内において、画像データに対する検査項目が並列的に実行されるように指定されている。より具体的には、操作画面３００の設定済フロー表示領域３０２において、図１６に示すユーザ設定を行うことで、図１５（ｃ）に示すような手動並列化されたフローを実現できる。
【０１１６】
このように、手動並列化を適切に適用することで、画像処理の全体的な実行速度を高めることができる。
【０１１７】
＜Ｌ．利点＞
本実施の形態に係る画像処理装置によれば、より簡単な操作で目的の画像処理を構成する処理項目の並列的な実行を設定することができる。これによって、ユーザの知見を利用して、目的の画像処理をより効率化かつ高速化できる。また、ユーザが並列的な実行を設定した処理項目以外の処理項目に対しても、自動的に並列化することもできるので、画像処理に要する時間をより短縮することができる。
【０１１８】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１１９】
１  画像処理システム、２  ワーク、３  ＸＹステージ、５  ＰＬＣ、６  搬送機構、８，８ａ，８ｂ，８ｃ，８ｄ  撮像部、１００  画像処理装置、１０２  表示部、１０４  キーボード、１０６  メモリカード、１１０  プロセッサ、１１０ａ〜１１０ｄ  コア、１１２  ＲＡＭ、１１４  表示コントローラ、１１６  システムコントローラ、１１８  Ｉ／Ｏコントローラ、１２０  ハードディスク、１２２  カメラインターフェイス、１２２ａ  画像バッファ、１２４  入力インターフェイス、１２６  インターフェイス、１２８  通信インターフェイス、１３０  メモリカードインターフェイス、１５０  制御プログラム、１５２  対話処理モジュール、１５４  自動並列化モジュール、１５６  命令生成モジュール、１５８  画像処理実行モジュール、１６０  ライブラリ。
【図１】
2014203309.tif 000003
【図２】
2014203309.tif 000004
【図３】
2014203309.tif 000005
【図４】
2014203309.tif 000006
【図５】
2014203309.tif 000007
【図６】
2014203309.tif 000008
【図７】
2014203309.tif 000009
【図８】
2014203309.tif 000010
【図９】
2014203309.tif 000011
【図１０】
2014203309.tif 000012
【図１１】
2014203309.tif 000013
【図１２】
2014203309.tif 000014
【図１３】
2014203309.tif 000015
【図１４】
2014203309.tif 000016
【図１５】
2014203309.tif 000017
【図１６】
2014203309.tif 000018