IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士フイルム株式会社の特許一覧 ▶ 富士ゼロックス株式会社の特許一覧

特許7039424画像処理装置、画像処理方法、及び画像処理プログラム
<>
  • 特許-画像処理装置、画像処理方法、及び画像処理プログラム 図1
  • 特許-画像処理装置、画像処理方法、及び画像処理プログラム 図2A
  • 特許-画像処理装置、画像処理方法、及び画像処理プログラム 図2B
  • 特許-画像処理装置、画像処理方法、及び画像処理プログラム 図3
  • 特許-画像処理装置、画像処理方法、及び画像処理プログラム 図4A
  • 特許-画像処理装置、画像処理方法、及び画像処理プログラム 図4B
  • 特許-画像処理装置、画像処理方法、及び画像処理プログラム 図5
  • 特許-画像処理装置、画像処理方法、及び画像処理プログラム 図6
  • 特許-画像処理装置、画像処理方法、及び画像処理プログラム 図7
  • 特許-画像処理装置、画像処理方法、及び画像処理プログラム 図8
  • 特許-画像処理装置、画像処理方法、及び画像処理プログラム 図9
  • 特許-画像処理装置、画像処理方法、及び画像処理プログラム 図10
  • 特許-画像処理装置、画像処理方法、及び画像処理プログラム 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-03-11
(45)【発行日】2022-03-22
(54)【発明の名称】画像処理装置、画像処理方法、及び画像処理プログラム
(51)【国際特許分類】
   G06T 1/20 20060101AFI20220314BHJP
   G06F 9/50 20060101ALI20220314BHJP
