(57)【要約】【課題】画像などの格子構造を有する２次元データを処理するデータ処理技術に関し、ラスタスキャンの繰返しによる２次元データに対するデータ処理の効率化を図る。【解決手段】２次元格子構造を構成する各ｎｏｄｅデータ２０１の横方向のライン２０２ごとに、そのラインのラスタスキャンを実行するか否かを示すフラグを記憶するフラグ配列データ２０３が記憶される。ライン２０２ごとに、フラグ配列データ２０３の対応する配列要素値に基づいて、そのラインに対応するラスタスキャンを実行するかスキップするかが制御される。ラスタスキャンが実行されたライン２０２上の各ｎｏｄｅデータ２０１の配列に対して、データ処理が実行される。この処理で更新されたｎｏｄｅデータ２０１が判定され、次回のラスタスキャンのために値が更新されたｎｏｄｅデータ２０１が含まれるライン２０２に対応するフラグ配列データ２０３中の配列要素値が、ラスタスキャンの実行を示す値に更新される。【選択図】図２
2014203386.tif 000002
【特許請求の範囲】
【請求項１】
格子構造を有する２次元データを構成する各ノードデータのラインごとに、該ラインに対するラスタスキャンを実行するか否かを示すフラグを記憶するフラグ記憶部と、
前記ラインごとに、前記フラグ記憶部が記憶する該ラインに対応する前記フラグに基づいて該ラインに対応するラスタスキャンを実行するかスキップするかを制御するラスタスキャン制御部と、
前記ラスタスキャン制御部によって前記ラスタスキャンが実行された前記ライン上の前記各ノードデータに対して、データ処理を実行するデータ処理実行部と、
該データ処理によって更新されたノードデータを判定するノードデータ判定部と、
前記ノードデータ判定部の判定結果に基づき次回のラスタスキャンのために値が更新されたノードデータが含まれるラインに対応する前記フラグ記憶部が記憶するフラグの状態を前記ラスタスキャンの実行を示す状態に更新するフラグ更新部と、
を備えることを特徴とするデータ処理装置。
【請求項２】
前記ラスタスキャン制御部は、
前記ラインごとに、前記フラグ記憶部が記憶する該ラインに対応する前記フラグを判定し、該フラグが前記ラスタスキャンの実行を示している場合には該ラインに対応する前記ラスタスキャンを実行し、該フラグが前記ラスタスキャンの実行を示していない場合には該ラインに対応する前記ラスタスキャンをスキップして該ラインの次のラインに対する前記フラグの判定に移行し、
前記２次元データ上の全ての前記ラインに対する制御が終了したときに全ての処理を終了するか否かを判定し、該判定に基づいて、前記ラインごとの制御を繰り返し実行するか前記全ての処理を終了するかを制御する、
ことを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記ラスタスキャン制御部は、
前記ラインに対応する前記フラグが前記ラスタスキャンの実行を示している場合には、前記ノードデータを記憶するメモリに対して、該ラインの先頭に対応するアドレスから該ライン分のアドレスを順次指定することにより、前記メモリの前記順次指定したアドレスから前記ノードデータを順次読み出させる動作として、前記ラスタスキャンを実行する、
ことを特徴とする請求項２に記載のデータ処理装置。
【請求項４】
前記ラスタスキャン制御部は、前記全ての処理を終了するか否かの判定において、前記フラグ記憶部が記憶する全ての前記フラグが前記ラスタスキャンの実行を示していない場合に、前記全ての処理を終了することを判定する、
ことを特徴とする請求項２または３のいずれかに記載のデータ処理装置。
【請求項５】
前記ラスタスキャン制御部は、全ての処理の開始時に、前記フラグ記憶部が記憶する全ての前記フラグの状態を前記ラスタスキャンの実行を示す状態に初期設定する、
ことを特徴とする請求項１ないし４のいずれかに記載のデータ処理装置。
【請求項６】
前記データ処理実行部は、
前記ラスタスキャン制御部による前記ラスタスキャンに従って、前記ラインを構成する前記各ノードデータを順次抽出し、
該抽出したノードデータが前記データ処理の対象である場合に、該抽出したノードデータおよび該抽出したノードデータに関連するノードデータに対する前記データ処理を実行し、その後に次のノードデータの抽出に移行し、
該抽出したノードデータが前記データ処理の対象ではない場合に、次のノードデータの抽出に移行する、
ことを特徴とする請求項１ないし５のいずれかに記載のデータ処理装置。
【請求項７】
前記データ処理は、前記各ノードデータを含んで構成されるグラフデータ上のソースからシンクへの最大流を算出するための複数の経路を算出するＰｕｓｈ−Ｒｅｌａｂｅｌ法による処理である、
ことを特徴とする請求項１ないし６のいずれかに記載のデータ処理装置。
【請求項８】
前記２次元データは画像データであり、前記ノードデータは、前記画像データを構成する画素データから変換されたマルコフ確率場データである、
ことを特徴とする請求項１ないし７のいずれかに記載のデータ処理装置。
【請求項９】
格子構造を有する２次元データを構成する各ノードデータのラインごとに、該ラインに対するラスタスキャンを実行するか否かを示すフラグを記憶し、
前記ラインごとに、該ラインに対応する前記記憶したフラグに基づいて該ラインに対応するラスタスキャンを実行するかスキップするかを制御し、
前記ラスタスキャンが実行された前記ライン上の前記各ノードデータに対して、データ処理を実行し、
該データ処理によって更新されたノードデータを判定し、
前記ノードデータの判定結果に基づき次回のラスタスキャンのために値が更新されたノードデータが含まれるラインに対応する前記記憶しているフラグの状態を前記ラスタスキャンの実行を示す状態に更新する、
ことを特徴とするデータ処理方法。
【請求項１０】
格子構造を有する２次元データを構成する各ノードデータのラインごとに、該ラインに対するラスタスキャンを実行するか否かを示すフラグを記憶するステップと、
前記ラインごとに、該ラインに対応する前記記憶したフラグに基づいて該ラインに対応するラスタスキャンを実行するかスキップするかを制御するステップと、
前記ラスタスキャンが実行された前記ライン上の前記各ノードデータに対して、データ処理を実行するステップと、
該データ処理によって更新されたノードデータを判定するステップと、
前記ノードデータの判定結果に基づき次回のラスタスキャンのために値が更新されたノードデータが含まれるラインに対応する前記記憶しているフラグの状態を前記ラスタスキャンの実行を示す状態に更新するステップと、
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像などの格子構造を有する２次元データを処理するデータ処理装置、方法、およびプログラムに関する。
【背景技術】
【０００２】
主要オブジェクトである花などの前景を含む画像をＧｒａｐｈ  Ｃｕｔｓ法を用いて前景領域と背景領域とに分割する従来技術が知られている（例えば特許文献１に記載の技術）。
領域分割を行う場合，前景と背景の関係によりその境界が不明確な部分が存在する可能性があり，最適な領域分割を行う必要がある。
そこで、Ｇｒａｐｈ  Ｃｕｔｓ法では、画像内の各画素に付与する前景または背景を示すラベルが更新されながら、そのラベルと各画素およびそれに隣接する周囲画素の画素値とに基づいてエネルギー関数が算出される。このエネルギー関数は、前景または背景の色に似た色を持つ画素に前景または背景のラベルが付与されたときに、小さい値となるように定義される。同時に、このエネルギー関数は、各画素とそれに隣接する画素の間で異なったラベルが付与され、かつ画素間の色の差が大きいときに、小さい値となるように定義される。そして、そのエネルギー関数が最小となったときの各画素に付与されている前景または背景のラベルとして、前景と背景が領域分割される。
【０００３】
この領域分割技術は例えば、デジタルカメラで撮影した花の前景領域を背景領域から分割して特徴量を求め、データベースに登録してある各種の植物の特徴量と比較することにより、花の種類を判別してユーザに提示するシステムなどに応用されている。
【０００４】
Ｇｒａｐｈ  Ｃｕｔｓ法におけるエネルギー関数の最小化手法としては、グラフ理論が用いられる。
具体的には、画像の各画素に対応するノードと、前景領域に対応するソースと、背景領域に対応するシンクとが定義され、それらの間がエッジによって結ばれたグラフが定義される。
次に、そのグラフ上で、前述の各画素ごとのエネルギー関数に基づいて、ソースと各画素に対応する各ノード間、シンクと各ノード間、隣接する各ノード間の流量が計算される。
次に、これらの流量に基づいて、ソースからシンクに向かって同時に流れを形成することのできる複数の経路が算出される。そして、ソースから全経路に流出する流量の総和（または全経路からシンクに流入する流量の総和）が、最大流として算出される。
次に、グラフ上で、任意のエッジの組を切断して得られる、ソースを含む第１の部分グラフとシンクを含む第２の部分グラフとからなる組を、カットと呼ぶ。また、そのカットにおいて、対応する各切断エッジの部分で、第１の部分グラフに含まれるソースまたはノードから第２の部分グラフに含まれるノードまたはシンクに流れ込む流量の総和を、そのカットの容量と呼ぶ。このようにして任意のエッジの組による切断で得られるカットのうち、そのカットの容量が上述の最大流に等しくなるカットが、最小カットとして算出される。
そして、その最小カットにおける第１の部分グラフに含まれるノードに対応する画素が前景領域、第２の部分グラフに含まれるノードに対応する画素が背景領域として領域分割される。
【０００５】
ここで、上述の最大流を算出するための複数の経路の算出処理の代表的なアルゴリズムのひとつとして、従来、Ｐｕｓｈ−Ｒｅｌａｂｅｌ法と呼ばれるアルゴリズムが知られている（例えば特許文献２に記載の技術）。この手法は、入力された画像データをマルコフ確率場（Ｍａｒｋｏｖ  Ｒａｎｄｏｍ  Ｆｉｅｌｄ：ＭＲＦ）によりモデル化された画像データ（以下、「ＭＲＦデータ」と呼ぶ )に変換し、画像領域分割の最適解となるＭＲＦデータを出力する。ＭＲＦデータは、格子構造上で相互作用する変数の集合で表される。各変数（以下、「ｎｏｄｅ」と呼ぶ )は入力された画像の画素と１対１に対応し、前述したグラフ上のノードに対応する。また、各ｎｏｄｅのＭＲＦデータは、前述した各画素毎に算出される各エネルギー関数値を含む。Ｐｕｓｈ−Ｒｅｌａｂｅｌ法は、各ｎｏｄｅのＭＲＦデータをラスタスキャンし、隣接するｎｏｄｅ間の相互関係を一つずつ解決することで、画像全体のエネルギー関数の最小化問題（最大流の問題）を解くアルゴリズムである。なお、隣接するｎｏｄｅ間の相互関係を一つずつ解決する方法そのものを、Ｐｕｓｈ−Ｒｅｌａｂｅｌと呼ぶ。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Ｙ．Ｂｏｙｋｏｖ  ａｎｄ  Ｇ．Ｆｕｎｋａ−Ｌｅａ：“Ｉｎｔｅｒａｃｔｉｖｅ  Ｇｒａｐｈ  Ｃｕｔｓ  ｆｏｒ  Ｏｐｔｉｍａｌ  Ｂｏｕｎｄａｒｙ  ＆  Ｒｅｇｉｏｎ  Ｓｅｇｍｅｎｔａｔｉｏｎ  ｏｆ  Ｏｂｊｅｃｔｓ  ｉｎＮ−Ｄ  Ｉｍａｇｅｓ”，Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  “Ｉｎｔｅｒｎａｔｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ｖｉｓｉｏｎ”，Ｖａｎｃｏｕｖｅｒ，Ｃａｎａｄａ，ｖｏｌ．Ｉ，ｐ．１０５−１１２，Ｊｕｌｙ  ２００１．
【非特許文献２】ＢＶ  Ｃｈｅｒａｓｓｋ  ａｎｄ  ＡＶ  Ｇｏｄｂｅｒｇ：“Ｏｎ  ｉｍｐｌｅｍｅｎｔｉｎｇ  ｔｈｅ  ｐｕｓｈ−ｒｅｌａｂｅｌ  ｍｅｔｈｏｄ  ｆｏｒ  ｔｈｅ  ｍａｘｉｍｕｍ  ｆｌｏｗ  ｐｒｏｂｌｅｍ”，Ａｌｇｏｒｉｔｈｍｉｃａ，１９９７−Ｓｐｒｉｎｇｅｒ．
【発明の概要】
【発明が解決しようとする課題】
【０００７】
Ｐｕｓｈ−Ｒｅｌａｂｅｌ法では、隣接するｎｏｄｅ間の相互関係を１つずつ扱う。このため、画像全体に対する１回のラスタスキャンだけでは、ＭＲＦデータ全体の最適化は行えない。最適解を得るためには、ラスタスキャンを数百回から数千回、場合によっては数万回のオーダーで実行し、ｎｏｄｅ間のＰｕｓｈ−Ｒｅｌａｂｅｌがそれ以上行えない平衡状態になるまで、反復処理を行う必要がある。
このように、従来のＰｕｓｈ−Ｒｅｌａｂｅｌ法では、ＭＲＦデータのラスタスキャンを膨大な回数繰り返さなければならなかったので、ソフトウェアやハードウェアとして実装した場合に処理時間が長くなってしまうという問題点を有していた。
【０００８】
このような問題は、画像データに対するＰｕｓｈ−Ｒｅｌａｂｅｌ法に限らず、画像を構成する画素から変換されたＭＲＦデータなどのように、格子構造を有する２次元データを構成する各ノードデータに対してラスタスキャンを繰り返し実行しながら、各ノードデータおよびその周囲のノードデータを更新して２次元データ全体に対する処理の最適化を行うデータ処理に対して、共通して存在する。
【０００９】
本発明は、ラスタスキャンの繰返しによる２次元データに対するデータ処理の効率化を図ることを目的とする。
【課題を解決するための手段】
【００１０】
態様の一例では、格子構造を有する２次元データを構成する各ノードデータのラインごとに、そのラインに対するラスタスキャンを実行するか否かを示すフラグを記憶するフラグ記憶部と、ラインごとに、フラグ記憶部が記憶するそのラインに対応するフラグに基づいてそのラインに対応するラスタスキャンを実行するかスキップするかを制御するラスタスキャン制御部と、ラスタスキャン制御部によってラスタスキャンが実行されたライン上の各ノードデータに対して、データ処理を実行するデータ処理実行部と、そのデータ処理によって更新されたノードデータを判定するノードデータ判定部と、ノードデータ判定部の判定結果に基づき次回のラスタスキャンのために値が更新されたノードデータが含まれるラインに対応するフラグ記憶部が記憶するフラグの状態をラスタスキャンの実行を示す状態に更新するノードデータ判定部とを備える。
【発明の効果】
【００１１】
ラスタスキャンの繰返しによる２次元データに対するデータ処理の効率化を図ることが可能となる。
【図面の簡単な説明】
【００１２】
【図１】本発明によるデータ処理装置の一実施形態であるコンピュータシステムの構成図である。
【図２】本実施形態におけるｎｏｄｅデータ配列とフラグのデータ構成例を示す図である。
【図３】本実施形態によるデータ処理を示すフローチャートである。
【図４】本発明によるデータ処理装置の他の実施形態であるハードウェアシステムの構成図である。
【発明を実施するための形態】
【００１３】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。
【００１４】
図１は、本発明によるデータ処理装置の一実施形態であるコンピュータシステムの構成図である。
このデータ処理装置１０１は例えば、いわゆるスマートフォンなどの携帯情報端末またはデジタルカメラとして実装されるコンピュータシステム上に実現される。
【００１５】
データ処理装置１０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ：中央演算処理装置）１０２と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０３と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０４を備える。また、データ処理装置１０１は、ソリッド記憶装置等の外部記憶装置１０５と、通信インタフェース１０６と、タッチパネルディスプレイ装置などの入力装置１０７および表示装置１０８を備える。さらに、データ処理装置１０１は、マイクロＳＤメモリカードやＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）メモリカードなどの可搬記録媒体１１０をセット可能な可搬記録媒体駆動装置１０９を備える。撮像装置１１２は、静止画像やビデオ画像を撮像することのできるデジタルカメラ機構であり、レンズ、オートフォーカス駆動制御装置、露出制御装置、撮像センサ等を備える。上述の各機器１０２〜１０９および１１２は、バス１１１によって相互に接続される。
【００１６】
ＲＯＭ１０３には、スマートフォン全体の一般的な動作を制御するプログラムのほか、後述する図３のフローチャートによって示されるデータ処理の制御プログラムが記憶されている。ＣＰＵ１０２は、ＲＯＭ１０３から、この制御プログラムを読み出し、ＲＡＭ１０４をワークメモリとして実行する。
【００１７】
本実施形態では、例えば図１のデータ処理装置１０１を操作するユーザが、撮像装置１１２によって花などを撮像し、入力装置１０７で範囲指定した画像範囲から、花などの前景をそれ以外の背景から分割する画像領域分割処理が、後述するデータ処理として実行される。これにより得られた花などの主要オブジェクト領域の画像データは、ユーザが例えば花の種類を検索するために、通信インタフェース１０６から特には図示しないインターネットを経由してインターネットに接続される画像検索サーバコンピュータに送信される。このコンピュータ上で、送られた主要オブジェクト領域の花画像データに基づいて花のデータベースが検索される。その結果検索がヒットした花の図鑑情報が、その花の画像データとともにインターネットを経由して通信インタフェース１０６にて受信され、表示装置１０８に表示される。
【００１８】
上述の画像領域分割処理は、例えばＧｒａｐｈ  Ｃｕｔｓ法におけるエネルギー関数の最小化手法を用いて実現される。より具体的には、入力された画像データの各画素がグラフのｎｏｄｅに対応させられ、そのグラフ上で、花の前景領域に対応するソースからｎｏｄｅを介して背景領域に対応するシンクに向かって流れる流量の最大流が算出される。次に、グラフ上で、任意のエッジの組を切断して得られる、ソースを含む第１の部分グラフとシンクを含む第２の部分グラフとからなるカットのうち、その容量が上述の算出された最大流に等しくなる最小カットが算出される。そして、その最小カットにおける第１の部分グラフに含まれるノードに対応する画素が前景領域、第２の部分グラフに含まれるノードに対応する画素が背景領域として領域分割される。
【００１９】
本実施形態において、上述の最大流を算出するための複数の経路の算出処理は、Ｐｕｓｈ−Ｒｅｌａｂｅｌ法に基づいて実行される。
【００２０】
図２は、本実施形態においてＰｕｓｈ−Ｒｅｌａｂｅｌ法に基づく最大流の算出処理を実行するために、図１のＲＡＭ１０４上に構成されるｎｏｄｅデータ配列とフラグのデータ構成例を示す図である。
【００２１】
本実施形態では、図１の撮像装置１１２からＲＡＭ１０４に得られた入力画像データを構成する各画素がＭＲＦデータに変換される。図２において、入力画像データを構成する各画素に対応して、２次元の格子構造上で自身の周囲と相互作用する変数であるｎｏｄｅデータ２０１の集合（配列）が、ＲＡＭ１０４に記憶される。ｎｏｄｅデータ２０１は、入力画像データの対応する画素データをＭＲＦデータに変換したものである。ｎｏｄｅデータ２０１は、上述のように入力画像データの画素と１対１に対応し、画像領域分割処理のためにＧｒａｐｈ  Ｃｕｔｓ法で定義されるグラフ上のノードに対応する。また、各ｎｏｄｅデータ２０１のＭＲＦデータは、Ｇｒａｐｈ  Ｃｕｔｓ法に基づいて各画素ごとに算出される各エネルギー関数値を含む。
【００２２】
本実施形態では、図１のＲＡＭ１０４に記憶されたｎｏｄｅデータ２０１の配列の２次元格子構造に対してラスタスキャンが実行され、そのラスタスキャンによって特定されるｎｏｄｅデータ２０１ごとに、そのｎｏｄｅデータ２０１に隣接する周囲のｎｏｄｅデータ２０１との間の相互関係が１つずつ解決される。
【００２３】
ここで本実施形態では、図２に示されるように、上述の２次元格子構造を構成する各ｎｏｄｅデータ２０１の横方向のライン２０２ごとに、そのライン２０２に対するラスタスキャンを実行するか否かを示すフラグを記憶するフラグ配列データ２０３（フラグ記憶部）が、図１のＲＡＭ１０４上に設けられる。図２において例えば、フラグ配列データ２０３を構成する配列要素値Ｆｌｇ［０］は、その値が「処理」を示していれば０行目のライン２０２に対するラスタスキャンを実行することが示され、その値が「非処理」を示していれば０行目のライン２０２に対するラスタスキャンは実行せずにスキップされることが示される。他の配列要素値Ｆｌｇ［１］からＦｌｇ［１１］においても、１行目から１１行目の各ライン２０２に対して同様の指示がなされる。なお、図２のデータ構成例では、ライン数は、０から１１までの１２行であるが、もちろんこれに限定されるものではない。
本実施形態では、このフラグ配列データ２０３に基づいて、以下のデータ処理が実行される。
【００２４】
まず、ライン２０２ごとに、そのライン２０２に対応するフラグ配列データ２０３の配列要素値に基づいて、そのライン２０２に対応するラスタスキャンを実行するかスキップするかが制御される（ラスタスキャン制御部としての動作）。例えば、ｉ番目のライン２０２については、配列要素値Ｆｌｇ［ｉ］に基づいて上述の制御がなされる。
【００２５】
次に、上述のラスタスキャン制御によってラスタスキャンが実行されたライン２０２上の各ｎｏｄｅデータ２０１の配列に対して、Ｐｕｓｈ−Ｒｅｌａｂｅｌ法によるデータ処理が実行される（データ処理実行部としての動作）。
【００２６】
そして、上述のデータ処理によって更新されたｎｏｄｅデータ２０１が判定され、次回のラスタスキャンのために値が更新されたｎｏｄｅデータ２０１が含まれるライン２０２に対応するフラグ配列データ２０３中の配列要素値が、ラスタスキャンの実行を示す値、例えば「処理」に更新される（ノードデータ判定部としての動作）。
【００２７】
以上の制御動作により、本実施形態では、ｎｏｄｅデータ２０１の配列のライン２０２ごとに、Ｐｕｓｈ−Ｒｅｌａｂｅｌ法によるデータ処理を実行するか否かを示すフラグ配列データ２０３が実装される。これにより、ｎｏｄｅデータ２０１が更新されずラスタスキャン処理が不要のライン２０２を読み飛ばすことが可能になり、反復されるラスタスキャンの実行時間を短縮することが可能になり、Ｐｕｓｈ−Ｒｅｌａｂｅｌ法による画像領域分割を従来に比較して短時間で実行することが可能となる。
【００２８】
なお、上述のデータ構造および制御構造は、Ｐｕｓｈ−Ｒｅｌａｂｅｌ法によるデータ処理に限定されるものではなく、２次元格子構造を有するｎｏｄｅデータ２０１の配列に対して、ラスタスキャンの反復処理によって更新をかけるようなデータ処理全般に適用することが可能である。
【００２９】
図３は、本実施形態によるデータ処理を示すフローチャートである。このデータ処理は、図１のＣＰＵ１０２が、例えばＲＯＭ１０３または外部記憶装置１０５に記憶されたこのデータ処理に対応する制御プログラムを順次実行する動作として実現される。
なお、この制御プログラムは、例えば可搬記録媒体駆動装置１０９に挿入された可搬記録媒体１１０から外部記憶装置１０５にインストールされて実行されてもよいし、あるいは、例えば通信インタフェース１０６を介してインターネット上のサーバ等からダウンロード等されてインストールされ実行されてもよい。
【００３０】
まず、ＣＰＵ１０２は、例えば撮像装置１１２で撮像されユーザによって入力装置１０７等を用いて範囲指定されＲＡＭ１０４に記憶された画像データを、ＭＲＦデータとしてのｎｏｄｅデータ２０１の配列（図２参照）に変換する（図３のステップＳ３０１）。ここでは、Ｇｒａｐｈ  Ｃｕｔｓ法による画素ごとのエネルギー関数が計算され、その画素に対応するＲＡＭ１０４上のｎｏｄｅデータ２０１の変数の例えば構造体に記憶される。このＧｒａｐｈ  Ｃｕｔｓ法では、画像内の各画素に付与する前景または背景を示すラベルが更新されながら、そのラベルと各画素およびそれに隣接する周囲画素の画素値とに基づいてエネルギー関数が算出される。このエネルギー関数は、前景または背景の色に似た色を持つ画素に前景または背景のラベルが付与されたときに、小さい値となるように定義される。同時に、このエネルギー関数は、各画素とそれに隣接する画素の間で異なったラベルが付与され、かつ画素間の色の差が大きいときに、小さい値となるように定義される。より具体的にはこの処理は例えば、非特許文献１に記載の手法に基づいて実現されてよい。
【００３１】
次に、ＣＰＵ１０２は、図２の全てのライン２０２に対応するＲＡＭ１０４上のフラグ配列データ２０３の配列要素値を「処理」に初期化する（図３のステップＳ３０２）。
【００３２】
次に、ＣＰＵ１０２は、ＲＡＭ１０４上のｎｏｄｅデータ２０１の２次元格子配列において、ラスタスキャンの開始位置がこの２次元配列の左上になるようにＲＡＭ１０４に対するアクセスアドレスを設定し、ラスタスキャン方向（アドレスのインクリメント方向）はこの２次元配列の左上から右下に向かうように設定する（図３のステップＳ３０３）。
【００３３】
その後、ＣＰＵ１０２は、例えば図２のライン２０２の０番目から順に、そのライン２０２に対応するフラグ配列データ２０３の配列要素値を参照して判定する（図３のステップＳ３０４）。この場合例えば、ＣＰＵ１０２は、現在のライン２０２の番号をＲＡＭ１０４上の変数ｉとして管理し、フラグ配列データ２０３の配列要素値Ｆｌｇ［ｉ］を参照する。
【００３４】
ＣＰＵ１０２は、ステップＳ３０４での判定の結果、残りフラグがまだあって配列要素値Ｆｌｇ［ｉ］を参照できたか否かを判定する（図３のステップＳ３０５）。
【００３５】
ＣＰＵ１０２は、ステップＳ３０５の判定がＹＥＳならば、その配列要素値Ｆｌｇ［ｉ］が「処理」であってラスタスキャンの実行を示しているか否かを判定する（図３のステップＳ３０６）。
【００３６】
ＣＰＵ１０２は、配列要素値Ｆｌｇ［ｉ］が「処理」ではなく（「非処理」であって）ラスタスキャンの実行を示しておらずステップＳ３０６の判定がＮＯならば、現在のライン２０２に対するラスタスキャンをスキップして、変数ｉを＋１インクリメントする。これにより、ＣＰＵ１０２は、いままでのライン２０２の次のライン２０２に対するステップＳ３０４のフラグ配列データ２０３の配列要素値Ｆｌｇ［ｉ］の判定処理に移行する。
【００３７】
ＣＰＵ１０２は、配列要素値Ｆｌｇ［ｉ］が「処理」であってラスタスキャンの実行を示しておりステップＳ３０６の判定がＹＥＳならば、まずその配列要素値Ｆｌｇ［ｉ］を「非処理」に設定する（図３のステップＳ３０７）。
【００３８】
次に、ＣＰＵ１０２は、現在のライン２０２上のｎｏｄｅデータ２０１の配列の２次元格子構造上の左端の記憶アドレスから順にＲＡＭ１０４上のアドレスを指定し、ｎｏｄｅデータ２０１を抽出する（図３のステップＳ３０８）。
【００３９】
次に、ＣＰＵ１０２は、ステップＳ３０８で抽出したｎｏｄｅデータ２０１が、Ｐｕｓｈ−Ｒｅｌａｂｅｌ法によるデータ処理の対象であるか否かを判定する（図３のステップＳ３０９）。この判定処理は例えば、ｎｏｄｅデータ２０１の構造体として記憶されているＰｕｓｈ−Ｒｅｌａｂｅｌ法におけるパラメータの１つである超過（オーバーフロー）値が、０より大きいか否かを判定する処理である。
【００４０】
ＣＰＵ１０２は、ｎｏｄｅデータ２０１がＰｕｓｈ−Ｒｅｌａｂｅｌ法によるデータ処理の対象ではなくステップＳ３０９の判定がＮＯならば、ステップＳ３１０からＳ３１３までの処理をスキップして、ステップＳ３１４の判定処理に移行する。
【００４１】
ＣＰＵ１０２は、ｎｏｄｅデータ２０１がＰｕｓｈ−Ｒｅｌａｂｅｌ法によるデータ処理の対象でステップＳ３０９の判定がＹＥＳならば、ステップＳ３０８で抽出したｎｏｄｅデータ２０１の周辺例えば４近傍または８近傍のｎｏｄｅデータ２０１を抽出する（図３のステップＳ３１０）。
【００４２】
次に、ＣＰＵ１０２は、ステップＳ３０８で抽出したｎｏｄｅデータ２０１（中心ノード）とステップＳ３１０で抽出したその周辺のｎｏｄｅデータ２０１（周辺ノード）とに基づいて、Ｐｕｓｈ−Ｒｅｌａｂｅｌ法によるデータ処理を実行する（図３のステップＳ３１１）。具体的には、中心ノードから周辺ノードに対して流量を与える処理（Ｐｕｓｈ−Ｒｅｌａｂｅｌ法におけるＰｕｓｈ処理）、または中心ノードの高さを上げる処理（Ｐｕｓｈ−Ｒｅｌａｂｅｌ法におけるＲｅｌａｂｅｌ処理）を実行する。流量や高さの情報は、各ｎｏｄｅデータ２０１の変数の構造体に保持することができる。より具体的には、このデータ処理は例えば、非特許文献２に記載のＰｕｓｈ−Ｒｅｌａｂｅｌ法に基づいて実現されてよい。
【００４３】
ＣＰＵ１０２は、ステップＳ３１１の処理に基づいて、ステップＳ３０８で抽出したｎｏｄｅデータ２０１（中心ノード）またはステップＳ３１０で抽出したその周辺のｎｏｄｅデータ２０１（周辺ノード）の構造体記憶値を更新する（図３のステップＳ３１２）。
【００４４】
その後、ＣＰＵ１０２は、ステップＳ３１２によって更新された上記各ｎｏｄｅデータ２０１を判定する。そして、ＣＰＵ１０２は、次回のラスタスキャンのために値が更新されたｎｏｄｅデータ２０１が含まれるライン２０２に対応するフラグ配列データ２０３中の配列要素値をラスタスキャンの実行を示す状態を示す値「処理」に更新する（図３のステップＳ３１３）。
【００４５】
ＣＰＵ１０２は、ステップＳ３１３が終了した後またはステップＳ３０９の判定がＮＯになった後に、現在のライン２０２上のｎｏｄｅデータ２０１の配列の２次元格子構造上の右端の記憶アドレスまでＲＡＭ１０４上のアドレスを指定し終えて、１ラインが終了したか否かを判定する（図３のステップＳ３１４）。
【００４６】
ＣＰＵ１０２は、１ラインが終了しておらずステップＳ３１４の判定がＮＯならば、ステップＳ３０８に移行して、現在のライン２０２上の次のｎｏｄｅデータ２０１を抽出し、そのｎｏｄｅデータ２０１に対してステップＳ３０９からＳ３１３で示される制御処理を実行する。
【００４７】
ＣＰＵ１０２は、１ラインが終了してステップＳ３１４の判定がＹＥＳになると、全てのラインに対する処理が終了したか否かを判定する（図３のステップＳ３１５）。
【００４８】
ＣＰＵ１０２は、全てのラインに対する処理が終了しておらずステップＳ３１５の判定がＮＯならば、変数ｉを＋１インクリメントし、いままでのライン２０２の次のライン２０２に対するステップＳ３０４のフラグ配列データ２０３の配列要素値Ｆｌｇ［ｉ］の判定処理に移行する。
【００４９】
ＣＰＵ１０２は、全てのラインに対する処理が終了しステップＳ３１５の判定がＹＥＳになると、図２に例示されるフラグ配列データ２０３中の全ての配列要素値が「非処理」になったか否かを判定する（図３のステップＳ３１６）。
【００５０】
ＣＰＵ１０２は、フラグ配列データ２０３中の全ての配列要素値が「非処理」になっておらずステップＳ３１６の判定がＮＯならば、ステップＳ３０３の処理に戻り、ＲＡＭ１０４上のｎｏｄｅデータ２０１の２次元格子配列の左上から右下に向かって再度ラスタスキャンを繰り返す。
【００５１】
ＣＰＵ１０２は、フラグ配列データ２０３中の全ての配列要素値が「非処理」になってステップＳ３１６の判定がＹＥＳになると、全ての処理を終了する。
【００５２】
以上の図３のフローチャートで示されるデータ処理により、ラスタスキャンの回数を従来技術に比較して削減することが可能となる。
【００５３】
図４は、本発明によるデータ処理装置の他の実施形態であるハードウェアシステムの構成図である。
【００５４】
Ｐｕｓｈ−Ｒｅｌａｂｅｌ演算回路４０４（データ処理実行部）とｎｏｄｅデータ２０１を記憶するＲＡＭ４０３からなる構成が一般的であるが、本実施形態ではさらに、フリップフロップ回路またはＲＡＭからなるフラグレジスタ４０１（フラグ記憶部）と、ｎｏｄｅデータ判定回路４０５（ノードデータ判定部）が追加され、アドレス生成回路４０２がフラグレジスタ４０１の記憶内容に基づいて動作する構成を有する。
【００５５】
フラグレジスタ４０１は、図２のフラグ配列データ２０３の各配列要素値を、フリップフロップまたはＲＡＭの１記憶領域として記憶する。
【００５６】
アドレス生成回路４０２は、図３のフローチャートにおけるステップＳ３０３からＳ３０８、およびＳ３１４に対応するアドレス制御処理を実行するハードウェア回路である。
【００５７】
Ｐｕｓｈ−Ｒｅｌａｂｅｌ演算回路４０４は、図３のフローチャートにおけるステップＳ３０９〜Ｓ３１２に対応するデータ処理を実行するハードウェア回路である。
【００５８】
ｎｏｄｅデータ判定回路４０５は、図３のフローチャートにおけるステップＳ３１３に対応するフラグ更新処理を実行するハードウェア回路である。
【００５９】
以上の図４に示されるハードウェア構成により、ラスタスキャンの繰返しによる２次元データに対するデータ処理を効率的に実行可能な性能の良いデータ処理ハードウェアを実現することが可能となる。
【００６０】
以上の各実施形態に関して、更に以下の付記を開示する。
（付記１）
格子構造を有する２次元データを構成する各ノードデータのラインごとに、該ラインに対するラスタスキャンを実行するか否かを示すフラグを記憶するフラグ記憶部と、
前記ラインごとに、前記フラグ記憶部が記憶する該ラインに対応する前記フラグに基づいて該ラインに対応するラスタスキャンを実行するかスキップするかを制御するラスタスキャン制御部と、
前記ラスタスキャン制御部によって前記ラスタスキャンが実行された前記ライン上の前記各ノードデータに対して、データ処理を実行するデータ処理実行部と、
該データ処理によって更新されたノードデータを判定するノードデータ判定部と、
前記ノードデータ判定部の判定結果に基づき次回のラスタスキャンのために値が更新されたノードデータが含まれるラインに対応する前記フラグ記憶部が記憶するフラグの状態を前記ラスタスキャンの実行を示す状態に更新するフラグ更新部と、
を備えることを特徴とするデータ処理装置。
（付記２）
前記ラスタスキャン制御部は、
前記ラインごとに、前記フラグ記憶部が記憶する該ラインに対応する前記フラグを判定し、該フラグが前記ラスタスキャンの実行を示している場合には該ラインに対応する前記ラスタスキャンを実行し、該フラグが前記ラスタスキャンの実行を示していない場合には該ラインに対応する前記ラスタスキャンをスキップして該ラインの次のラインに対する前記フラグの判定に移行し、
前記２次元データ上の全ての前記ラインに対する制御が終了したときに全ての処理を終了するか否かを判定し、該判定に基づいて、前記ラインごとの制御を繰り返し実行するか前記全ての処理を終了するかを制御する、
ことを特徴とする付記１に記載のデータ処理装置。
（付記３）
前記ラスタスキャン制御部は、
前記ラインに対応する前記フラグが前記ラスタスキャンの実行を示している場合には、前記ノードデータを記憶するメモリに対して、該ラインの先頭に対応するアドレスから該ライン分のアドレスを順次指定することにより、前記メモリの前記順次指定したアドレスから前記ノードデータを順次読み出させる動作として、前記ラスタスキャンを実行する、
ことを特徴とする付記２に記載のデータ処理装置。
（付記４）
前記ラスタスキャン制御部は、前記全ての処理を終了するか否かの判定において、前記フラグ記憶部が記憶する全ての前記フラグが前記ラスタスキャンの実行を示していない場合に、前記全ての処理を終了することを判定する、
ことを特徴とする付記２または３のいずれかに記載のデータ処理装置。
（付記５）
前記ラスタスキャン制御部は、全ての処理の開始時に、前記フラグ記憶部が記憶する全ての前記フラグの状態を前記ラスタスキャンの実行を示す状態に初期設定する、
ことを特徴とする付記１ないし４のいずれかに記載のデータ処理装置。
（付記６）
前記データ処理実行部は、
前記ラスタスキャン制御部による前記ラスタスキャンに従って、前記ラインを構成する前記各ノードデータを順次抽出し、
該抽出したノードデータが前記データ処理の対象である場合に、該抽出したノードデータおよび該抽出したノードデータに関連するノードデータに対する前記データ処理を実行し、その後に次のノードデータの抽出に移行し、
該抽出したノードデータが前記データ処理の対象ではない場合に、次のノードデータの抽出に移行する、
ことを特徴とする付記１ないし５のいずれかに記載のデータ処理装置。
（付記７）
前記データ処理は、前記各ノードデータを含んで構成されるグラフデータ上のソースからシンクへの最大流を算出するための複数の経路を算出するＰｕｓｈ−Ｒｅｌａｂｅｌ法による処理である、
ことを特徴とする付記１ないし６のいずれかに記載のデータ処理装置。
（付記８）
前記２次元データは画像データであり、前記ノードデータは、前記画像データを構成する画素データから変換されたマルコフ確率場データである、
ことを特徴とする付記１ないし７のいずれかに記載のデータ処理装置。
（付記９）
格子構造を有する２次元データを構成する各ノードデータのラインごとに、該ラインに対するラスタスキャンを実行するか否かを示すフラグを記憶し、
前記ラインごとに、該ラインに対応する前記記憶したフラグに基づいて該ラインに対応するラスタスキャンを実行するかスキップするかを制御し、
前記ラスタスキャンが実行された前記ライン上の前記各ノードデータに対して、データ処理を実行し、
該データ処理によって更新されたノードデータを判定し、
前記ノードデータの判定結果に基づき次回のラスタスキャンのために値が更新されたノードデータが含まれるラインに対応する前記記憶しているフラグの状態を前記ラスタスキャンの実行を示す状態に更新する、
ことを特徴とするデータ処理方法。
（付記１０）
格子構造を有する２次元データを構成する各ノードデータのラインごとに、該ラインに対するラスタスキャンを実行するか否かを示すフラグを記憶するステップと、
前記ラインごとに、該ラインに対応する前記記憶したフラグに基づいて該ラインに対応するラスタスキャンを実行するかスキップするかを制御するステップと、
前記ラスタスキャンが実行された前記ライン上の前記各ノードデータに対して、データ処理を実行するステップと、
該データ処理によって更新されたノードデータを判定するステップと、
前記ノードデータの判定結果に基づき次回のラスタスキャンのために値が更新されたノードデータが含まれるラインに対応する前記記憶しているフラグの状態を前記ラスタスキャンの実行を示す状態に更新するステップと、
をコンピュータに実行させるためのプログラム。
【符号の説明】
【００６１】
１０１  データ処理装置
１０２  ＣＰＵ
１０３  ＲＯＭ
１０４  ＲＡＭ
１０５  外部記憶装置
１０６  通信インタフェース
１０７  入力装置
１０８  表示装置
１０９  可搬記録媒体駆動装置
１１０  可搬記録媒体
１１１  バス
１１２  撮像装置
２０１  ｎｏｄｅデータ
２０２  ライン
２０３  フラグ配列データ
４０１  フラグレジスタ
４０２  アドレス生成回路
４０３  ＲＡＭ
４０４  Ｐｕｓｈ−Ｒｅｌａｂｅｌ演算回路
４０５  ｎｏｄｅデータ判定回路
【図１】
2014203386.tif 000003
【図３】
2014203386.tif 000004
【図４】
2014203386.tif 000005
【図２】
2014203386.tif 000006