【FI】
G06T1/20 A
G06F9/50 150E
【請求項の数】 6
(21)【出願番号】P 2018163784
(22)【出願日】2018-08-31
(65)【公開番号】P2020035393
(43)【公開日】2020-03-05
【審査請求日】2020-07-31
(73)【特許権者】
【識別番号】306037311
【氏名又は名称】富士フイルム株式会社
(73)【特許権者】
【識別番号】000005496
【氏名又は名称】富士フイルムビジネスイノベーション株式会社
(74)【代理人】
【識別番号】110001519
【氏名又は名称】特許業務法人太陽国際特許事務所
(72)【発明者】
【氏名】板垣 和幸
(72)【発明者】
【氏名】長尾 隆
【審査官】板垣 有紀
(56)【参考文献】
【文献】国際公開第2017/163441(WO,A1)
【文献】特開2010-146055(JP,A)
【文献】米国特許出願公開第2016/0358312(US,A1)
【文献】特開2014-238683(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 1/20
G06T 1/60
G06F 9/48
G06F 9/50
(57)【特許請求の範囲】
【請求項1】
画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置であって、
前記画像処理の対象となる画像データを分割画像データに分割する分割部と、
予め定められた記憶領域に記憶された前記分割画像データに対して行う画像処理である部分処理の各々を複数の演算装置の各々に並列して実行させる制御を行う制御部と、
前記オブジェクト群のうちの最前段のオブジェクトにより実行される前記部分処理が処理対象とする前記分割画像データが前記記憶領域に記憶される度に、前記分割画像データが前記記憶領域に記憶されたことを前記制御部に通知する通知部と、
を備えた画像処理装置。
【請求項2】
前記通知部は、前記分割画像データが前記記憶領域に記憶されたことを表す通知情報を、前記制御部が参照可能な通知キューに格納することによって前記通知を行う
請求項1に記載の画像処理装置。
【請求項3】
前記制御部は、前記最前段のオブジェクトにより実行される前記部分処理について、実行可能な前記部分処理が存在せず、かつ前記通知キューに前記通知情報が格納されていない場合、スリープ状態へと移行し、前記スリープ状態へと移行した状態で、かつ前記通知キューに前記通知情報が格納された場合、アクティブ状態へと移行し、前記制御を行う
請求項2に記載の画像処理装置。
【請求項4】
前記制御部は、実行可能な前記部分処理を、前記複数の演算装置が参照可能なタスクキューに格納することによって前記制御を行う
請求項1から請求項3の何れか1項に記載の画像処理装置。
【請求項5】
画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置が実行する画像処理方法であって、
前記画像処理の対象となる画像データを分割画像データに分割し、
予め定められた記憶領域に記憶された前記分割画像データに対して行う画像処理である部分処理の各々を複数の演算装置の各々に並列して実行させる制御を行い、
前記オブジェクト群のうちの最前段のオブジェクトにより実行される前記部分処理が処理対象とする前記分割画像データが前記記憶領域に記憶される度に、前記分割画像データが前記記憶領域に記憶されたことを、前記制御を行う制御部に通知する
処理を含む画像処理方法。
【請求項6】
コンピュータを、請求項1から請求項4の何れか1項に記載の画像処理装置の分割部、制御部、及び通知部として機能させるための画像処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、画像処理装置、画像処理方法、及び画像処理プログラムに関する。
【背景技術】
【0002】
従来、プログラムモジュールの組合せを表したグラフ構造を、分割した入力データ毎にノードを分割したグラフ構造に変換し、変換したグラフ構造の先行ノードの処理が終わったノードを並列に処理する情報処理装置が開示されている(特許文献1参照)。
【0003】
また、DAG(Directed Acyclic Graph:有向非循環(非巡回)グラフ)形態で表された画像処理の実行順序に従って、並列に画像処理を行う技術が開示されている。(非特許文献1参照)。
【先行技術文献】
【特許文献】
【0004】
【文献】特許第4491026号公報
【非特許文献】
【0005】
【文献】The OpenVX Specification、[online]、[2018年8月7日検索]、インターネット<URL: https://www.khronos.org/registry/OpenVX/specs/1.2/OpenVX_Specification_1_2.pdf>
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1及び非特許文献1に記載の技術は、処理の開始時に、処理対象とする全ての入力データが装置内の記憶部に記憶されている必要があり、全ての入力データが装置内の記憶部に記憶されるまで処理を開始できないものであった。このため、処理全体の処理時間が増大してしまう場合があった。
【0007】
本開示は、以上の事情を鑑みて成されたものであり、画像処理全体の処理時間を短縮することができる画像処理装置、画像処理方法、及び画像処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
上記目的を達成するために、本開示の画像処理装置は、画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置であって、画像処理の対象となる画像データを分割画像データに分割する分割部と、予め定められた記憶領域に記憶された分割画像データに対して行う画像処理である部分処理の各々を複数の演算装置の各々に並列して実行させる制御を行う制御部と、部分処理に対応する分割画像データが記憶領域に記憶された場合に、分割画像データが記憶領域に記憶されたことを制御部に通知する通知部と、を備える。
【0009】
なお、本開示の画像処理装置は、通知部が、分割画像データが記憶領域に記憶されたことを表す通知情報を、制御部が参照可能な通知キューに格納することによって上記通知を行ってもよい。
【0010】
また、本開示の画像処理装置は、制御部が、実行可能な部分処理が存在せず、かつ通知キューに通知情報が格納されていない場合、スリープ状態へと移行し、スリープ状態へと移行した状態で、かつ通知キューに通知情報が格納された場合、アクティブ状態へと移行し、上記制御を行ってもよい。
【0011】
また、本開示の画像処理装置は、制御部が、実行可能な前記部分処理を、複数の演算装置が参照可能なタスクキューに格納することによって上記制御を行ってもよい。
【0012】
一方、上記目的を達成するために、本開示の画像処理方法は、画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置が実行する画像処理方法であって、画像処理の対象となる画像データを分割画像データに分割し、予め定められた記憶領域に記憶された分割画像データに対して行う画像処理である部分処理の各々を複数の演算装置の各々に並列して実行させる制御を行い、部分処理に対応する分割画像データが記憶領域に記憶された場合に、分割画像データが記憶領域に記憶されたことを、上記制御を行う制御部に通知する処理を含むものである。
【0013】
また、上記目的を達成するために、本開示の画像処理プログラムは、コンピュータを、本開示の画像処理装置の分割部、制御部、及び通知部として機能させるためのものである。
【発明の効果】
【0014】
本開示によれば、画像処理全体の処理時間を短縮することができる。
【図面の簡単な説明】
【0015】
図1】実施形態に係る画像処理装置として機能するコンピュータの構成の一例を示すブロック図である。
図2A】画像処理DAGの一例を示す概略図である。
図2B】画像処理DAGに入出力用のメモリを加えた場合の一例を示す概略図である。
図3】実施形態に係る処理制御部の機能的な構成の一例を示すブロック図である。
図4A】入力画像の分割処理の一例の説明に供する概略図である。
図4B】入力画像の分割処理の一例の説明に供する概略図である。
図5】画像処理モジュールが部分処理に分割された画像処理DAGの一例を示す概略図である。
図6】実施形態に係るDAG構築・実行処理の流れの一例を示すフローチャートである。
図7】実施形態に係る第1タスク格納処理の流れの一例を示すフローチャートである。
図8】実施形態に係るタスクキューへのタスクの格納処理の説明に供する概略図である。
図9】実施形態に係る第2タスク格納処理の流れの一例を示すフローチャートである。
図10】実施形態に係るタスク実行処理の流れの一例を示すフローチャートである。
図11】実施形態に係る通知処理の流れの一例を示すフローチャートである。
【発明を実施するための形態】
【0016】
以下、図面を参照して、本開示の技術を実施するための形態例を詳細に説明する。
【0017】
まず、図1を参照して、画像処理装置として機能するコンピュータ10の構成を説明する。なお、コンピュータ10は、複写機、プリンタ、ファクシミリ装置、これらの装置の機能を兼ね備えた複合機、及びスキャナ等の内部で画像処理を行う画像取扱機器に組み込まれたコンピュータであってもよい。また、コンピュータ10は、PC(Personal Computer)等の独立したコンピュータであってもよく、PDA(Personal Digital Assistant)及び携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
【0018】
図1に示すように、本実施形態に係るコンピュータ10は、第1演算部12A、第2演算部12B、メモリ14、表示部16、操作部18、記憶部20、画像データ供給部22、及び画像出力部24を備えている。また、第1演算部12A、第2演算部12B、メモリ14、表示部16、操作部18、記憶部20、画像データ供給部22、及び画像出力部24の各部は、バス26を介して互いに接続されている。
【0019】
本実施形態に係る第1演算部12Aは、コンピュータ10のメイン・プロセッサであり、一例として複数のプロセッサ・コア13(以下、「コア13」という。)を有するCPU(Central Processing Unit)である。なお、各コア13が、画像処理を実行する演算装置の一例である。以下では、各コア13を区別して説明する場合は、コア13A、コア13Bのように、符号の末尾にアルファベットを付して説明する。
【0020】
また、本実施形態に係る第2演算部12Bは、一例として内部にローカルメモリ15を有するGPU(Graphics Processing Unit)である。なお、第2演算部12Bは、ローカルメモリ15等の内部メモリを備え、内部メモリに記憶された画像データに対して画像処理を行う演算装置であれば、特に限定されず、例えば、CPUでもよい。また、第2演算部12Bは、第1演算部12Aに内蔵されたGPUでもよい。また、第1演算部12A及び第2演算部12Bは、FPGA(Field Programmable Gate Array)等の演算器でもよい。
【0021】
メモリ14は、第1演算部12Aが一時的にデータを記憶させる不揮発性の記憶手段である。本実施形態に係る第2演算部12Bにより画像処理を行う場合、第1演算部12Aはメモリ14又は記憶部20の記憶領域に記憶された画像データを第2演算部12Bにバス26を介して転送する。そして、第2演算部12Bは、第1演算部12Aから転送された画像データをローカルメモリ15に記憶し、記憶した画像データに対して画像処理を行う。
【0022】
コンピュータ10が前述した画像取扱機器に組み込まれている場合、表示部16及び操作部18は、例えば画像取扱機器に設けられたLCD(Liquid Crystal Display)等の表示パネル及びテンキー等が適用される。また、コンピュータ10が独立したコンピュータである場合、表示部16及び操作部18は、例えばコンピュータ10に接続されたディスプレイ、及びキーボード、マウス等が適用される。また、表示部16及び操作部18は、タッチパネル及びディスプレイが一体化して構成されたタッチパネルディスプレイ等でもよい。また、記憶部20は、HDD(Hard Disk Drive)、SSD(Solid State Drive)、及びフラッシュメモリ等の不揮発性の記憶媒体が適用される。
【0023】
画像データ供給部22は、処理対象の画像データを供給するものであればよく、例えば紙又は写真フィルム等の記録材料に記録されている画像を読み取って画像データを出力する画像読取部が適用される。また、画像データ供給部22は、例えば通信回線を介して外部装置から画像データを受信する受信部等が適用される。
【0024】
画像出力部24は、画像処理を経た画像データ又は画像処理を経た画像データが表す画像を出力するものであればよく、例えば画像データが表す画像を紙又は感光材料等の記録材料に記録する画像記録部が適用される。また、画像出力部24は、画像データが表す画像をディスプレイ等に表示する表示部(表示部16)、画像データをCD-ROM(Compact Disk Read Only Memory)等の記録媒体に書き込む書込装置が適用される。また、画像出力部24は、画像処理を経た画像データを、通信回線を介して外部装置に送信する送信部が適用される。また、画像出力部24は、画像処理を経た画像データを記憶する画像記憶部(メモリ14又は記憶部20)であってもよい。
【0025】
図1に示すように、記憶部20には、第1演算部12A及び第2演算部12Bによって実行される各種プログラムが記憶されている。記憶部20には、各種プログラムとして、リソースの管理、プログラムの実行の管理、及びコンピュータ10と外部装置との通信等を司るオペレーティングシステム30のプログラムが記憶されている。また、記憶部20には、各種プログラムとして、コンピュータ10を画像処理装置として機能させるための画像処理プログラム群34が記憶されている。また、記憶部20には、各種プログラムとして、上記画像処理装置に対して所望の画像処理を行わせる各種のアプリケーションプログラム群32(以下、「アプリケーション32」という。)が記憶されている。
【0026】
画像処理プログラム群34は、前述した画像取扱機器、携帯機器、及びPC等で実行される画像処理プログラムを開発する際の負荷を軽減することを目的として開発されたプログラムである。また、画像処理プログラム群34は、前述した画像取扱機器、携帯機器、及びPC等の各種機器(プラットフォーム)で共通に実行可能に開発されたプログラムである。
【0027】
画像処理プログラム群34によって実現される画像処理装置は、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理DAG50A(詳細は後述)を構築する。そして、上記画像処理装置は、アプリケーション32からの実行指示に従い画像処理DAG50Aの処理を実行する。このため、画像処理プログラム群34は、所望の画像処理を行う画像処理DAG50Aの構築を指示したり、構築された画像処理DAG50Aによる画像処理の実行を指示したりするためのインタフェースをアプリケーション32に提供している。
【0028】
以上の構成により、内部で画像処理を行う必要のある任意の機器を新規に開発する場合等にも、上記画像処理を行うプログラムの開発に関しては、上記任意の機器で必要とされる画像処理を、上記インタフェースを利用して画像処理プログラム群34に行わせるアプリケーション32を開発すればよい。従って、開発者は、実際に画像処理を行うプログラムを新たに開発する必要が無くなり、開発者の負荷が軽減される。
【0029】
次に、本実施形態に係る画像処理プログラム群34について詳細に説明する。図1に示すように、画像処理プログラム群34は、モジュールライブラリ36、処理構築部42のプログラム、及び処理制御部46のプログラムを含む。
【0030】
モジュールライブラリ36は、予め定められた互いに異なる画像処理を行う複数種類の画像処理モジュール38のプログラムが各々登録されている。この画像処理としては、例えば、入力処理、フィルタ処理、色変換処理、拡大・縮小処理(図1では「拡縮処理」と表記)、スキュー角検知処理、画像回転処理、画像合成処理、及び出力処理等が挙げられる。
【0031】
また、モジュールライブラリ36には、画像処理の種類が同一で、かつ実行する画像処理の内容が異なる画像処理モジュール38も登録されている。図1では、この種の画像処理モジュールを「モジュール1」、「モジュール2」と、末尾に数字を付して区別している。例えば、拡大・縮小処理を行う画像処理モジュール38については、入力された画像データを、水平方向及び垂直方向の各方向ともに1画素おきに間引くことで画像の縦横のサイズを50%に縮小する縮小処理を行う画像処理モジュール38が用意されている。さらに、例えば、拡大・縮小処理を行う画像処理モジュール38については、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール38等が用意されている。
【0032】
また、例えば、色変換処理を行う画像処理モジュール38については、RGB(Red Green Blue)色空間の画像をCMYK(Cyan Magenta Yellow Key-Plate(黒))色空間の画像へ変換する画像処理モジュール38、及びCMYK色空間の画像をRGB色空間の画像へ変換する画像処理モジュール38が用意されている。さらに、例えば、色変換処理を行う画像処理モジュール38については、RGB色空間の画像をYCbCr色空間の画像へ変換する画像処理モジュール38、及びYCbCr色空間の画像をRGB色空間の画像へ変換する画像処理モジュール38等が用意されている。
【0033】
また、モジュールライブラリ36には、画像データを記憶するための記憶領域(バッファ)を備えたバッファモジュール40も登録されている。
【0034】
本実施形態に係る処理構築部42は、アプリケーション32からの指示により、DAG形態の画像処理DAG50Aを構築する。画像処理DAG50Aは、一例として図2Aに示すように、1つ以上の画像処理モジュール38が、個々の画像処理モジュール38の前段及び後段の少なくとも一方に配置されたバッファモジュール40を介して連結される。
【0035】
なお、個々の画像処理モジュール38は、入力画像データに対して画像処理を実行するオブジェクトの一例である。また、図2Aに示す例では、バッファモジュール40を介して前段に画像処理モジュール38が連結された画像処理モジュール38は、前段の画像処理モジュール38による画像処理が終了した場合に、自身の画像処理の実行が可能となることを示している。また、バッファモジュール40を介して前段に複数の画像処理モジュール38が連結された画像処理モジュール38は、前段の複数の画像処理モジュール38の全ての画像処理が終了した場合に、自身の画像処理の実行が可能となることを示している。
【0036】
また、図2Aでは、各モジュールのみが処理の順に接続されたDAGを示しているが、このDAGが実行される際には、図2Bに示すようにメモリ14に記憶された入力画像データが入力されてDAGに従って画像処理が行われる。そして、最終的にメモリ14に処理済みの出力画像データ等の処理結果が記憶される。
【0037】
次に、図3を参照して、本実施形態に係る処理制御部46の機能的な構成を説明する。図3に示すように、処理制御部46は、分割部60、制御部62、タスクキュー64、出力部66、通知部67、及び通知キュー68を備えている。
【0038】
本実施形態に係る分割部60は、入力画像データの処理対象とする部分により示される画像を複数の部分領域(以下、「分割画像」という)に分割する。一例として図4Aに示すように、分割部60は、入力画像データの処理対象とする部分により示される画像Gを、複数(図4Aに示す例では3つ)の分割画像B1~B3に分割する。以下では分割画像を示す画像データを「分割画像データ」という。
【0039】
入力画像データの処理対象とする部分とは、色変換処理のように入力画像全体を処理対象とする画像処理では、入力画像データ全体が処理対象とする部分を意味する。また、入力画像データの処理対象とする部分とは、切り抜き(トリミング)処理のように、入力画像の一部を処理対象とする画像処理では、入力画像の一部を意味する。以下では、錯綜を回避するために、入力画像データの処理対象とする部分を、単に「入力画像データ」という。
【0040】
また、図4Aに示した例では、分割部60が画像Gを正面視上下に分割しているが、これに限定されない。例えば分割部60は画像Gを正面視左右に分割してもよいし、図4Bに示すように、正面視上下左右に分割してもよい。
【0041】
なお、分割部60による入力画像データの分割数は特に限定されない。例えば、分割部60は、予め定められた数又はサイズで入力画像データを分割してもよい。また、例えば、分割部60は、画像処理モジュール38による画像処理を実行する演算部が有するプロセッサ・コア数以下で、かつ2以上の数に入力画像データを分割してもよい。
【0042】
また、例えば、分割部60は、画像処理モジュール38による画像処理を実行する演算部が有するキャッシュメモリの容量以下のサイズで入力画像データを分割してもよい。この場合、例えば、分割部60は、画像処理モジュール38による画像処理を実行する演算部のプロセッサから最も遠いレベルのキャッシュメモリ、所謂LLC(Last Level Cache)の容量以下で、かつLLCの容量に極力一致するサイズで入力画像データを分割する形態が例示される。
【0043】
本実施形態に係る画像データ供給部22は、画像データを供給する前に、画像データの大きさ(例えば、縦と横の画素数等)及びデータ容量等の画像データに関する情報を供給する。そして、画像データ供給部22は、画像データに関する情報の供給後に、画像データの供給を開始する。この際、画像データ供給部22は、画像データが示す画像の左上の画素から右下の画素に向かう順番等の予め定められた順番に従って、画像データを順次供給する。従って、本実施形態に係る分割部60は、処理対象の画像データ全体が画像データ供給部22から供給されていなくても、画像データに関する情報に基づいて、画像データを分割することができる。
【0044】
本実施形態に係る制御部62は、分割画像データに対応するタスクを複数のコア13に並列に実行させる制御を行う。なお、ここでいう並列とは、依存関係に基づいて実行可能となったタスクが複数のコア13により並列に(同時に)実行されることを意味する。
【0045】
具体的には、制御部62は、一例として図5に示すように、画像処理DAG50Aの各画像処理モジュール38で実行される画像処理を分割画像データ(分割部60により分割された分割画像データ)の各々に対応する部分処理39に分割して、画像処理DAG50Aを画像処理DAG50Bに更新する。なお、画像処理DAG50Bは、各部分処理39のタスクにおけるDAGを表すものであり、いわゆるタスクDAGである。
【0046】
なお、図5は、図2Aに示した画像処理DAG50Aにおいて、入力画像データを4つの分割画像データに分割した場合の画像処理DAG50Bを示している。図5では、錯綜を回避するために、バッファモジュール40の図示を省略している。
【0047】
本実施形態に係る制御部62は、画像処理モジュール38で実行される画像処理の種類に応じて、前段に連結された画像処理モジュール38の部分処理39と、後段に連結された画像処理モジュール38の部分処理39との間で依存関係を付与する。なお、図5では、この依存関係を破線の矢印で示している。
【0048】
例えば、色変換処理のように、処理対象とする画素のみに対して画像処理を行う処理は、各部分処理39も1対1の依存関係となる。一方、例えば、フィルタ処理のように、処理対象とする画素の周辺画素も必要な画像処理では、周辺画素に対して画像処理を行う前段の部分処理39にも依存関係を付与することとなる。すなわち、この依存関係は、連結された画像処理モジュール38間において、前段に連結された画像処理モジュール38の部分処理39が終了した場合に、後段に連結された画像処理モジュール38の部分処理39が実行可能となる関係である。従って、各部分処理39は、前段に依存関係が付与された部分処理39が存在しない場合か、又は依存関係が付与された前段の全ての部分処理39が終了した場合に実行可能となる。
【0049】
具体的には、例えば、図5に示す部分処理39A、39B、39Dは、画像処理の実行開始時に実行可能となる。また、例えば、図5に示す部分処理39Cは、依存関係が付与された前段の部分処理39A及び部分処理39Bの双方の処理が終了した場合に実行可能となる。
【0050】
なお、本実施形態においては、分割画像データに対応する部分処理39について、「タスク」と称している。
【0051】
制御部62は、実行可能となっているタスクを、格納されたタスクを複数のコア13の各々が順次取り出して実行するためのタスクキュー64に格納する。なお、一例として、本実施形態の制御部62は、タスクキュー64に同時に格納するタスクの数を2つ以下としている。本実施形態に係るタスクキュー64は、各コア13により参照可能なキューである。
【0052】
なお、タスクキュー64に同時に格納するタスクの数は、本実施形態に限定されないが、2つ以上であることが好ましい。タスクキュー64にタスクを1つだけ格納する場合に、タスクの実行が完了するまで新たなタスクをタスクキュー64に格納しないとすると、新たなタスクがタスクキュー64に格納されず、複数あるコア13のうち、稼働しないコア13が増加してしまい、コア13の稼働率が低下する。一方、タスクキュー64が同時に格納可能なタスクの数を制限しない場合、タスクキュー64に格納された全てのタスクに対して、前処理(詳細後述)において、メモリが確保されるため、確保されるメモリ容量が多くなってしまう。
【0053】
従って、タスクキュー64が同時に格納可能なタスクの数を制限することにより、前処理において確保されるメモリ等のリソースの量が増加するのが抑制される。そのため、タスクキュー64が同時に格納可能なタスクの数は、メモリの容量等に応じて定めてもよいし、コア13の稼働率に応じて可変としてもよい。
【0054】
制御部62は、タスクキュー64からタスクを取得し、取得したタスクを実行する。タスクの実行後、制御部62は図5の依存を更新し、新たに実行可能になったタスクがあれば、タスクを生成し、生成したタスクをタスクキュー64に格納する。
【0055】
ところで、図5の例では、分割画像データ毎に記憶の完了を確認しない場合、コンピュータ10内の予め定められた記憶領域(図2Bの例ではメモリ14)に、画像データ(図2Bの例では入力画像データ1、2)全体が予め記憶されている場合に、部分処理39A、39B、39D等の最前段のタスクが、画像処理の実行開始時に実行可能となる。なお、ここでいう最前段のタスクとは、自身の前段に依存関係のあるタスクが存在しないタスクを意味する。また、以下では、単に記憶領域と記載した場合は、上記のコンピュータ10内の予め定められた記憶領域を意味するものとする。
【0056】
しかしながら、画像処理の実行開始時に、画像データ供給部22からの画像データ全体の供給が完了していない場合、及び実行環境下のメモリ制約により、画像データ全体を記憶領域(例えば、メモリ14及びローカルメモリ15等)に記憶することが難しい場合等が考えられる。すなわち、画像データ全体は記憶領域に記憶されていないものの、分割画像データは記憶領域に記憶されている場合が考えられる。そこで、本実施形態に係る制御部62は、処理対象の分割画像データの記憶領域への記憶が完了しているタスクについては、実行可能と判断し、タスクをタスクキュー64に格納する。
【0057】
一方、制御部62は、記憶領域への記憶が完了していない分割画像データを処理対象とするタスクについては、実行可能とは判断しない。
【0058】
また、制御部62は、最前段のタスクについて、実行可能なタスクが存在せず、かつ通知キュー68に後述する通知情報が格納されていない場合、スリープ状態へと移行する。また、制御部62は、スリープ状態へと移行した状態で、かつ通知キュー68に通知情報が格納された場合、アクティブ状態へと移行する。なお、本実施形態に係るタスクキュー64は、制御部62として機能するコア13が参照可能なキューである。
【0059】
本実施形態に係る通知部67は、処理対象の画像データの記憶先の記憶領域に、その画像データを分割した各分割画像データが記憶された場合に、分割画像データが記憶されたことを制御部62に通知する。
【0060】
具体的には、通知部67は、記憶領域への分割画像データの記憶が完了した場合に、分割画像データが記憶されたことを表す通知情報を通知キュー68に格納することによって、分割画像データが記憶されたことを制御部62に通知する。通知部67は、この通知を、例えば、処理対象の画像データの識別情報、記憶領域のアドレス、及び画像データの記憶領域への記憶が完了した部分までのデータ容量等を含む蓄積情報に基づいて行う。通知部67は、以上の通知を、画像処理DAG50Bの最前段のタスクの各々について行う。
【0061】
本実施形態に係る出力部66は、制御部62による制御により、画像処理DAG50Bの最終段の画像処理モジュール38により実行された画像処理の結果得られた出力画像データを出力する。本実施形態では、出力部66は、得られた出力画像データにより示される出力画像を表示部16に表示する。なお、出力部66は、出力画像データを外部装置に出力(送信)してもよい。また、コンピュータ10がプリンタに組み込まれている場合は、出力部66は、出力画像データにより示される出力画像を紙等の記録材料に出力(形成)してもよい。
【0062】
次に、図6図11を参照して、本実施形態に係るコンピュータ10の作用を説明する。図6は、アプリケーション32により画像処理の実行開始の指示が入力された場合に第1演算部12Aによって実行されるDAG構築・実行処理の流れを示すフローチャートである。また、DAG構築・実行処理のプログラム(DAG構築・実行処理プログラム)は記憶部20に予めインストールされている。また、第1演算部12Aにおける何らかのタスクを実行してなく、タスクを実行可能なコア13がDAG構築・実行処理プログラムを実行することで、前述した処理構築部42、分割部60、及び制御部62として機能する。
【0063】
図6のステップ100で、処理構築部42は、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理DAG50Aを構築する。ステップ102で、分割部60は、前述したように、画像データ供給部22から供給された画像データに関する情報に基づいて、入力画像データの処理対象とする部分により示される画像を複数の分割画像に分割する。
【0064】
ステップ104で、処理構築部42は、前述したように、ステップ100で構築された画像処理DAG50Aをステップ102の分割により得られた分割画像データの各々に対応する部分処理39に分割して、画像処理DAG50Bに更新する。
【0065】
ステップ106で、制御部62及び処理構築部42は、ステップ104で更新された画像処理DAG50Bによる画像処理の実行を、第1演算部12A(コア13)及び第2演算部12Bに実行させる画像処理DAG実行処理を実行した後、本DAG構築・実行処理を終了する。
【0066】
本DAG構築・実行処理を実行することにより、出力部66からアプリケーション32が所望する画像処理の結果が得られる。なお、本実施形態では、本DAG構築・実行処理が終了した場合、制御部62は、処理が完了したことを表す情報、もしくは、処理中に何らかのエラーが生じた場合、その旨を表す情報をアプリケーション32へ通知する。
【0067】
次に、上記DAG構築・実行処理のステップ106における画像処理DAG実行処理について詳細に説明する。本実施形態に係る画像処理DAG実行処理には、画像処理DAG50Bの実行可能なタスクをタスクキュー64に格納するタスク格納処理と、タスクキュー64に格納されているタスクを実行するタスク実行処理とが含まれる。更に、本実施形態に係るDAG構築・実行処理には、処理対象とする分割画像データが記憶領域に記憶されたことを通知する通知処理が含まれる。また、タスク格納処理には、画像処理DAG50Bの最前段のタスクについて実行される第1タスク格納処理と、画像処理DAG50Bの2段目以降のタスクについて実行される第2タスク格納処理とが含まれる。
【0068】
図7を参照して第1タスク格納処理について説明する。図7は、第1タスク格納処理の流れを示すフローチャートである。本実施形態では、第1タスク格納処理のプログラム(第1タスク格納処理プログラム)は、DAG構築・実行処理プログラムの一部、または別のいわゆるサブプログラム等として記憶部20に予めインストールされている。第1演算部12Aにおける何らかのタスクを実行してなく、タスクを実行可能なコア13が第1タスク格納処理プログラムを実行することで、制御部62として機能し、図7に示す第1タスク格納処理を実行する。
【0069】
図7のステップ110で、制御部62は、タスクキュー64に、実行可能なタスクが格納されているか否かを判定する。本実施形態では、タスクキュー64に格納されている実行可能なタスクが2以上の場合、ステップ110の判定が肯定判定となり、処理はステップ118に移行する。また、タスクキュー64に格納されている実行可能なタスクが2未満の場合、ステップ110の判定が否定判定となり、処理はステップ112に移行する。
【0070】
ステップ112で、制御部62は、画像処理DAG50Bの最前段のタスクに実行可能なタスクがあるか否かを判定する。具体的には、制御部62は、画像処理DAG50Bの最前段のタスクに、処理対象の分割画像データが記憶領域に記憶されているタスクがある場合、そのタスクを実行可能なタスクであると判定する。この判定が肯定判定となった場合は、処理はステップ116に移行し、否定判定となった場合は、処理はステップ114に移行する。
【0071】
ステップ114で、制御部62は、通知キュー68から通知情報を取得する。この取得処理は、同期処理(ブロック処理)であり、制御部62は、通知情報が取得できるまで、すなわち、通知キュー68に通知情報が格納されるまで、待機し続けるスリープ状態へ移行する。なお、制御部62は、同期処理で待機し続けるのではなく、通知キュー68に通知情報が格納されるまでループし続けてもよい。このループし続ける処理は、一般的に、ビジーウェイト、又はスピンロックと称される。但し、制御部62が同期処理で待機し続ける方が、ループし続けるよりも、システム全体の演算リソースの消費量を低減することができ、好ましい。この通知情報は、後述する図11に示す通知処理のステップ144の処理により通知キュー68に格納される。
【0072】
制御部62は、通知キュー68に通知情報が格納されるとスリープ状態からアクティブ状態へ移行し、処理はステップ112に戻る。なお、制御部62がアクティブ状態に移行した後に、ステップ116に移行するのではなく、ステップ112に戻るのは以下の理由からである。第1タスク格納処理が複数のコア13で行われる場合、通知キュー68に通知情報が格納されて、ステップ114において制御部62がアクティブ状態へ移行する際に、同じタイミングで別のコア13(スレッド)において第1タスク格納処理が行われ、既に実行可能なタスクが無い状態になる可能性があることを考慮しているからである。
【0073】
ステップ116で、一例として図8に示すように、制御部62は、実行可能なタスクをタスクキュー64に格納する。図8の例では、制御部62が、実行可能なタスクをタスクキュー64に格納した状態を示している。また、図8の例では、コア13A~コア13Cのうち、コア13Cがタスクキュー64に格納されたタスクを取得し、取得したタスクを実行する。タスクを実行する処理の詳細は図10を用いて後述する。
【0074】
なお、この際、前述したように、タスクキュー64に格納されているタスクの数が2以下であればよく、本ステップ116において制御部62がタスクキュー64に同時に格納させるタスクの数は1つでもよいし、2つでもよい。具体的には、タスクキュー64にタスクが格納されていない場合、制御部62は、タスクを1つもしくは2つ格納すればよいし、タスクキュー64にタスクが1つ格納されている場合、タスクキュー64は、タスクを1つ格納すればよい。本ステップ116において制御部62がタスクキュー64に同時に格納させるタスクの数をいずれとするかは、予め定めておいてもよいし、各コア13におけるタスク処理の進行に応じて可変としてもよい。
【0075】
ステップ118で、制御部62は、画像処理DAG50Bの最前段の全タスクをタスクキュー64に格納したか否かを判定する。この判定が否定判定となった場合は、処理はステップ110に戻り、肯定判定となった場合は、本第1タスク格納処理が終了する。
【0076】
図9を参照して第2タスク格納処理について説明する。図9は、第2タスク格納処理の流れを示すフローチャートである。本実施形態では、第2タスク格納処理のプログラム(第2タスク格納処理プログラム)は、DAG構築・実行処理プログラムの一部、または別のいわゆるサブプログラム等として記憶部20に予めインストールされている。第1演算部12Aにおける何らかのタスクを実行してなく、タスクを実行可能なコア13が第2タスク格納処理プログラムを実行することで、制御部62として機能し、図9に示す第2タスク格納処理を実行する。
【0077】
図9のステップ120で、制御部62は、タスクキュー64に、実行可能なタスクが格納されているか否かを判定する。本実施形態では、タスクキュー64に格納されている実行可能なタスクが2以上の場合、ステップ120の判定が肯定判定となり、処理はステップ126に移行する。また、タスクキュー64に格納されている実行可能なタスクが2未満の場合、ステップ120の判定が否定判定となり、処理はステップ122に移行する。
【0078】
ステップ122で、制御部62は、画像処理DAG50Bの2段目以降のタスクに実行可能なタスクがあるか否かを判定する。具体的には、制御部62は、画像処理DAG50Bの2段目以降のタスクに、依存関係が付与された前段の全てのタスクが終了したタスクがある場合、そのタスクを実行可能なタスクであると判定する。この判定が否定判定となった場合は、処理はステップ120に戻り、肯定判定となった場合は、処理はステップ124に移行する。
【0079】
ステップ124で、制御部62は、ステップ122で実行可能と判定したタスクをタスクキュー64に格納する。なお、この際、ステップ116と同様に、タスクキュー64に格納されているタスクの数が2以下であればよい。
【0080】
ステップ126で、制御部62は、画像処理DAG50Bの2段目以降の全タスクをタスクキュー64に格納したか否かを判定する。この判定が否定判定となった場合は、処理はステップ120に戻り、肯定判定となった場合は、本第2タスク格納処理が終了する。
【0081】
次に、図10を参照してタスク実行処理について説明する。図10は、タスク実行処理の流れを示すフローチャートである。本実施形態では、タスク実行処理のプログラム(タスク実行処理プログラム)は、DAG構築・実行処理プログラムの一部、または別のいわゆるサブプログラム等として記憶部20に予めインストールされている。
【0082】
第1演算部12Aにおける何らかのタスクを実行してなく、タスクを実行可能なコア13の各々がタスク実行処理プログラムを実行することで、制御部62として機能し、図10に示すタスク実行処理を実行する。なお、本実施形態では、前述したタスク格納処理及びタスク実行処理を異なるコア13で実行することにより、タスク格納処理及びタスク実行処理が並列に実行される。
【0083】
図10のステップ130で、制御部62は、タスクキュー64からタスクを取得する。ステップ132で、制御部62は、タスクの実行において予め定められた前処理を実行する。この前処理は画像処理前に行っておくことが予め定められている処理であり、特に限定されないが、例えば、画像処理結果を格納するための出力バッファ領域の確保及び画像処理用の変数の初期化等の演算用のリソースの確保を行う処理である。
【0084】
ステップ134で、制御部62は、ステップ130で取得したタスクを、第1演算部12Aのコア13(例えば、制御部62自身として動作しているコア13)又は第2演算部12Bに実行させる。なお、第2演算部12Bにタスクを実行させる場合、第1演算部12Aのコア13が、第2演算部12Bにタスクを実行させる処理を行うことにより、第2演算部12Bによりタスクが実行される。
【0085】
また、タスクが第2演算部12Bで実行するタスクであるか否かを表す情報は、例えば、図6のDAG構築・実行処理のステップ104において処理構築部42が画像処理DAG50Aから画像処理DAG50Bに更新する際に付与される。
【0086】
ステップ136で、制御部62は、タスクの実行において予め定められた後処理を行う。この後処理はタスクに対応する部分処理後に行うことが予め定められている処理であり、特に限定されないが、例えば、ステップ132の処理により確保した演算用のリソースの解放等を行う処理である。
【0087】
ステップ138で、制御部62は、処理構築部42にタスクの完了通知を行う。タスクの完了通知を受け取った処理構築部42は、画像処理DAG50Bの依存関係を更新する。ステップ138の処理が終了すると、本タスク実行処理が終了する。
【0088】
次に、図11を参照して通知処理について説明する。図11は、通知処理の流れを示すフローチャートである。本実施形態では、通知処理のプログラム(通知処理プログラム)は、DAG構築・実行処理プログラムの一部、または別のいわゆるサブプログラム等として記憶部20に予めインストールされている。第1演算部12Aにおける何らかのタスクを実行してなく、タスクを実行可能なコア13が通知処理プログラムを実行することで、通知部67として機能し、図11に示す通知処理を実行する。
【0089】
ステップ140で、通知部67は、画像処理DAG50Bの最前段のタスクが処理対象とする画像データの記憶領域への蓄積状況を表す蓄積情報を更新する。前述したように、蓄積情報には、処理対象の画像データの識別情報、記憶領域のアドレス、及び画像データの記憶領域への記憶が完了した部分までのデータ容量等が含まれる。通知部67は、画像データ供給部22からの画像データの供給状況を監視し、蓄積情報を更新する。
【0090】
ステップ142で、通知部67は、ステップ140で更新された蓄積情報に基づいて、画像処理DAG50Bの最前段のタスクが処理対象とする各分割画像データに、新たに記憶領域への記憶が完了した分割画像データがあるか否かを判定する。この判定が否定判定となった場合は、処理はステップ146に移行し、肯定判定となった場合は、処理はステップ144に移行する。
【0091】
ステップ144で、通知部67は、通知情報を通知キュー68に格納する。ステップ146で、通知部67は、画像処理DAG50Bの最前段のタスクが処理対象とする全ての分割画像データの記憶領域への記憶が完了したか否かを判定する。この判定が否定判定となった場合は、処理はステップ140に戻り、肯定判定となった場合は、本通知処理が終了する。
【0092】
以上説明したように、本実施形態によれば、タスク(部分処理39)に対応する分割画像データが記憶領域に記憶された場合に、分割画像データが記憶領域に記憶されたことを制御部62に通知している。従って、画像データ全体が記憶領域に記憶されるまで待機するのではなく、各タスクについて、処理対象とする分割画像データが記憶領域に記憶されるたびに画像処理が開始される結果、画像処理全体の処理時間を短縮することができる。
【0093】
また、本実施形態によれば、分割画像データが記憶領域に記憶されたことを表す通知情報を、制御部62が参照可能な通知キュー68に格納することによって上記の通知を行っている。従って、第1タスク格納処理を何れのコア13が実行した場合でも、通知処理を実行するコア13が、分割画像データが記憶領域に記憶されたことを第1タスク格納処理を実行するコア13に通知することができる。
【0094】
また、本実施形態によれば、制御部62は、実行可能な最前段のタスクが存在せず、かつ通知キュー68に通知情報が格納されていない場合、スリープ状態へと移行する。そして、制御部62は、スリープ状態へと移行した状態で、かつ通知キュー68に通知情報が格納された場合、アクティブ状態へと移行する。従って、システム全体の演算リソースの消費量を低減することができる。
【0095】
なお、上記実施形態では、通知キュー68を介して分割画像データが記憶領域へ記憶されたことを通知する場合について説明したが、これに限定されない。例えば、コア13間通信又はフラグファイル等を介して分割画像データが記憶領域へ記憶されたことを通知する形態としてもよい。
【0096】
また、上記実施形態において、例えば、分割部60、制御部62、出力部66、及び通知部67といった各種の処理を実行する処理部(processing unit)のハードウェア的な構造としては、次に示す各種のプロセッサ(processor)を用いることができる。上記各種のプロセッサには、前述したように、ソフトウェア(プログラム)を実行して各種の処理部として機能する汎用的なプロセッサであるCPUに加えて、FPGA等の製造後に回路構成を変更可能なプロセッサであるプログラマブルロジックデバイス(Programmable Logic Device:PLD)、ASIC(Application Specific Integrated Circuit)等の特定の処理を実行させるために専用に設計された回路構成を有するプロセッサである専用電気回路等が含まれる。
【0097】
1つの処理部は、これらの各種のプロセッサのうちの1つで構成されてもよいし、同種又は異種の2つ以上のプロセッサの組み合わせ(例えば、複数のFPGAの組み合わせや、CPUとFPGAとの組み合わせ)で構成されてもよい。また、複数の処理部を1つのプロセッサで構成してもよい。
複数の処理部を1つのプロセッサで構成する例としては、第1に、クライアント及びサーバ等のコンピュータに代表されるように、1つ以上のCPUとソフトウェアの組み合わせで1つのプロセッサを構成し、このプロセッサが複数の処理部として機能する形態がある。第2に、システムオンチップ(System On Chip:SoC)等に代表されるように、複数の処理部を含むシステム全体の機能を1つのIC(Integrated Circuit)チップで実現するプロセッサを使用する形態がある。このように、各種の処理部は、ハードウェア的な構造として、上記各種のプロセッサの1つ以上を用いて構成される。
【0098】
更に、これらの各種のプロセッサのハードウェア的な構造としては、より具体的には、半導体素子などの回路素子を組み合わせた電気回路(circuitry)を用いることができる。
【0099】
また、上記実施形態では、各種プログラムが記憶部20に予め記憶(インストール)されている態様を説明したが、これに限定されない。各種プログラムは、CD-ROM、DVD-ROM(Digital Versatile Disk Read Only Memory)、USB(Universal Serial Bus)メモリ等の記録媒体に記録された形態で提供されてもよい。また、各種プログラムは、ネットワークを介して外部装置からダウンロードされる形態としてもよい。
【符号の説明】
【0100】
10 コンピュータ
12A 第1演算部
12B 第2演算部
13、13A~13C コア
14 メモリ
15 ローカルメモリ
16 表示部
18 操作部
20 記憶部
22 画像データ供給部
24 画像出力部
26 バス
30 オペレーティングシステム
32 アプリケーションプログラム群
34 画像処理プログラム群
36 モジュールライブラリ
38 画像処理モジュール
39、39A~39D 部分処理
40 バッファモジュール
42 処理構築部
46 処理制御部
50A、50B 画像処理DAG
60 分割部
62 制御部
64 タスクキュー
66 出力部
67 通知部
68 通知キュー
B1~B3 分割画像
G 画像
図1
図2A
図2B
図3
図4A
図4B
図5
図6
図7
図8
図9
図10
図11