データ処理装置および画像処理装置
【課題】入出力の遅延時間が長いデータ処理を含むパイプライン処理において、各パイプライン処理におけるロス時間を低減することができるデータ処理装置および画像処理装置を提供する。
【解決手段】データを記憶するバッファ部と、入力データをバッファ部に書き込むデータ書き込み制御部と、バッファ部からデータを読み出して出力データを生成するデータ読み出し制御部と、データの書き込みおよび読み出しを行うバッファ部内の記憶領域を決定するバッファ領域決定部と、を備え、データ書き込み制御部は、決定された記憶領域に入力データを書き込み、入力データの書き込みが完了したときに、データの書き込みが完了したことを表すデータ書き込み完了信号を出力し、データ読み出し制御部は、決定された記憶領域からデータを読み出し、生成した出力データの出力が完了したときに、データの読み出しが完了したことを表すデータ読み出し完了信号を出力する。
【解決手段】データを記憶するバッファ部と、入力データをバッファ部に書き込むデータ書き込み制御部と、バッファ部からデータを読み出して出力データを生成するデータ読み出し制御部と、データの書き込みおよび読み出しを行うバッファ部内の記憶領域を決定するバッファ領域決定部と、を備え、データ書き込み制御部は、決定された記憶領域に入力データを書き込み、入力データの書き込みが完了したときに、データの書き込みが完了したことを表すデータ書き込み完了信号を出力し、データ読み出し制御部は、決定された記憶領域からデータを読み出し、生成した出力データの出力が完了したときに、データの読み出しが完了したことを表すデータ読み出し完了信号を出力する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ処理装置および画像処理装置に関する。
【背景技術】
【0002】
静止画用カメラ、動画用カメラ、医療用内視鏡カメラ、または産業用内視鏡カメラなどの撮像装置においては、撮像装置の画素数の向上、連写速度の向上に伴って、膨大な画素数の画像データを短時間で処理する画像処理装置が望まれている。このような画像データの処理を高速化するための技術として、図14(a)に示したように、画像処理にパイプライン処理を用いる技術が知られている(特許文献1参照)。この特許文献1で開示された技術によると、1フレームの静止画像を、複数の重複(オーバーラップ)部分、いわゆる「のり代部分」を持つブロックに分割する。そして、分割したブロック毎に、「フレームメモリ→イメージプロセス1→イメージプロセス2→・・・→イメージプロセスn→JPEG(Joint Photographic Experts Group)処理→フレームメモリ」というように、複数の画像処理を直結した処理を行うようになっている。しかし、分割したそれぞれのブロック内では処理を行う画像データの流れが連続しているが、異なるブロックとの間ではデータの流れが連続していない(図14(b)参照)。そのため、パイプライン処理の全体を制御するシーケンサが、パイプラインを構成する各処理モジュール(処理部)において処理する画像データの範囲などの設定を、各ブロックのパイプライン処理を開始する前に、毎回設定し直していた(図14(c)参照)。このように一連のパイプライン処理毎に画像処理の動作を制御した場合、パイプラインを構成する処理モジュールのいずれかが動作していない時間的なロスの期間が、それぞれのブロックの処理の間に発生してしまう。この処理モジュールが動作していないロス時間が、1フレームの静止画像の処理時間に影響することとなる。
【0003】
また、画像データの処理をさらに高速化するための技術として、図15に示したように、パイプラインを構成する各処理モジュール毎に、当該処理モジュールによる処理が完了したことを表す割込み信号を、シーケンサに出力する技術も開示されている(特許文献2参照)。この特許文献2で開示された技術では、シーケンサが、処理モジュールから割込み信号が入力されるたびに、その処理モジュールの設定を個別に変更する。これにより、シーケンサがそれぞれの処理モジュールの設定を変更するタイミングが、分割したブロックの処理を開始するタイミング毎ではなくなり、各処理モジュールの処理が完了したタイミング毎となる。このようにシーケンサが各処理モジュールの設定を変更するタイミングをそれぞれの処理モジュール毎にすることによって、特許文献2の技術では、各ブロック間の処理における時間的なロスを低減し、1フレームの静止画像の処理を高速化している(図16(a)参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2000−312327号公報
【特許文献2】特開2010−176606号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、パイプラインを構成する処理モジュールの1つの処理モジュールに着目(例えば、図16(b)に示したように、YC処理モジュールに着目)してみると、処理モジュールに入力してから出力されるまでに遅延時間が生じている。この遅延時間と、処理モジュールの設定の変更に要する時間とを合わせた時間、すなわち、最初のブロックに対応した出力が完了してから次のブロックに対応した出力が開始されるまでの時間は、画像データの処理の高速化におけるロス時間となってしまう、という問題がある。
【0006】
このロス時間の問題は、例えば、タップ数が大きいフィルタ処理を行う処理モジュールや、撮像装置のレンズの歪曲収差を補正する処理モジュールなどのように、処理モジュールに入力してから出力されるまでの遅延時間が長い処理モジュール程、より顕著な問題となる。
【0007】
本発明は、上記の課題認識に基づいてなされたものであり、処理モジュールに入力してから出力されるまでの遅延時間が長いデータ処理を含むパイプライン処理において、各パイプライン処理におけるロス時間を低減することができるデータ処理装置および画像処理装置を提供することを目的としている。
【課題を解決するための手段】
【0008】
上記の課題を解決するため、本発明のデータ処理装置は、データを記憶するバッファ部と、入力データを、前記バッファ部に書き込むデータ書き込み制御部と、前記バッファ部に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データを出力するデータ読み出し制御部と、前記データ書き込み制御部がデータを書き込む前記バッファ部内の記憶領域、および前記データ読み出し制御部がデータを読み出す前記バッファ部内の記憶領域を決定するバッファ領域決定部と、を備え、前記データ書き込み制御部は、前記バッファ領域決定部によって決定された前記記憶領域に前記入力データを書き込み、前記入力データの書き込みが完了したときに、データの書き込みが完了したことを表すデータ書き込み完了信号を出力し、前記データ読み出し制御部は、前記バッファ領域決定部によって決定された前記記憶領域に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データの出力が完了したときに、データの読み出しが完了したことを表すデータ読み出し完了信号を出力する、ことを特徴とする。
【0009】
また、本発明の前記データ書き込み制御部は、前記バッファ領域決定部によって決定された前記バッファ部内の書き込み可能領域に前記入力データを書き込み、予め定められた数の前記入力データの前記バッファ部への書き込みが完了したときに、データの書き込みが完了したと判定し、前記データ読み出し制御部は、前記バッファ領域決定部によって決定された前記バッファ部内の読み出し可能領域からデータを読み出し、予め定められた数の前記バッファ部からの読み出しが完了し、該読み出したデータに基づいて生成した出力データの出力が完了したときに、データの読み出しが完了したと判定し、前記バッファ領域決定部は、前記データ書き込み制御部による前記入力データの書き込み状態、および前記データ読み出し制御部によるデータの読み出し状態に応じて、前記バッファ部内の前記書き込み可能領域および前記読み出し可能領域を変更する、ことを特徴とする。
【0010】
また、本発明の前記バッファ領域決定部は、前記データ書き込み制御部によってデータが書き込まれた前記バッファ部内の前記記憶領域を、有効なデータが記憶され、該記憶されたデータを読み出しことができる前記読み出し可能領域に決定し、前記データ読み出し制御部によってデータが読み出された前記バッファ部内の前記記憶領域を、空き領域であり、前記入力データを書き込むことができる前記書き込み可能領域に決定する、ことを特徴とする。
【0011】
また、本発明の前記データ読み出し制御部は、前記読み出したデータに基づいてフィルタ処理した出力データを生成するフィルタ処理部、を備え、前記バッファ部内の前記記憶領域の記憶容量は、前記フィルタ処理部がフィルタ処理を行う際に必要とするデータ数に基づいて決定する、ことを特徴とする。
【0012】
また、本発明の前記記憶容量は、前記フィルタ処理部がフィルタ処理を行う際に必要とするデータ数の2倍のデータ数の前記入力データを記憶することができる容量である、ことを特徴とする。
【0013】
また、本発明の画像処理装置は、データを記憶するバッファ部と、入力データを、前記バッファ部に書き込むデータ書き込み制御部と、前記バッファ部に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データを出力するデータ読み出し制御部と、前記データ書き込み制御部がデータを書き込む前記バッファ部内の記憶領域、および前記データ読み出し制御部がデータを読み出す前記バッファ部内の記憶領域を決定するバッファ領域決定部と、を有し、前記データ書き込み制御部が前記バッファ領域決定部によって決定された前記記憶領域に前記入力データを書き込み、前記入力データの書き込みが完了したときに、データの書き込みが完了したことを表すデータ書き込み完了信号と、前記データ読み出し制御部が前記バッファ領域決定部によって決定された前記記憶領域に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データの出力が完了したときに、データの読み出しが完了したことを表すデータ読み出し完了信号と、をそれぞれ出力するデータ処理装置、を備え、前記データ書き込み完了信号が出力された後に、前記データ書き込み制御部による画像データの書き込みに係る設定を行い、前記データ読み出し完了信号が出力された後に、前記データ読み出し制御部による画像データの読み出しに係る設定を行う、ことを特徴とする。
【発明の効果】
【0014】
本発明によれば、処理モジュールに入力してから出力されるまでの遅延時間が長いデータ処理を含むパイプライン処理において、各パイプライン処理におけるロス時間を低減することができるという効果が得られる。
【図面の簡単な説明】
【0015】
【図1】本発明の実施形態における画像処理装置の概略構成を示したブロック図である。
【図2】本実施形態の画像処理装置に備える画像処理モジュールの概略構成を示したブロック図である。
【図3】本実施形態の画像処理装置における処理モジュールの制御タイミングおよび制御内容の一例を説明する図である。
【図4】本実施形態の処理モジュールにおいて行う歪補正処理を説明する図である。
【図5】本実施形態の処理モジュールにおける歪補正処理方法の一例を説明する図である。
【図6】本実施形態の処理モジュールに備えたデータバッファの構成例を説明する図である。
【図7】本実施形態の処理モジュールに備えたデータバッファの動作例を説明する図である。
【図8】本実施形態の処理モジュールに備えたデータバッファにデータを書き込む動作例を説明する図である。
【図9】本実施形態の処理モジュールに備えたデータバッファからデータを読み出す動作例を説明する図である。
【図10】本実施形態の処理モジュールにおけるパイプライン処理のタイミングを示したタイミングチャートである。
【図11】本実施形態の処理モジュールにおけるパイプライン処理の制御内容の一例を説明する図である。
【図12】従来の処理モジュールにおけるパイプライン処理と、本実施形態の処理モジュールにおけるパイプライン処理とを比較した図である。
【図13】本実施形態の処理モジュールに備えるデータバッファの記憶領域の数を決定する方法を説明する図である。
【図14】従来のパイプライン処理を行う画像処理装置の概略構成および動作を説明する図である。
【図15】従来のパイプライン処理を高速化した画像処理装置の概略構成を示したブロック図である。
【図16】従来のパイプライン処理を高速化した画像処理装置の動作を説明する図である。
【図17】従来の画像処理装置に備える画像処理モジュールのデータバッファの構成例および動作例を説明する図である。
【発明を実施するための形態】
【0016】
以下、本発明の実施形態について、図面を参照して説明する。図1は、本実施形態における画像処理装置の概略構成を示したブロック図である。図1に示した画像処理装置1は、DMAバス10と、DRAM20と、シーケンサ30と、入力DMAモジュール40と、画像処理モジュールA50と、画像処理モジュールB60と、出力DMAモジュール70と、を備えている。本実施形態の画像処理装置1は、例えば、静止画用カメラなどの撮像装置に備えられる。
【0017】
DRAM20は、DMAバス10に接続され、撮像装置において処理される様々なデータを記憶する。例えば、撮像装置に備えた図示しないイメージャから出力された静止画像のデータを記憶する。本実施形態の画像処理装置1においては、DRAM20に記憶された1フレームの静止画像のデータを、図14(b)に示したように、複数の重複(オーバーラップ)したブロックに分割して、それぞれのブロック毎に画像処理を行う。本実施形態の画像処理装置1における画像処理は、図1に示したように、入力DMAモジュール40、画像処理モジュールA50、画像処理モジュールB60、および出力DMAモジュール70が直列に接続されたパイプライン処理によって、それぞれの処理モジュールにおける画像処理を順次行う。以下の説明においては、1フレームの静止画像のデータを分割したそれぞれのブロックに含まれるデータを、「ブロック画像データ」という。
【0018】
シーケンサ30は、本実施形態の画像処理装置1のパイプライン処理を行う際、パイプラインを構成する各処理モジュールの処理シーケンスを制御する。シーケンサ30は、パイプライン処理を行うブロックに応じた設定および処理の開始を制御する制御信号を各処理モジュールに出力する。
【0019】
入力DMAモジュール40は、DRAM20に記憶しているブロック画像データを読み出し、読み出したブロック画像データを、パイプラインを構成する次の処理モジュールである画像処理モジュールA50に出力するための処理モジュールである。入力DMAモジュール40は、シーケンサ30から入力された制御信号に応じて、DMAバス10を介してDRAM20からブロック画像データを読み出し、読み出したブロック画像データを一時記憶する。そして、入力DMAモジュール40は、画像処理モジュールA50から入力されたデータ要求信号に応じて、一時記憶したブロック画像データを、画像処理モジュールA50に出力する。図1においては、シーケンサ30から入力される出力データ数設定信号、リセット信号、およびDMA開始トリガ信号と、シーケンサ30に出力する完了割込み信号とを示している。
【0020】
画像処理モジュールA50は、入力DMAモジュール40から入力されたブロック画像データに対して種々のデジタル的な画像処理を行って、画像処理後のブロック画像データ(以下、「画像処理データ」という)を、パイプラインを構成する次の処理モジュールである画像処理モジュールB60に出力するための処理モジュールである。画像処理モジュールA50は、シーケンサ30から入力された制御信号に応じて、入力DMAモジュール40から入力されたブロック画像データを一時記憶する。そして、一時記憶したブロック画像データに対して画像処理を行い、画像処理モジュールB60から入力されたデータ要求信号に応じて、画像処理データを、画像処理モジュールB60に出力する。画像処理モジュールA50は、ブロック画像データの入力動作および出力動作毎に、シーケンサ30によって制御される。図1においては、シーケンサ30から入力される共通リセット信号、入力データ数設定信号、入力部リセット信号、出力データ数設定信号、および出力部リセット信号と、シーケンサ30に出力する入力完了割込み信号および出力完了割込み信号とを示している。なお、画像処理モジュールA50に関する詳細な説明は、後述する。
【0021】
画像処理モジュールB60は、画像処理モジュールA50から入力された画像処理データに対して、さらに種々のデジタル的な画像処理を行って、画像処理後のブロック画像データを、パイプラインを構成する次の処理モジュールである出力DMAモジュール70に出力するための処理モジュールである。なお、画像処理モジュールB60は、ブロック画像データに対して行う画像処理の内容が、画像処理モジュールA50と異なるのみであるため、詳細な説明は省略する。
【0022】
出力DMAモジュール70は、画像処理モジュールB60から入力された画像処理後のブロック画像データを、DRAM20に書き込む(記憶する)ための処理モジュールである。出力DMAモジュール70は、シーケンサ30から入力された制御信号に応じて、画像処理モジュールB60から入力された画像処理後のブロック画像データを一時記憶する。そして、出力DMAモジュール70は、一時記憶した画像処理後のブロック画像データを、DMAバス10を介してDRAM20に出力する。図1においては、シーケンサ30から入力される入力データ数設定信号、リセット信号、およびDMA開始トリガ信号と、シーケンサ30に出力するDMA完了割込み信号とを示している。
【0023】
このように、画像処理装置1内の各処理モジュールが、1フレームの静止画像のデータを分割したブロック毎に、シーケンサ30から出力された制御信号に応じた画像処理を順次処理を行うことによって、各ブロックに対する一連の画像処理を行う。
【0024】
次に、画像処理装置1内の画像処理モジュールについて説明する。なお、上記に述べたように、画像処理モジュールA50と画像処理モジュールB60とは、画像処理の内容が異なるのみであるため、以下の説明においては、代表して画像処理モジュールA50について説明する。また、画像処理モジュールA50は、画像処理としてフィルタ処理を行う処理モジュールである場合について説明する。図2は、本実施形態の画像処理装置1に備える画像処理モジュールA50の概略構成を示したブロック図である。図2に示したように、画像処理モジュールA50は、入力部51と、データバッファ52と、出力部53と、調停部54と、データバッファ領域決定部55と、を備えている。また、出力部53は、フィルタ処理部531を備えている。
【0025】
データバッファ52は、ブロック画像データを一時記憶する記憶部である。データバッファ52は、例えば、SRAM(Static Random Access Memory)などで構成される。
【0026】
入力部51は、シーケンサ30から入力された入力データ数設定信号によって設定された数のブロック画像データを、前段の処理モジュール(図1に示した本実施形態においては、入力DMAモジュール40)から読み出し、読み出したブロック画像データを、データバッファ52に書き込む(ライトする)。入力部51は、シーケンサ30から入力された入力部リセット信号によって初期化される。また、入力部51は、設定された数のブロック画像データの読み出しと、データバッファ52への書き込みとが完了する、すなわち、入力処理が完了すると、入力完了割込み信号を、シーケンサ30に出力する。また、入力部51が、データバッファ52にブロック画像データを書き込み祭には、調停部54から入力されるバッファ空き量情報と、データバッファ領域決定部55から入力されるライト領域情報とに基づいて生成したライトコマンドによって、データバッファ52の対応する記憶領域にライトデータが書き込まれる。また、入力部51は、ライトデータの書き込みが完了したときに、ライト完了通知を調停部54に出力する。
【0027】
出力部53は、データバッファ52に記憶しているブロック画像データを読み出し(リードし)、出力部53内に備えるフィルタ処理部531によってフィルタ処理を行った画像処理データを、後段の処理モジュール(図1に示した本実施形態においては、画像処理モジュールB60)から入力されたデータ要求信号に応じて出力する。出力部53が出力する画像処理データの数は、シーケンサ30から入力された出力データ数設定信号によって設定される。出力部53は、シーケンサ30から入力された出力部リセット信号によって初期化される。また、出力部53は、データバッファ52に記憶しているブロック画像データの読み出しと、設定された数の画像処理データの出力とが完了する、すなわち、出力処理が完了すると、出力完了割込み信号を、シーケンサ30に出力する。また、出力部53が、に記憶しているブロック画像データを読み出す祭には、調停部54から入力される有効データ量情報と、データバッファ領域決定部55から入力されるリード領域情報とに基づいて生成したリードコマンドによって、データバッファ52の対応する記憶領域からリードデータを読み出す。また、出力部53は、リードデータの読み出しが完了したときに、リード完了通知を調停部54に出力する。
【0028】
フィルタ処理部531におけるフィルタ処理としては、例えば、ローパスフィルタ処理、ノイズ低減フィルタ処理、歪補正処理、画像リサイズ処理など、様々な画像処理が考えられる。なお、以下の説明においては、出力部53内にフィルタ処理部531を備える場合の例について説明するが、例えば、入力部51内にフィルタ処理部を備える構成とすることもできる。入力部51内にフィルタ処理部を備える構成とした場合には、入力部51がデータバッファ52に書き込むデータが画像処理データとなり、出力部53はデータバッファ52に記憶された画像処理データを出力することとなる。
【0029】
データバッファ領域決定部55は、データバッファ52に備えた記憶領域の内、どの記憶領域を使用するかを決定する。より具体的には、データバッファ領域決定部55は、入力部51がブロック画像データを書き込む記憶領域と、出力部53がブロック画像データを読み出す記憶領域とを、それぞれ決定する。そして、決定した入力部51が書き込む記憶領域の情報を、ライト領域情報として入力部51に出力する。また、出力部53が読み出す記憶領域の情報を、リード領域情報として出力部53に出力する。
【0030】
調停部54は、データバッファ52に備えた記憶領域を管理する。より具体的には、調停部54は、データバッファ52にデータを記憶していない記憶領域(以下、「空き領域」という)の情報を、バッファ空き量情報として入力部51に出力する。このバッファ空き量情報は、入力部51がデータバッファ52にブロック画像データを書き込む際に、ブロック画像データを書き込もうとしているデータバッファ52の記憶領域が空き領域であるか否かの判断に用いられる。入力部51は、ブロック画像データを書き込もうとしているデータバッファ52の記憶領域が空き領域である場合に、当該記憶領域がデータを格納(書き込み:ライト)することが可能であると判断し、ブロック画像データの書き込みを実行する。
【0031】
また、調停部54は、データバッファ52に記憶している有効なデータの情報を、有効データ量情報として出力部53に出力する。この有効データ量情報は、出力部53がデータバッファ52からブロック画像データを読み出す際に、ブロック画像データを読み出そうとしているデータバッファ52の記憶領域に有効なデータが記憶されているか否かの判断に用いられる。出力部53は、ブロック画像データを読み出そうとしているデータバッファ52の記憶領域に有効なデータが記憶されている場合に、当該記憶領域からデータを取得(読み出し:リード)することが可能であると判断し、ブロック画像データの読み出しを実行する。
【0032】
また、調停部54は、入力部51から入力されるライト完了通知、および出力部53から入力されるリード完了通知に基づいて、バッファ空き量情報および有効データ量情報を更新する。
【0033】
調停部54およびデータバッファ領域決定部55は、シーケンサ30から入力された共通リセット信号によって、初期化される。すなわち、入力部リセット信号または出力部リセット信号では、初期化されない。これは、入力部51または出力部53のいずれか一方がリセットを行うタイミングであっても、他方は処理を実行しており、リセットするタイミングではない場合があるため、入力部リセット信号または出力部リセット信号によって、処理を行う際の情報であるバッファ空き量情報または有効データ量情報が初期化されてしまうことを回避するためである。なお、シーケンサ30からの共通リセット信号の入力によって初期化された場合には、バッファ空き量情報は、データバッファ52の記憶領域が全て空き領域であることを表す情報に初期化され、有効データ量情報は、データバッファ52の全ての記憶領域に有効なデータが記憶されていないことを表す情報に初期化される。
【0034】
このような構成によって、画像処理モジュールA50では、リセットを行う制御単位(以下、「ドメイン」という)を分離する。より具体的には、ブロック画像データを入力する側のリセットドメイン(入力リセットドメイン)と、画像処理データを出力する側のリセットドメイン(出力リセットドメイン)とを、データバッファ52の位置で分離する。そして、画像処理モジュールA50は、上記に述べたように、入力部51によるブロック画像データの入力処理が完了したことを表す入力完了割込み信号、および出力部53による画像処理データの出力処理が完了したことを表す出力完了割込み信号を、それぞれ、シーケンサ30に出力する。
【0035】
これにより、本実施形態の画像処理装置1では、シーケンサ30に画像処理モジュールA50または画像処理モジュールB60から割込み信号(入力完了割込み信号または出力完了割込み信号)が入力されるたびに、シーケンサ30が割込み信号に応じたドメイン(制御単位)のリセットおよびパイプライン処理を行うブロックに応じた設定の再設定を行うことができる。このことにより、画像処理モジュールA50および画像処理モジュールB60では、前の処理モジュールからから出力されたブロック画像データを画像処理して次の処理モジュールに出力している最中に、前の処理ブロックから出力される次のブロック画像データを、先行して入力処理を開始することができる。
【0036】
ここで、図1に示した画像処理装置1における処理モジュールの制御について説明する。なお、以下の説明においては、画像処理装置1におけるパイプライン処理において、シーケンサ30と画像処理モジュールA50とに注目して説明する。図3は、本実施形態の画像処理装置1における画像処理モジュールA50の制御タイミングおよび制御内容の一例を説明する図である。画像処理装置1のパイプライン処理のタイミングに関しては図3(a)を参照し、シーケンサ30の処理内容に関しては図3(b)を参照して説明を行う。
【0037】
画像処理装置1がDRAM20に記憶された1フレームの静止画像のデータの画像処理を開始すると、まず、シーケンサ30は、処理100を行う。処理100においてシーケンサ30は、まず、処理110において、パイプラインを構成する全ての処理モジュール(入力DMAモジュール40、画像処理モジュールA50、画像処理モジュールB60、および出力DMAモジュール70)に対して、ブロック画像データを画像処理する際に必要なパラメータや入出力データ数などのレジスタ設定を行う。例えば、入力DMAモジュール40には、DRAM20から読み出して画像処理モジュールA50に出力する出力データ数が設定される。また、画像処理モジュールA50の入力部51には、入力DMAモジュール40から入力される入力データ数が設定され、出力部53には、ブロック画像データを画像処理する際に必要なパラメータや、画像処理データを次の画像処理モジュールB60に出力する際の出力データ数が設定される。
【0038】
続いて、シーケンサ30は、処理120において、全ての処理モジュールの動作の状態を初期化(リセット)する。この処理モジュールのリセットにおいてシーケンサ30は、入力DMAモジュール40および出力DMAモジュール70に対して、リセット信号を出力し、画像処理モジュールA50および画像処理モジュールB60に対して、共通リセット信号、入力部リセット信号、および出力部リセット信号を出力する。その後、シーケンサ30は、リセットを解除する。これにより、各処理モジュールは、それぞれの処理を開始することができる状態となる。このとき、画像処理モジュールA50は、入力DMAモジュール40に対してデータ要求信号を出力する。
【0039】
続いて、シーケンサ30は、処理130において、シーケンサ30は、入力DMAモジュール40および出力DMAモジュール70に対して、DMA開始トリガ信号を出力する。これにより、入力DMAモジュール40は、DMAによって、DRAM20からの最初(1つ目)のブロック画像データ(以下、「第1ブロック画像データ」という)を読み出し、画像処理モジュールA50に第1ブロック画像データを出力することができる状態となる。ここで、入力DMAモジュール40には、画像処理モジュールA50からデータ要求信号が入力されているため、入力DMAモジュール40がDRAM20から読み出した第1ブロック画像データは、画像処理モジュールA50に出力される。
【0040】
そして、画像処理モジュールA50内の入力部51は、入力された第1ブロック画像データを、データバッファ52に書き込む。また、画像処理モジュールA50内の出力部53は、データバッファ52に記憶している第1ブロック画像データを読み出し、フィルタ処理部531によってフィルタ処理を行った画像処理データを、画像処理モジュールB60から入力されたデータ要求信号に応じて出力する。
【0041】
その後、画像処理モジュールA50は、入力部51によるデータバッファ52への第1ブロック画像データの書き込みが終了する、すなわち、処理110においてシーケンサ30によって設定された入力データ数の第1ブロック画像データをデータバッファ52に書き込んだとき、入力完了割込み信号をシーケンサ30に出力する。
【0042】
シーケンサ30は、画像処理モジュールA50から入力完了割込み信号が入力されると、処理200を行う。処理200においてシーケンサ30は、まず、処理210において、画像処理モジュールA50の入力部51に対して、入力DMAモジュール40から入力される次(2つ目)のブロック画像データ(以下、「第2ブロック画像データ」という)の入力データ数を設定する。
【0043】
続いて、シーケンサ30は、処理220において、画像処理モジュールA50内の入力部51側の動作の状態をリセットする。この入力部51側のリセットにおいてシーケンサ30は、画像処理モジュールA50に対して、入力部リセット信号のみを出力する。その後、シーケンサ30は、画像処理モジュールA50に対するリセットを解除する。これにより、画像処理モジュールA50は、入力DMAモジュール40に対して第2ブロック画像データを要求するデータ要求信号を出力し、第2ブロック画像データのデータバッファ52への書き込みを開始する。
【0044】
なお、処理220においてシーケンサ30は、画像処理モジュールA50に対して共通リセット信号を出力していないため、画像処理モジュールA50内の調停部54およびデータバッファ領域決定部55はリセットされない。このため、画像処理モジュールA50内の入力部51が第2ブロック画像データをデータバッファ52に書き込む際には、第1ブロック画像データを最後に書き込んだデータバッファ52の記憶領域の次の記憶領域から、第2ブロック画像データの書き込みが開始される。これにより、入力部51が第2ブロック画像データをデータバッファ52に書き込む際に、出力部53がフィルタ処理を行って画像処理モジュールB60に出力していない第1ブロック画像データが上書きされてしまうことを回避することができる。
【0045】
その後、画像処理モジュールA50は、出力部53によるデータバッファ52からの第1ブロック画像データの読み出し、およびフィルタ処理部531によるフィルタ処理後の画像処理データの画像処理モジュールB60への出力が終了する、すなわち、処理110においてシーケンサ30によって設定された出力データ数のフィルタ処理後の画像処理データを出力したとき、出力完了割込み信号をシーケンサ30に出力する。
【0046】
シーケンサ30は、画像処理モジュールA50から出力完了割込み信号が入力されると、処理300を行う。処理300においてシーケンサ30は、まず、処理310において、画像処理モジュールA50の出力部53に対して、第2ブロック画像データを画像処理する際に必要なパラメータや、画像処理データを画像処理モジュールB60に出力する出力データ数を設定する。
【0047】
続いて、シーケンサ30は、処理320において、画像処理モジュールA50内の出力部53側の動作の状態をリセットする。この出力部53側のリセットにおいてシーケンサ30は、画像処理モジュールA50に対して、出力部リセット信号のみを出力する。その後、シーケンサ30は、画像処理モジュールA50に対するリセットを解除する。これにより、画像処理モジュールA50は、データバッファ52に記憶している第2ブロック画像データに対するフィルタ処理後の画像処理データを、画像処理モジュールB60から入力されたデータ要求信号に応じて出力する。
【0048】
なお、処理320においてシーケンサ30は、画像処理モジュールA50に対して共通リセット信号を出力していないため、画像処理モジュールA50内の調停部54およびデータバッファ領域決定部55はリセットされない。このため、画像処理モジュールA50内の出力部53が第2ブロック画像データをデータバッファ52から読み出す際には、第1ブロック画像データを最後に読み出したデータバッファ52の記憶領域の次の記憶領域から、第2ブロック画像データの読み出しが開始される。これにより、出力部53が第2ブロック画像データをデータバッファ52から読み出す際に、データバッファ52に残っている第1ブロック画像データを読み出してフィルタ処理を行って画像処理モジュールB60に出力してしまうことを回避することができる。
【0049】
その後、画像処理モジュールA50は、入力部51によるデータバッファ52への第2ブロック画像データの書き込みが終了する、すなわち、処理210においてシーケンサ30によって設定された入力データ数の第2ブロック画像データをデータバッファ52に書き込んだとき、入力完了割込み信号をシーケンサ30に出力する。
【0050】
シーケンサ30は、画像処理モジュールA50から入力完了割込み信号が入力されると、処理400を行う。処理400においてシーケンサ30は、処理200と同様に、入力DMAモジュール40から入力される次(3つ目)のブロック画像データ(以下、「第3ブロック画像データ」という)に対応した処理を行う。より具体的には、シーケンサ30は、処理410において、画像処理モジュールA50の入力部51に対して、第3ブロック画像データの入力データ数を設定する。そして、シーケンサ30は、処理420において、画像処理モジュールA50内の入力部51側の動作の状態をリセットおよびリセットの解除を行う。これにより、画像処理モジュールA50は、入力DMAモジュール40に対して第3ブロック画像データを要求するデータ要求信号を出力し、第3ブロック画像データのデータバッファ52への書き込みを開始する。
【0051】
その後、画像処理モジュールA50は、出力部53によるデータバッファ52からの第2ブロック画像データの読み出し、およびフィルタ処理部531によるフィルタ処理後の画像処理データの画像処理モジュールB60への出力が終了する、すなわち、処理310においてシーケンサ30によって設定された出力データ数のフィルタ処理後の画像処理データを出力したとき、出力完了割込み信号をシーケンサ30に出力する。
【0052】
シーケンサ30は、画像処理モジュールA50から出力完了割込み信号が入力されると、処理500を行う。処理500においてシーケンサ30は、処理300と同様に、第3ブロック画像データに対応した処理を行う。より具体的には、シーケンサ30は、処理510において、画像処理モジュールA50の出力部53に対して、第3ブロック画像データを画像処理する際に必要なパラメータや、画像処理データを画像処理モジュールB60に出力する出力データ数を設定する。そして、シーケンサ30は、処理520において、画像処理モジュールA50内の出力部53側の動作の状態をリセットおよびリセットの解除を行う。これにより、画像処理モジュールA50は、データバッファ52に記憶している第3ブロック画像データに対するフィルタ処理後の画像処理データを、画像処理モジュールB60から入力されたデータ要求信号に応じて出力する。
【0053】
以降、同様に、画像処理モジュールA50から割込み信号が入力される毎に、シーケンサ30は、入力された割込み信号に応じた処理を、画像処理装置1における1フレームの静止画像のデータのパイプライン処理が終了となるまで繰り返す。
【0054】
上記に述べたように、本実施形態の画像処理装置1に備えた画像処理モジュールA50では、入力DMAモジュール40からのブロック画像データの入力処理が完了したときの入力完了割込み信号と、画像処理モジュールB60へのフィルタ処理後の画像処理データの出力処理が完了ときの出力完了割込み信号とを、それぞれシーケンサ30に出力することができる。また、本実施形態の画像処理装置1に備えた画像処理モジュールB60では、画像処理モジュールA50からのフィルタ処理後の画像処理データの入力処理が完了したときの入力完了割込み信号と、出力DMAモジュール70への画像処理データの出力処理が完了ときの出力完了割込み信号とを、それぞれシーケンサ30に出力することができる。このように、画像処理モジュールA50および画像処理モジュールB60では、入力部51側の制御(入力リセットドメイン)と、出力部53側の制御(出力リセットドメイン)とを、分離することができる。これにより、画像処理モジュールA50および画像処理モジュールB60では、前の画像処理データの出力処理を実行している最中に、次のブロック画像データの入力処理を開始することができる。
【0055】
このように、画像処理データの出力処理が完了する前に、次のブロック画像データの入力処理を開始することによって、画像処理モジュールA50および画像処理モジュールB60のそれぞれで、前の画像処理データの出力処理の完了から次の画像処理データの出力処理の開始までのロス時間を低減することができ、パイプライン処理の効率を向上させることができる。特に、ブロック画像データが入力されてからフィルタ処理後の画像処理データが出力されるまでの入出力の遅延時間が長い処理モジュール(例えば、以下に説明する歪補正処理モジュール)においては、高い効果を得ることができる。
【0056】
<適用例>
次に、画像処理モジュールA50を実際の画像処理に適用した場合の動作例について説明する。以下の説明においては、画像処理モジュールA50が、出力部53に備えたフィルタ処理部531によって歪補正処理を行う場合の例について説明する。図4は、本実施形態の画像処理モジュールA50において行う歪補正処理を説明する図である。
【0057】
一般的に歪補正処理においては、歪補正前の入力データが入力されてから、歪補正処理後の出力データが出力されるまでの入出力の遅延時間が長い。これは、歪補正処理においては、1つの補正後の出力データを得るために、複数の入力データが処理に用いられるからである。例えば、図4(a)に示すように、歪補正後の1つのラインXの出力データを得るためには、範囲Y分の入力データが必要である。このため、範囲Y分の入力データが処理モジュールに入力されるまで、補正後のラインXの出力データを出力することができない。このことにより、パイプライン処理における歪補正処理に起因するロス時間が長くなってしまう。
【0058】
画像処理モジュールA50による歪補正処理においては、図4(b)に示すように、1フレームの静止画像のデータを複数のブロックに分割する。そして、分割したブロックに含まれるブロック画像データ毎に歪補正処理を行う。画像処理モジュールA50においては、上記に述べたように、前のブロック画像データに対応した画像処理データの出力処理、すなわち、歪補正処理を実行している最中に、次のブロック画像データの入力処理を行うことができる。より具体的には、最初のブロック1のブロック画像データに対して歪補正処理を行っている最中に、ブロック2のブロック画像データの入力を開始することができる。このため、画像処理モジュールA50では、ブロック1の歪補正処理における入出力の遅延時間以外の遅延時間を短縮することができ、パイプライン処理のロス時間を低減することができる。
【0059】
<歪補正処理の方法例>
ここで、画像処理モジュールA50による歪補正処理の動作の説明に先立って、画像処理モジュールA50における歪補正処理の処理方法および各構成要素の構成について説明する。まず、画像処理モジュールA50における歪補正処理の方法について説明する。図5は、本実施形態の画像処理モジュールA50における歪補正処理方法の一例を説明する図である。歪補正処理に画像処理モジュールA50を適用した場合の本適用例においては、画像処理モジュールA50内のフィルタ処理部531は、図5(a)に示したような、1フレームの静止画像のデータを水平方向に複数のブロック(以下、「ブロックライン」という)に分割したブロック画像データ毎に歪補正処理を行う。そして、フィルタ処理部531は、静止画像の上(ブロックライン1)から順次歪補正処理を行うものとする。
【0060】
より具体的には、フィルタ処理部531は、まず、図5(b)に示すように、ブロックライン1の歪補正処理を行う。そして、ブロックライン1の歪補正処理が終了した後に、図5(c)および図5(d)に示すように、ブロックライン2、続いてブロックライン3というように、順次、歪補正処理を行っていく。
【0061】
なお、フィルタ処理部531が歪補正処理を行う際に静止画像のデータを分割する方法は、図5に示した水平方向のみの分割に限定されるものではなく、例えば、図4(a)に示したように、水平方向に加えて垂直方向にも分割し、分割したそれぞれのブロック毎に歪補正処理を行う構成とすることもできる。
【0062】
<データバッファの構成例>
続いて、本適用例におけるデータバッファ52の構成について説明する。図6および図7は、本実施形態の画像処理モジュールA50に備えたデータバッファ52の構成例および動作例を説明する図である。本適用例の画像処理モジュールA50に備えたデータバッファ52は、図6(a)に示したように、ブロックラインの垂直方向の幅を1ラインとし、ブロックラインの水平方向に16ライン分の記憶領域(領域1〜領域16)で構成されているものとする。
【0063】
そして、上記に述べたように、ブロックライン1→ブロックライン2→ブロックライン3というように、順次、歪補正処理を行っていく(図6(b)参照)。このとき、画像処理モジュールA50には、入力DMAモジュール40から、図6(c)に示したような順番でブロック画像データが入力される。より具体的には、最初に、ブロックライン1の1ライン目のブロック画像データが入力され、続いて、ブロックライン1の2ライン目のブロック画像データが入力される。その後、ブロックライン1の20ライン目のブロック画像データが入力されると、続いて、ブロックライン2の1ライン目のブロック画像データが入力される。以降、同様に、ブロックライン2の2ライン目のブロック画像データ・・・ブロックライン2の20ライン目のブロック画像データ、ブロックライン3の1ライン目のブロック画像データ・・・ブロックライン3の20ライン目のブロック画像データというように、入力DMAモジュール40から順次ブロック画像データが入力される。
【0064】
なお、以下の説明においては、画像処理モジュールA50に入力されるブロック画像データに対して、ブロックライン、およびブロックライン内のライン数を区別するための符号を付与して説明する。例えば、ブロックライン1の1ライン目のブロック画像データは、「ブロック画像データIBL1−1」という。また、例えば、ブロックライン3の20ライン目のブロック画像データは、「ブロック画像データIBL3−20」という。また、フィルタ処理部531によって歪み補正処理がされた後に、画像処理モジュールA50から出力される歪補正処理後の画像処理データに対しても、同様に、ブロックライン、およびブロックライン内のライン数を区別するための符号を付与して説明する。例えば、歪補正処理後の画像処理データにおいて、ブロックライン1の1ライン目の画像処理データは、「画像処理データOBL1−1」という。また、例えば、ブロックライン3の16ライン目の画像処理データは、「画像処理データOBL3−16」という。
【0065】
図7は、入力DMAモジュール40から本適用例の画像処理モジュールA50に20ラインのブロック画像データが入力され、本適用例の画像処理モジュールA50から画像処理モジュールB60に16ラインの歪補正処理後の画像処理データが出力される場合のパイプライン処理のタイミングを示している。
【0066】
<データバッファへのデータ書き込みの例>
続いて、本適用例においてブロック画像データをデータバッファ52に書き込む動作について説明する。図8は、本実施形態の画像処理モジュールA50に備えたデータバッファ52にブロック画像データを書き込む動作例を説明する図である。
【0067】
本適用例の画像処理モジュールA50内に備えたデータバッファ52の構成は、図6(a)に示したように、16ライン分の記憶領域で構成されている。すなわち、データバッファ52の記憶領域は、領域1〜領域16のみである。このため、画像処理モジュールA50では、データバッファ52が、領域1と領域16とを仮想的にリング状につなげられたリングバッファの形式であるものとして、入力部51が、入力DMAモジュール40から入力されたブロック画像データの書き込みを制御する。ブロック画像データを書き込むデータバッファ52の領域は、データバッファ領域決定部55によって決定される。
【0068】
図8では、ブロックライン1→ブロックライン2→ブロックライン3というように、順次、ブロック画像データをデータバッファ52に書き込む場合において、各ブロックラインが20ラインであったときに、それぞれのブロック画像データが記憶されるデータバッファ52の記憶領域を示している。なお、図8においては、説明を容易にするため、データバッファ52の記憶領域(領域1〜領域16)の状態を、時系列に4回並べて表している。
【0069】
より具体的には、画像処理装置1におけるパイプライン処理が開始されると、データバッファ領域決定部55は、データバッファ52の領域1〜領域16を、ブロック画像データIBL1−1〜ブロック画像データIBL1−16を書き込む記憶領域として決定する(図8(a)参照)。また、データバッファ領域決定部55は、領域1〜領域16に記憶しているブロック画像データIBL1−1〜ブロック画像データIBL1−16が、フィルタ処理部531による歪補正処理に使用され、調停部54によって空き領域であると判断される毎に、空き領域であると判断されたデータバッファ52の領域1〜領域16を、順次、次のブロック画像データを書き込む記憶領域として決定する(図8(b)〜図8(d)参照)。
【0070】
図8(b)においては、データバッファ52の領域1〜領域4が、ブロック画像データIBL1−17〜ブロック画像データIBL1−20を書き込む記憶領域として決定され、データバッファ52の領域5〜領域16が、ブロック画像データIBL2−1〜ブロック画像データIBL1−12を書き込む記憶領域として決定された場合を表している。なお、入力部51は、データバッファ52の領域4へのブロック画像データIBL1−20の書き込みが完了したときに、入力完了割込み信号を、シーケンサ30に出力する。
【0071】
また、図8(c)においては、データバッファ52の領域1〜領域8が、ブロック画像データIBL2−13〜ブロック画像データIBL2−20を書き込む記憶領域として決定され、データバッファ52の領域9〜領域16が、ブロック画像データIBL3−1〜ブロック画像データIBL1−8を書き込む記憶領域として決定された場合を表している。なお、入力部51は、データバッファ52の領域8へのブロック画像データIBL2−20の書き込みが完了したときに、入力完了割込み信号を、シーケンサ30に出力する。
【0072】
また、図8(d)においては、データバッファ52の領域1〜領域12が、ブロック画像データIBL3−9〜ブロック画像データIBL3−20を書き込む記憶領域として決定された場合を表している。なお、入力部51は、データバッファ52の領域12へのブロック画像データIBL3−20の書き込みが完了したときに、入力完了割込み信号を、シーケンサ30に出力する。
【0073】
<データバッファからのデータ読み出しの例>
続いて、本適用例においてデータバッファ52に記憶されているブロック画像データを読み出す動作について説明する。図9は、本実施形態の画像処理モジュールA50に備えたデータバッファ52からブロック画像データを読み出す動作例を説明する図である。
【0074】
データバッファ52に記憶されているブロック画像データを読み出す際には、出力部53が、フィルタ処理部531による歪補正処理を行うために必要なブロック画像データがデータバッファ52内に記憶されているか否かを判断し、必要なブロック画像データが記憶されていると判断された場合に、データバッファ52の読み出しを行う。歪補正処理を行うために必要なブロック画像データがデータバッファ52内に記憶されているか否かの判断は、調停部54から出力される有効データ量情報に基づいて行われる。
【0075】
図9では、データバッファ52のそれぞれの記憶領域に記憶されている20ラインのブロック画像データを用いて歪み補正処理を行い、16ラインの画像処理データを出力する場合を示している。なお、図9においては、歪補正処理に関係するデータバッファ52の領域のみにブロック画像データの符号を示している。
【0076】
ここで、図9を参照して、データバッファ52に記憶されているブロック画像データを読み出して、歪補正処理後の画像処理データを生成する場合の動作例について説明する。まず、図9(a)を参照して、画像処理データOBL1−1を出力するために、ブロック画像データIBL1−1〜ブロック画像データIBL1−4が必要である場合について説明する。出力部53は、調停部54から出力される有効データ量情報が、データバッファ52の領域1〜領域4に記憶されているブロック画像データが有効なデータであるか否かを判断する。そして、データバッファ52の領域1〜領域4に記憶されているブロック画像データが有効なデータである場合、出力部53は、データバッファ52の領域1〜領域4に記憶されているブロック画像データを読み出し、フィルタ処理部531による歪補正処理後の画像処理データOBL1−1を出力する。
【0077】
また、出力部53は、次の画像処理データOBL1−2を出力するために必要としないデータバッファ52の記憶領域に対応するリード完了通知を、調停部54に出力する。調停部54は、リード完了通知が入力されたデータバッファ52の記憶領域を、空き領域とする。図9(a)においては、画像処理データOBL1−1を出力するために必要であったが、画像処理データOBL1−2を出力するためには必要でないブロック画像データIBL1−1を記憶しているデータバッファ52の領域1に対応するリード完了通知を出力し、領域1を空き領域とする場合を示している。この空き領域となったデータバッファ52の記憶領域には、入力部51によって、順次、次に入力されたブロック画像データが書き込まれる。
【0078】
以降、出力部53は、画像処理データOBL1−2〜画像処理データOBL1−16を出力するために必要なデータバッファ52の記憶領域を、調停部54から出力される有効データ量情報に基づいて順次判断し、フィルタ処理部531による歪補正処理後の画像処理データOBL1−2〜画像処理データOBL1−16を順次出力する。また、出力部53は、画像処理データを出力した後に、次の画像処理データを出力するために必要としないデータバッファ52の記憶領域に対応するリード完了通知を、調停部54に順次出力する。そして、調停部54は、入力されたリード完了通知に基づいて、データバッファ52の記憶領域を、順次空き領域とし、空き領域となったデータバッファ52の記憶領域には、入力部51によって、順次、次に入力されたブロック画像データが書き込まれる。
【0079】
図9(b)においては、画像処理データOBL1−2を出力するために、ブロック画像データIBL1−2〜ブロック画像データIBL1−5が必要である場合を示している。図9(c)においては、画像処理データOBL1−16を出力するために、ブロック画像データIBL1−16〜ブロック画像データIBL1−20が必要である場合を示している。図9(c)においてブロックライン1における画像処理データOBL1−16の出力が完了する。これにより、ブロック画像データIBL1−16〜ブロック画像データIBL1−20は、次のブロックライン2に対応した画像処理データOBL1−1を出力するために必要ではないため、出力部53は、データバッファ52の領域1〜領域4および領域16に対応するリード完了通知を、調停部54に出力する。なお、出力部53は、次の画像処理モジュールB60への画像処理データOBL1−16の出力が完了したときに、出力完了割込み信号を、シーケンサ30に出力する。
【0080】
そして、出力部53は、画像処理データOBL2−1を出力するために必要なブロック画像データIBL2−1〜ブロック画像データIBL2−5が、データバッファ52の領域5〜領域9に記憶されているか否かを、調停部54から出力される有効データ量情報に基づいて判断する。そして、データバッファ52の領域5〜領域9に記憶されているブロック画像データが有効なデータである場合、出力部53は、データバッファ52の領域5〜領域9に記憶されているブロック画像データを読み出し、フィルタ処理部531による歪補正処理後の画像処理データOBL2−1を出力する(図9(d)参照)。
【0081】
以降、出力部53は、画像処理データを出力するために必要なデータバッファ52の記憶領域を、調停部54から出力される有効データ量情報に基づいて順次判断し、データバッファ52の記憶領域に記憶されているブロック画像データが有効なデータである場合に、ブロック画像データを順次読み出しと、画像処理データの出力とを順行う。また、出力部53は、画像処理データを出力した後に、次の画像処理データを出力するために必要としないデータバッファ52の記憶領域に対応するリード完了通知を、調停部54に順次出力して、データバッファ52の記憶領域を順次空き領域とする。
【0082】
<動作例>
続いて、本適用例の画像処理モジュールA50における歪み補正処理の動作について説明する。図10および図11は、本実施形態の画像処理モジュールA50におけるパイプライン処理のタイミングおよび制御内容の一例を説明する図である。図10および図11においては、説明を容易にするため、図4〜図9を用いて説明した本適用例の画像処理モジュールA50の構成を簡略化した場合の例を示している。図10および図11の説明を行うための変更点は以下である。まず、1フレームの静止画像のデータを、2つのブロックラインに分割する。また、データバッファ52は8ライン分の記憶領域(領域1〜領域8)とする。また、入力部51には、12ラインのブロック画像データが入力され、出力部53からは、11ラインの画像処理データが出力されるものとする。なお、ブロック画像データおよび画像処理データには、ブロックライン、およびブロックライン内のライン数を区別するための符号を、上記と同様に付与して説明する。なお、画像処理モジュールA50のパイプライン処理のタイミングに関しては図10を参照し、このときのシーケンサ30による画像処理モジュールA50の制御内容に関しては図11を参照して説明を行う。
【0083】
画像処理装置1がDRAM20に記憶された1フレームの静止画像のデータの画像処理を開始すると、まず、シーケンサ30は、処理100を行う。処理100においては、図3で説明した処理100と同様に、シーケンサ30が、パイプラインを構成する全ての処理モジュールに対するパラメータや入出力データ数などのレジスタ設定を行い、全ての処理モジュールの動作状態の初期化(リセット)を行う。これにより、画像処理モジュールA50は、歪み補正処理を開始することができる状態となり、調停部54が出力するバッファ空き量情報は、データバッファ52の記憶領域が全て空き領域であることを表す情報に初期化され、有効データ量情報は、データバッファ52の全ての記憶領域に有効なデータが記憶されていないことを表す情報に初期化される。また、データバッファ領域決定部55が出力するライト領域情報に含まれるライト先頭バッファ領域と、リード領域情報に含まれるリード先頭バッファ領域とは、データバッファ52の領域1となる。また、入力部51は、入力DMAモジュール40に対してブロック画像データのデータ要求信号を出力する。なお、以下の説明においては、調停部54とデータバッファ領域決定部55とを合わせて、「共通部」ともいう。
【0084】
そして、シーケンサ30は、入力DMAモジュール40および出力DMAモジュール70に対するDMA開始トリガ信号を出力する。これにより、入力DMAモジュール40は、DMAによって、DRAM20からのブロック画像データIBL1−1を読み出し、読み出したブロック画像データIBL1−1を、画像処理モジュールA50に出力する(タイミングt1)。入力DMAモジュール40からブロック画像データIBL1−1が入力されると、入力部51は、入力されたブロック画像データIBL1−1をデータバッファ52の領域1に書き込む。また、入力部51は、ブロック画像データIBL1−1のデータバッファ52の領域1への書き込みが完了すると、ライト完了通知を調停部54に出力する。調停部54は、入力部51からライト完了通知が入力されると、領域1の状態を表すステータスを、「データあり」の状態に変更する(タイミングt2)。
【0085】
以降、入力DMAモジュール40からブロック画像データが入力される毎に、入力部51は、入力されたブロック画像データをデータバッファ52の対応する記憶領域に書き込み、対応するライト完了通知を調停部54に出力する。そして、調停部54は、ライト完了通知が入力されたデータバッファ52に対応する領域のステータスを、「データあり」の状態に変更していく。
【0086】
その後、調停部54は、歪補正処理後の画像処理データを生成するために必要なブロック画像データがデータバッファ52内に記憶されたときに、有効データ量情報をデータバッファ52内の記憶領域に有効なデータが記憶されていることを表す状態に変更する。図10では、画像処理データOBL1−1を出力するために、ブロック画像データIBL1−1〜ブロック画像データIBL1−3が必要であり、ブロック画像データIBL1−3が、データバッファ52の領域3に書き込まれたときに有効データ量情報を変更する場合を示している。出力部53は、調停部54からの有効データ量情報が入力されると、データバッファ52の領域1〜領域3から、ブロック画像データIBL1−1からブロック画像データIBL1−3を読み出し、フィルタ処理部531によって歪み補正処理を行って、画像処理データOBL1−1を出力する(タイミングt3)。
【0087】
また、出力部53は、画像処理データOBL1−1を出力すると、次の画像処理データOBL1−2を出力するためには必要でないブロック画像データIBL1−1を記憶しているデータバッファ52の領域1に対応するリード完了通知を調停部54に出力する。調停部54は、出力部53からリード完了通知が入力されると、ブロック画像データIBL1−1を記憶していたデータバッファ52の領域1のステータスを、「データなし」の状態、すなわち、空き領域の状態に変更する(タイミングt4)。
【0088】
以降、出力部53は、調停部54から入力される有効データ量情報に基づいて、データバッファ52の対応する記憶領域からブロック画像データを読み出し、フィルタ処理部531によって歪み補正処理を行った画像処理データを出力する。
【0089】
その後、図10のタイミングt5〜タイミングt6の期間は、画像処理データOBL1−3を出力するために必要なブロック画像データIBL1−3〜ブロック画像データIBL1−6がデータバッファ52の対応する記憶領域に書き込まれていないため、有効データ量情報が有効なデータが記憶されていないことを表す状態となっており、出力部53の処理が待たされている状態を示している。出力部53は、ブロック画像データIBL1−3〜ブロック画像データIBL1−6がデータバッファ52に書き込まれた後に、ブロック画像データIBL1−3〜ブロック画像データIBL1−6のデータバッファ52からの読み出しを再開し、フィルタ処理部531によって歪み補正処理を行った画像処理データOBL1−3を出力する。
【0090】
また、図10のタイミングt7は、データバッファ52の領域8に書き込むブロック画像データIBL1−8が入力DMAモジュール40から入力された後、ブロック画像データIBL1−9が入力されたタイミングである。このとき、調停部54におけるデータバッファ52の領域1のステータスは、「データなし」の状態であるため、入力部51は、引き続きブロック画像データIBL1−9をデータバッファ52の領域1に書き込む。
【0091】
その後、入力部51は、ブロックライン1の最後のブロック画像データIBL1−12を、データバッファ52の領域4への書き込みが完了すると、ライト完了通知を調停部54に出力するとともに、入力完了割込み信号をシーケンサ30に出力する(タイミングt8)。
【0092】
シーケンサ30は、画像処理モジュールA50から入力完了割込み信号が入力されると、処理200を行う。処理200においては、図3で説明した処理200と同様に、シーケンサ30が、画像処理モジュールA50の入力部51に対して、入力DMAモジュール40から入力されるブロックライン2のブロック画像データの入力データ数の設定を行い、入力部51側の動作の状態のリセットを行うための入力部リセット信号を出力する(タイミングt9)。これにより、画像処理モジュールA50は、ブロックライン2のブロック画像データの入力を開始することができる状態となり、入力部51は、入力DMAモジュール40に対してブロックライン2のブロック画像データのデータ要求信号を出力する。なお、共通部(調停部54およびデータバッファ領域決定部55)は、リセットされないため、入力部51は、入力DMAモジュール40から入力されたブロックライン2のブロック画像データをデータバッファ52の領域5から順次書き込みを行う。このとき、データバッファ領域決定部55が出力するライト領域情報に含まれるライト先頭バッファ領域は、データバッファ52の領域5となる。
【0093】
その後、図10のタイミングt10〜タイミングt11の期間は、画像処理データOBL1−11を出力するために、出力部53がデータバッファ52の領域8に記憶されているブロック画像データIBL1−8が使用されている、すなわち、出力部53によるブロック画像データIBL1−8の読み出しが完了していないため、入力部51によるデータバッファ52の領域8へのブロック画像データIBL2−4の書き込みが待たされている状態を示している。そして、出力部53は、画像処理データOBL1−11の出力が完了すると、リード完了通知を調停部54に出力するとともに、出力完了割込み信号をシーケンサ30に出力する(タイミングt11)。入力部51は、出力部53によるブロック画像データIBL1−8の読み出しが完了した後に、データバッファ52の領域8へのブロック画像データIBL2−4の書き込みを再開する。
【0094】
シーケンサ30は、画像処理モジュールA50から出力完了割込み信号が入力されると、処理300を行う。処理300においては、図3で説明した処理300と同様に、シーケンサ30が、画像処理モジュールA50の出力部53に対して、ブロックライン2のブロック画像データに対して歪み補正処理を行うために必要なパラメータや、画像処理データの出力データ数の設定を行い、出力部53側の動作の状態のリセットを行うための出力部リセット信号を出力する(タイミングt12)。これにより、画像処理モジュールA50は、ブロックライン2のブロック画像データに対する歪み補正処理を開始できる状態となり、出力部53は、データバッファ52に記憶しているブロックライン2のブロック画像データの読み出しと、画像処理データの出力とを開始する。なお、共通部(調停部54およびデータバッファ領域決定部55)は、リセットされないため、出力部53は、データバッファ52の領域5からブロックライン2のブロック画像データの読み出しを順次行う。このとき、データバッファ領域決定部55が出力するリード領域情報に含まれるリード先頭バッファ領域は、データバッファ52の領域5となる。
【0095】
その後、入力部51は、ブロックライン2の最後のブロック画像データIBL2−12を、データバッファ52の領域8への書き込みが完了すると、ライト完了通知を調停部54に出力するとともに、入力完了割込み信号をシーケンサ30に出力する(タイミングt13)。なお、タイミングt13においてシーケンサ30に入力完了割込み信号が入力されるが、シーケンサ30は、画像処理モジュールA50に対して何も行わない。これは、タイミングt13において入力された入力完了割込み信号は、全てのブロックラインのブロック画像データが画像処理モジュールA50に入力されたことを表しているのみであり、画像処理モジュールA50に次のブロックラインに対する設定をする必要がないからである。
【0096】
その後、出力部53は、画像処理データOBL2−11の出力が完了すると、リード完了通知を調停部54に出力するとともに、出力完了割込み信号をシーケンサ30に出力する(タイミングt14)。
【0097】
シーケンサ30は、画像処理モジュールA50から出力完了割込み信号が入力されると、処理600を行う。処理600においてシーケンサ30は、画像処理モジュールA50の全体をリセットし、画像処理モジュールA50における処理を完了する。より具体的には、シーケンサは、共通リセット信号、入力部リセット信号、および出力部リセット信号を画像処理モジュールA50に出力して、画像処理モジュールA50の処理を完了する。
【0098】
上記に述べたように、本適用例の画像処理モジュールA50では、入力DMAモジュール40からのブロック画像データの入力処理が完了したときの入力完了割込み信号と、歪み補正処理を行った画像処理データの出力処理が完了ときの出力完了割込み信号とを、それぞれシーケンサ30に出力することができる。また、データバッファ52の使用状態に応じて、ブロック画像データのデータバッファ52への書き込み制御、およびデータバッファ52からのブロック画像データの読み出し制御を調停することができる。
【0099】
このようにして、本適用例の画像処理モジュールA50では、前の画像処理データの出力処理を実行している最中に、次のブロック画像データの入力処理を開始することができる。図12は、従来の処理モジュールにおけるパイプライン処理と、本実施形態の処理モジュールにおけるパイプライン処理とを比較した図である。なお、図12(a)は、従来の処理モジュールにおけるパイプライン処理を示し、図12(b)は、本実施形態の処理モジュールにおけるパイプライン処理を示している。従来の処理モジュールでは、図12(a)に示したように、前に入力されたデータに対応した出力が完了してから次に入力されたデータに対応した出力が開始されるまでの時間が、ロス時間となっている。これに対して、本適用例の画像処理モジュールA50(本実施形態の処理モジュール)では、図12(b)に示したように、画像処理モジュールA50における入出力の遅延時間は変わらないが、画像処理データの出力処理が完了する前に、次のブロック画像データの入力処理を開始することができるため、前の画像処理データの出力処理の完了から次の画像処理データの出力処理の開始までのロス時間を、従来の処理モジュールよりも低減することができる。これにより、特に、ブロック画像データが入力されてから画像処理データが出力されるまでの入出力の遅延時間が長い処理モジュールにおいて、パイプライン処理の効率を向上させることができる。
【0100】
<データバッファのバッファサイズ決定方法の例>
なお、図10に示したパイプライン処理のタイミングにおいては、出力部53の処理が待たされている期間(タイミングt5〜タイミングt6)、および入力部51によるデータバッファ52へのブロック画像データの書き込みが待たされている期間(タイミングt10〜タイミングt11)が存在している。このように、処理が待たされる時間も処理モジュールの入出力の遅延時間に影響し、パイプライン処理におけるロス時間となってしまう。このような処理モジュール内の処理が待たされることによるロス時間は、データバッファ52のバッファサイズを最適化することによって、低減することもできる。
【0101】
ここで、本適用例におけるデータバッファ52のバッファサイズを決定する方法について説明する。図13は、本実施形態の画像処理モジュールA50に備えるデータバッファ52の記憶領域の数(バッファサイズ)を決定する方法を説明する図である。本適用例の画像処理モジュールA50においては、歪量が最も大きいブロックラインの最後のラインの画像処理データを出力するために必要なブロック画像データの数と、その次のブロックラインの最初のラインの画像処理データを出力するために必要なブロック画像データの数とに基づいて決定することができる。
【0102】
例えば、ブロックライン1の最後のラインの画像処理データ(例えば、図9(c)に示した画像処理データOBL1−16)を出力するために必要なブロック画像データの数が図13に示した範囲(糊代)Mであり、次のブロックライン2の最初のラインの画像処理データ(例えば、図9(d)に示した画像処理データOBL2−1)を出力するために必要なブロック画像データの数が図13に示した範囲(糊代)Nであると仮定する。この場合において、出力部53側から考えると、画像処理データOBL1−16を出力した直後に画像処理データOBL2−1を出力することができれば、画像処理モジュールA50内の処理が待たされる時間、すなわちロス時間を最小にすることができる。すなわち、画像処理データOBL1−16の歪み補正処理を行っている間に、画像処理データOBL2−1を出力するために必要なブロック画像データがデータバッファ52に書き込まれていれば、ロス時間を最小にすることができる。これは、データバッファ52に、画像処理データOBL1−16を出力するために使用する範囲Mのブロック画像データと、画像処理データOBL2−1を出力するために使用する範囲Nのブロック画像データとが、画像処理データOBL1−16の歪み補正処理を行っている間、格納されている必要があることを表している。このため、範囲Mと範囲Nとを合計した数を、データバッファ52のバッファサイズに決定する。
【0103】
このようにして、フィルタ処理部531によって行うフィルタ処理に必要なブロック画像データの数に応じてデータバッファ52のバッファサイズを決定することにより、最適な回路規模で、ロス時間を低減することができる。なお、本適用例では、歪み補正処理に必要なブロック画像データの数に基づいてバッファサイズを決定する方法を説明したが、バッファサイズの決定方法は、フィルタ処理部531が行うフィルタ処理の種類によって異なる。例えば、フィルタ処理部531によるフィルタ処理が、ローパスフィルタ処理であれば、フィルタのタップ数(フィルタサイズ)に応じた必要なデータ数に基づいてバッファサイズを決定する。
【0104】
上記に述べたとおり、本発明を実施するための形態によれば、パイプラインを構成するそれぞれの処理モジュールの内、入出力の遅延時間に起因する時間的なロスが大きい処理モジュールにおけるリセットの制御単位を、当該処理モジュールの入力側と出力側とで分離する。そして、処理モジュールの入力側または出力側の処理が完了する毎に、処理が完了したことを表す信号をそれぞれ出力するように構成する。より具体的には、例えば、画像処理モジュールA50においては、入力部51側と出力部53側とに分離し、入力完了割込み信号と出力完了割込み信号とを、それぞれ出力する。これにより、処理モジュールの入力側または出力側のいずれか一方の処理が完了したときに、他方の処理が完了していなくとも、次の処理を開始させることができ、当該処理モジュールにおける入出力の遅延時間に起因するロス時間を短くすることができる。これにより、パイプライン処理におけるロス時間を低減することができる。
【0105】
なお、本実施形態においては、歪み補正処理を行う画像処理モジュールに適用した場合について説明したが、適用することができる画像処理モジュールは、本発明を実施するための形態に限定されるものではない。例えば、ローパスフィルタ処理、ノイズ低減フィルタ処理、画像リサイズ処理など、大きなフィルタ処理を行う様々な画像処理モジュールに適用することができる。
【0106】
また、本実施形態においては、入力DMAモジュール40、画像処理モジュールA50、画像処理モジュールB60、および出力DMAモジュール70によってパイプラインを構成した場合の一例について説明したが、パイプラインを構成する処理モジュールは、本発明を実施するための形態に限定されるものではない。
【0107】
なお、特許文献1には、ロス時間を短縮するために、2つのバッファを用いる方法も開示されている(図17(a)参照)。2つのバッファを使用する場合には、図17(b)に示したように、一方のバッファ(例えば、バッファA)に画像データを書き込んでいる(Writeしている)ときには、他方のバッファ(例えば、バッファB)に書き込まれている画像データを読み出して(Readして)出力するように、切り替え制御を行っている。しかしながら、フィルタ処理を行う処理モジュールにおいては、フィルタ処理を行うために大容量のバッファを使用することが考えられるため、1つの処理モジュール内に大容量のバッファを2つ備えると、処理モジュールの回路規模が大きくなってしまう。本実施形態においては、バッファを仮想的にリング状につなげることによって、1つのバッファのみでフィルタ処理を行うことができる。このため、従来の2つのバッファを用いた処理モジュールよりも、小さい回路規模でフィルタ処理を行う処理モジュールを実現することができる。
【0108】
以上、本発明の実施形態について、図面を参照して説明してきたが、具体的な構成はこの実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲においての種々の変更も含まれる。
【符号の説明】
【0109】
1・・・画像処理装置
10・・・DMAバス
20・・・DRAM
30・・・シーケンサ(画像処理装置)
40・・・入力DMAモジュール
50・・・画像処理モジュールA(データ処理装置)
51・・・入力部(データ書き込み制御部)
52・・・データバッファ(バッファ部)
53・・・出力部(データ読み出し制御部)
531・・・フィルタ処理部(データ読み出し制御部、フィルタ処理部)
54・・・調停部(バッファ領域決定部)
55・・・データバッファ領域決定部(バッファ領域決定部)
60・・・画像処理モジュールB(データ処理装置)
70・・・出力DMAモジュール
【技術分野】
【0001】
本発明は、データ処理装置および画像処理装置に関する。
【背景技術】
【0002】
静止画用カメラ、動画用カメラ、医療用内視鏡カメラ、または産業用内視鏡カメラなどの撮像装置においては、撮像装置の画素数の向上、連写速度の向上に伴って、膨大な画素数の画像データを短時間で処理する画像処理装置が望まれている。このような画像データの処理を高速化するための技術として、図14(a)に示したように、画像処理にパイプライン処理を用いる技術が知られている(特許文献1参照)。この特許文献1で開示された技術によると、1フレームの静止画像を、複数の重複(オーバーラップ)部分、いわゆる「のり代部分」を持つブロックに分割する。そして、分割したブロック毎に、「フレームメモリ→イメージプロセス1→イメージプロセス2→・・・→イメージプロセスn→JPEG(Joint Photographic Experts Group)処理→フレームメモリ」というように、複数の画像処理を直結した処理を行うようになっている。しかし、分割したそれぞれのブロック内では処理を行う画像データの流れが連続しているが、異なるブロックとの間ではデータの流れが連続していない(図14(b)参照)。そのため、パイプライン処理の全体を制御するシーケンサが、パイプラインを構成する各処理モジュール(処理部)において処理する画像データの範囲などの設定を、各ブロックのパイプライン処理を開始する前に、毎回設定し直していた(図14(c)参照)。このように一連のパイプライン処理毎に画像処理の動作を制御した場合、パイプラインを構成する処理モジュールのいずれかが動作していない時間的なロスの期間が、それぞれのブロックの処理の間に発生してしまう。この処理モジュールが動作していないロス時間が、1フレームの静止画像の処理時間に影響することとなる。
【0003】
また、画像データの処理をさらに高速化するための技術として、図15に示したように、パイプラインを構成する各処理モジュール毎に、当該処理モジュールによる処理が完了したことを表す割込み信号を、シーケンサに出力する技術も開示されている(特許文献2参照)。この特許文献2で開示された技術では、シーケンサが、処理モジュールから割込み信号が入力されるたびに、その処理モジュールの設定を個別に変更する。これにより、シーケンサがそれぞれの処理モジュールの設定を変更するタイミングが、分割したブロックの処理を開始するタイミング毎ではなくなり、各処理モジュールの処理が完了したタイミング毎となる。このようにシーケンサが各処理モジュールの設定を変更するタイミングをそれぞれの処理モジュール毎にすることによって、特許文献2の技術では、各ブロック間の処理における時間的なロスを低減し、1フレームの静止画像の処理を高速化している(図16(a)参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2000−312327号公報
【特許文献2】特開2010−176606号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、パイプラインを構成する処理モジュールの1つの処理モジュールに着目(例えば、図16(b)に示したように、YC処理モジュールに着目)してみると、処理モジュールに入力してから出力されるまでに遅延時間が生じている。この遅延時間と、処理モジュールの設定の変更に要する時間とを合わせた時間、すなわち、最初のブロックに対応した出力が完了してから次のブロックに対応した出力が開始されるまでの時間は、画像データの処理の高速化におけるロス時間となってしまう、という問題がある。
【0006】
このロス時間の問題は、例えば、タップ数が大きいフィルタ処理を行う処理モジュールや、撮像装置のレンズの歪曲収差を補正する処理モジュールなどのように、処理モジュールに入力してから出力されるまでの遅延時間が長い処理モジュール程、より顕著な問題となる。
【0007】
本発明は、上記の課題認識に基づいてなされたものであり、処理モジュールに入力してから出力されるまでの遅延時間が長いデータ処理を含むパイプライン処理において、各パイプライン処理におけるロス時間を低減することができるデータ処理装置および画像処理装置を提供することを目的としている。
【課題を解決するための手段】
【0008】
上記の課題を解決するため、本発明のデータ処理装置は、データを記憶するバッファ部と、入力データを、前記バッファ部に書き込むデータ書き込み制御部と、前記バッファ部に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データを出力するデータ読み出し制御部と、前記データ書き込み制御部がデータを書き込む前記バッファ部内の記憶領域、および前記データ読み出し制御部がデータを読み出す前記バッファ部内の記憶領域を決定するバッファ領域決定部と、を備え、前記データ書き込み制御部は、前記バッファ領域決定部によって決定された前記記憶領域に前記入力データを書き込み、前記入力データの書き込みが完了したときに、データの書き込みが完了したことを表すデータ書き込み完了信号を出力し、前記データ読み出し制御部は、前記バッファ領域決定部によって決定された前記記憶領域に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データの出力が完了したときに、データの読み出しが完了したことを表すデータ読み出し完了信号を出力する、ことを特徴とする。
【0009】
また、本発明の前記データ書き込み制御部は、前記バッファ領域決定部によって決定された前記バッファ部内の書き込み可能領域に前記入力データを書き込み、予め定められた数の前記入力データの前記バッファ部への書き込みが完了したときに、データの書き込みが完了したと判定し、前記データ読み出し制御部は、前記バッファ領域決定部によって決定された前記バッファ部内の読み出し可能領域からデータを読み出し、予め定められた数の前記バッファ部からの読み出しが完了し、該読み出したデータに基づいて生成した出力データの出力が完了したときに、データの読み出しが完了したと判定し、前記バッファ領域決定部は、前記データ書き込み制御部による前記入力データの書き込み状態、および前記データ読み出し制御部によるデータの読み出し状態に応じて、前記バッファ部内の前記書き込み可能領域および前記読み出し可能領域を変更する、ことを特徴とする。
【0010】
また、本発明の前記バッファ領域決定部は、前記データ書き込み制御部によってデータが書き込まれた前記バッファ部内の前記記憶領域を、有効なデータが記憶され、該記憶されたデータを読み出しことができる前記読み出し可能領域に決定し、前記データ読み出し制御部によってデータが読み出された前記バッファ部内の前記記憶領域を、空き領域であり、前記入力データを書き込むことができる前記書き込み可能領域に決定する、ことを特徴とする。
【0011】
また、本発明の前記データ読み出し制御部は、前記読み出したデータに基づいてフィルタ処理した出力データを生成するフィルタ処理部、を備え、前記バッファ部内の前記記憶領域の記憶容量は、前記フィルタ処理部がフィルタ処理を行う際に必要とするデータ数に基づいて決定する、ことを特徴とする。
【0012】
また、本発明の前記記憶容量は、前記フィルタ処理部がフィルタ処理を行う際に必要とするデータ数の2倍のデータ数の前記入力データを記憶することができる容量である、ことを特徴とする。
【0013】
また、本発明の画像処理装置は、データを記憶するバッファ部と、入力データを、前記バッファ部に書き込むデータ書き込み制御部と、前記バッファ部に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データを出力するデータ読み出し制御部と、前記データ書き込み制御部がデータを書き込む前記バッファ部内の記憶領域、および前記データ読み出し制御部がデータを読み出す前記バッファ部内の記憶領域を決定するバッファ領域決定部と、を有し、前記データ書き込み制御部が前記バッファ領域決定部によって決定された前記記憶領域に前記入力データを書き込み、前記入力データの書き込みが完了したときに、データの書き込みが完了したことを表すデータ書き込み完了信号と、前記データ読み出し制御部が前記バッファ領域決定部によって決定された前記記憶領域に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データの出力が完了したときに、データの読み出しが完了したことを表すデータ読み出し完了信号と、をそれぞれ出力するデータ処理装置、を備え、前記データ書き込み完了信号が出力された後に、前記データ書き込み制御部による画像データの書き込みに係る設定を行い、前記データ読み出し完了信号が出力された後に、前記データ読み出し制御部による画像データの読み出しに係る設定を行う、ことを特徴とする。
【発明の効果】
【0014】
本発明によれば、処理モジュールに入力してから出力されるまでの遅延時間が長いデータ処理を含むパイプライン処理において、各パイプライン処理におけるロス時間を低減することができるという効果が得られる。
【図面の簡単な説明】
【0015】
【図1】本発明の実施形態における画像処理装置の概略構成を示したブロック図である。
【図2】本実施形態の画像処理装置に備える画像処理モジュールの概略構成を示したブロック図である。
【図3】本実施形態の画像処理装置における処理モジュールの制御タイミングおよび制御内容の一例を説明する図である。
【図4】本実施形態の処理モジュールにおいて行う歪補正処理を説明する図である。
【図5】本実施形態の処理モジュールにおける歪補正処理方法の一例を説明する図である。
【図6】本実施形態の処理モジュールに備えたデータバッファの構成例を説明する図である。
【図7】本実施形態の処理モジュールに備えたデータバッファの動作例を説明する図である。
【図8】本実施形態の処理モジュールに備えたデータバッファにデータを書き込む動作例を説明する図である。
【図9】本実施形態の処理モジュールに備えたデータバッファからデータを読み出す動作例を説明する図である。
【図10】本実施形態の処理モジュールにおけるパイプライン処理のタイミングを示したタイミングチャートである。
【図11】本実施形態の処理モジュールにおけるパイプライン処理の制御内容の一例を説明する図である。
【図12】従来の処理モジュールにおけるパイプライン処理と、本実施形態の処理モジュールにおけるパイプライン処理とを比較した図である。
【図13】本実施形態の処理モジュールに備えるデータバッファの記憶領域の数を決定する方法を説明する図である。
【図14】従来のパイプライン処理を行う画像処理装置の概略構成および動作を説明する図である。
【図15】従来のパイプライン処理を高速化した画像処理装置の概略構成を示したブロック図である。
【図16】従来のパイプライン処理を高速化した画像処理装置の動作を説明する図である。
【図17】従来の画像処理装置に備える画像処理モジュールのデータバッファの構成例および動作例を説明する図である。
【発明を実施するための形態】
【0016】
以下、本発明の実施形態について、図面を参照して説明する。図1は、本実施形態における画像処理装置の概略構成を示したブロック図である。図1に示した画像処理装置1は、DMAバス10と、DRAM20と、シーケンサ30と、入力DMAモジュール40と、画像処理モジュールA50と、画像処理モジュールB60と、出力DMAモジュール70と、を備えている。本実施形態の画像処理装置1は、例えば、静止画用カメラなどの撮像装置に備えられる。
【0017】
DRAM20は、DMAバス10に接続され、撮像装置において処理される様々なデータを記憶する。例えば、撮像装置に備えた図示しないイメージャから出力された静止画像のデータを記憶する。本実施形態の画像処理装置1においては、DRAM20に記憶された1フレームの静止画像のデータを、図14(b)に示したように、複数の重複(オーバーラップ)したブロックに分割して、それぞれのブロック毎に画像処理を行う。本実施形態の画像処理装置1における画像処理は、図1に示したように、入力DMAモジュール40、画像処理モジュールA50、画像処理モジュールB60、および出力DMAモジュール70が直列に接続されたパイプライン処理によって、それぞれの処理モジュールにおける画像処理を順次行う。以下の説明においては、1フレームの静止画像のデータを分割したそれぞれのブロックに含まれるデータを、「ブロック画像データ」という。
【0018】
シーケンサ30は、本実施形態の画像処理装置1のパイプライン処理を行う際、パイプラインを構成する各処理モジュールの処理シーケンスを制御する。シーケンサ30は、パイプライン処理を行うブロックに応じた設定および処理の開始を制御する制御信号を各処理モジュールに出力する。
【0019】
入力DMAモジュール40は、DRAM20に記憶しているブロック画像データを読み出し、読み出したブロック画像データを、パイプラインを構成する次の処理モジュールである画像処理モジュールA50に出力するための処理モジュールである。入力DMAモジュール40は、シーケンサ30から入力された制御信号に応じて、DMAバス10を介してDRAM20からブロック画像データを読み出し、読み出したブロック画像データを一時記憶する。そして、入力DMAモジュール40は、画像処理モジュールA50から入力されたデータ要求信号に応じて、一時記憶したブロック画像データを、画像処理モジュールA50に出力する。図1においては、シーケンサ30から入力される出力データ数設定信号、リセット信号、およびDMA開始トリガ信号と、シーケンサ30に出力する完了割込み信号とを示している。
【0020】
画像処理モジュールA50は、入力DMAモジュール40から入力されたブロック画像データに対して種々のデジタル的な画像処理を行って、画像処理後のブロック画像データ(以下、「画像処理データ」という)を、パイプラインを構成する次の処理モジュールである画像処理モジュールB60に出力するための処理モジュールである。画像処理モジュールA50は、シーケンサ30から入力された制御信号に応じて、入力DMAモジュール40から入力されたブロック画像データを一時記憶する。そして、一時記憶したブロック画像データに対して画像処理を行い、画像処理モジュールB60から入力されたデータ要求信号に応じて、画像処理データを、画像処理モジュールB60に出力する。画像処理モジュールA50は、ブロック画像データの入力動作および出力動作毎に、シーケンサ30によって制御される。図1においては、シーケンサ30から入力される共通リセット信号、入力データ数設定信号、入力部リセット信号、出力データ数設定信号、および出力部リセット信号と、シーケンサ30に出力する入力完了割込み信号および出力完了割込み信号とを示している。なお、画像処理モジュールA50に関する詳細な説明は、後述する。
【0021】
画像処理モジュールB60は、画像処理モジュールA50から入力された画像処理データに対して、さらに種々のデジタル的な画像処理を行って、画像処理後のブロック画像データを、パイプラインを構成する次の処理モジュールである出力DMAモジュール70に出力するための処理モジュールである。なお、画像処理モジュールB60は、ブロック画像データに対して行う画像処理の内容が、画像処理モジュールA50と異なるのみであるため、詳細な説明は省略する。
【0022】
出力DMAモジュール70は、画像処理モジュールB60から入力された画像処理後のブロック画像データを、DRAM20に書き込む(記憶する)ための処理モジュールである。出力DMAモジュール70は、シーケンサ30から入力された制御信号に応じて、画像処理モジュールB60から入力された画像処理後のブロック画像データを一時記憶する。そして、出力DMAモジュール70は、一時記憶した画像処理後のブロック画像データを、DMAバス10を介してDRAM20に出力する。図1においては、シーケンサ30から入力される入力データ数設定信号、リセット信号、およびDMA開始トリガ信号と、シーケンサ30に出力するDMA完了割込み信号とを示している。
【0023】
このように、画像処理装置1内の各処理モジュールが、1フレームの静止画像のデータを分割したブロック毎に、シーケンサ30から出力された制御信号に応じた画像処理を順次処理を行うことによって、各ブロックに対する一連の画像処理を行う。
【0024】
次に、画像処理装置1内の画像処理モジュールについて説明する。なお、上記に述べたように、画像処理モジュールA50と画像処理モジュールB60とは、画像処理の内容が異なるのみであるため、以下の説明においては、代表して画像処理モジュールA50について説明する。また、画像処理モジュールA50は、画像処理としてフィルタ処理を行う処理モジュールである場合について説明する。図2は、本実施形態の画像処理装置1に備える画像処理モジュールA50の概略構成を示したブロック図である。図2に示したように、画像処理モジュールA50は、入力部51と、データバッファ52と、出力部53と、調停部54と、データバッファ領域決定部55と、を備えている。また、出力部53は、フィルタ処理部531を備えている。
【0025】
データバッファ52は、ブロック画像データを一時記憶する記憶部である。データバッファ52は、例えば、SRAM(Static Random Access Memory)などで構成される。
【0026】
入力部51は、シーケンサ30から入力された入力データ数設定信号によって設定された数のブロック画像データを、前段の処理モジュール(図1に示した本実施形態においては、入力DMAモジュール40)から読み出し、読み出したブロック画像データを、データバッファ52に書き込む(ライトする)。入力部51は、シーケンサ30から入力された入力部リセット信号によって初期化される。また、入力部51は、設定された数のブロック画像データの読み出しと、データバッファ52への書き込みとが完了する、すなわち、入力処理が完了すると、入力完了割込み信号を、シーケンサ30に出力する。また、入力部51が、データバッファ52にブロック画像データを書き込み祭には、調停部54から入力されるバッファ空き量情報と、データバッファ領域決定部55から入力されるライト領域情報とに基づいて生成したライトコマンドによって、データバッファ52の対応する記憶領域にライトデータが書き込まれる。また、入力部51は、ライトデータの書き込みが完了したときに、ライト完了通知を調停部54に出力する。
【0027】
出力部53は、データバッファ52に記憶しているブロック画像データを読み出し(リードし)、出力部53内に備えるフィルタ処理部531によってフィルタ処理を行った画像処理データを、後段の処理モジュール(図1に示した本実施形態においては、画像処理モジュールB60)から入力されたデータ要求信号に応じて出力する。出力部53が出力する画像処理データの数は、シーケンサ30から入力された出力データ数設定信号によって設定される。出力部53は、シーケンサ30から入力された出力部リセット信号によって初期化される。また、出力部53は、データバッファ52に記憶しているブロック画像データの読み出しと、設定された数の画像処理データの出力とが完了する、すなわち、出力処理が完了すると、出力完了割込み信号を、シーケンサ30に出力する。また、出力部53が、に記憶しているブロック画像データを読み出す祭には、調停部54から入力される有効データ量情報と、データバッファ領域決定部55から入力されるリード領域情報とに基づいて生成したリードコマンドによって、データバッファ52の対応する記憶領域からリードデータを読み出す。また、出力部53は、リードデータの読み出しが完了したときに、リード完了通知を調停部54に出力する。
【0028】
フィルタ処理部531におけるフィルタ処理としては、例えば、ローパスフィルタ処理、ノイズ低減フィルタ処理、歪補正処理、画像リサイズ処理など、様々な画像処理が考えられる。なお、以下の説明においては、出力部53内にフィルタ処理部531を備える場合の例について説明するが、例えば、入力部51内にフィルタ処理部を備える構成とすることもできる。入力部51内にフィルタ処理部を備える構成とした場合には、入力部51がデータバッファ52に書き込むデータが画像処理データとなり、出力部53はデータバッファ52に記憶された画像処理データを出力することとなる。
【0029】
データバッファ領域決定部55は、データバッファ52に備えた記憶領域の内、どの記憶領域を使用するかを決定する。より具体的には、データバッファ領域決定部55は、入力部51がブロック画像データを書き込む記憶領域と、出力部53がブロック画像データを読み出す記憶領域とを、それぞれ決定する。そして、決定した入力部51が書き込む記憶領域の情報を、ライト領域情報として入力部51に出力する。また、出力部53が読み出す記憶領域の情報を、リード領域情報として出力部53に出力する。
【0030】
調停部54は、データバッファ52に備えた記憶領域を管理する。より具体的には、調停部54は、データバッファ52にデータを記憶していない記憶領域(以下、「空き領域」という)の情報を、バッファ空き量情報として入力部51に出力する。このバッファ空き量情報は、入力部51がデータバッファ52にブロック画像データを書き込む際に、ブロック画像データを書き込もうとしているデータバッファ52の記憶領域が空き領域であるか否かの判断に用いられる。入力部51は、ブロック画像データを書き込もうとしているデータバッファ52の記憶領域が空き領域である場合に、当該記憶領域がデータを格納(書き込み:ライト)することが可能であると判断し、ブロック画像データの書き込みを実行する。
【0031】
また、調停部54は、データバッファ52に記憶している有効なデータの情報を、有効データ量情報として出力部53に出力する。この有効データ量情報は、出力部53がデータバッファ52からブロック画像データを読み出す際に、ブロック画像データを読み出そうとしているデータバッファ52の記憶領域に有効なデータが記憶されているか否かの判断に用いられる。出力部53は、ブロック画像データを読み出そうとしているデータバッファ52の記憶領域に有効なデータが記憶されている場合に、当該記憶領域からデータを取得(読み出し:リード)することが可能であると判断し、ブロック画像データの読み出しを実行する。
【0032】
また、調停部54は、入力部51から入力されるライト完了通知、および出力部53から入力されるリード完了通知に基づいて、バッファ空き量情報および有効データ量情報を更新する。
【0033】
調停部54およびデータバッファ領域決定部55は、シーケンサ30から入力された共通リセット信号によって、初期化される。すなわち、入力部リセット信号または出力部リセット信号では、初期化されない。これは、入力部51または出力部53のいずれか一方がリセットを行うタイミングであっても、他方は処理を実行しており、リセットするタイミングではない場合があるため、入力部リセット信号または出力部リセット信号によって、処理を行う際の情報であるバッファ空き量情報または有効データ量情報が初期化されてしまうことを回避するためである。なお、シーケンサ30からの共通リセット信号の入力によって初期化された場合には、バッファ空き量情報は、データバッファ52の記憶領域が全て空き領域であることを表す情報に初期化され、有効データ量情報は、データバッファ52の全ての記憶領域に有効なデータが記憶されていないことを表す情報に初期化される。
【0034】
このような構成によって、画像処理モジュールA50では、リセットを行う制御単位(以下、「ドメイン」という)を分離する。より具体的には、ブロック画像データを入力する側のリセットドメイン(入力リセットドメイン)と、画像処理データを出力する側のリセットドメイン(出力リセットドメイン)とを、データバッファ52の位置で分離する。そして、画像処理モジュールA50は、上記に述べたように、入力部51によるブロック画像データの入力処理が完了したことを表す入力完了割込み信号、および出力部53による画像処理データの出力処理が完了したことを表す出力完了割込み信号を、それぞれ、シーケンサ30に出力する。
【0035】
これにより、本実施形態の画像処理装置1では、シーケンサ30に画像処理モジュールA50または画像処理モジュールB60から割込み信号(入力完了割込み信号または出力完了割込み信号)が入力されるたびに、シーケンサ30が割込み信号に応じたドメイン(制御単位)のリセットおよびパイプライン処理を行うブロックに応じた設定の再設定を行うことができる。このことにより、画像処理モジュールA50および画像処理モジュールB60では、前の処理モジュールからから出力されたブロック画像データを画像処理して次の処理モジュールに出力している最中に、前の処理ブロックから出力される次のブロック画像データを、先行して入力処理を開始することができる。
【0036】
ここで、図1に示した画像処理装置1における処理モジュールの制御について説明する。なお、以下の説明においては、画像処理装置1におけるパイプライン処理において、シーケンサ30と画像処理モジュールA50とに注目して説明する。図3は、本実施形態の画像処理装置1における画像処理モジュールA50の制御タイミングおよび制御内容の一例を説明する図である。画像処理装置1のパイプライン処理のタイミングに関しては図3(a)を参照し、シーケンサ30の処理内容に関しては図3(b)を参照して説明を行う。
【0037】
画像処理装置1がDRAM20に記憶された1フレームの静止画像のデータの画像処理を開始すると、まず、シーケンサ30は、処理100を行う。処理100においてシーケンサ30は、まず、処理110において、パイプラインを構成する全ての処理モジュール(入力DMAモジュール40、画像処理モジュールA50、画像処理モジュールB60、および出力DMAモジュール70)に対して、ブロック画像データを画像処理する際に必要なパラメータや入出力データ数などのレジスタ設定を行う。例えば、入力DMAモジュール40には、DRAM20から読み出して画像処理モジュールA50に出力する出力データ数が設定される。また、画像処理モジュールA50の入力部51には、入力DMAモジュール40から入力される入力データ数が設定され、出力部53には、ブロック画像データを画像処理する際に必要なパラメータや、画像処理データを次の画像処理モジュールB60に出力する際の出力データ数が設定される。
【0038】
続いて、シーケンサ30は、処理120において、全ての処理モジュールの動作の状態を初期化(リセット)する。この処理モジュールのリセットにおいてシーケンサ30は、入力DMAモジュール40および出力DMAモジュール70に対して、リセット信号を出力し、画像処理モジュールA50および画像処理モジュールB60に対して、共通リセット信号、入力部リセット信号、および出力部リセット信号を出力する。その後、シーケンサ30は、リセットを解除する。これにより、各処理モジュールは、それぞれの処理を開始することができる状態となる。このとき、画像処理モジュールA50は、入力DMAモジュール40に対してデータ要求信号を出力する。
【0039】
続いて、シーケンサ30は、処理130において、シーケンサ30は、入力DMAモジュール40および出力DMAモジュール70に対して、DMA開始トリガ信号を出力する。これにより、入力DMAモジュール40は、DMAによって、DRAM20からの最初(1つ目)のブロック画像データ(以下、「第1ブロック画像データ」という)を読み出し、画像処理モジュールA50に第1ブロック画像データを出力することができる状態となる。ここで、入力DMAモジュール40には、画像処理モジュールA50からデータ要求信号が入力されているため、入力DMAモジュール40がDRAM20から読み出した第1ブロック画像データは、画像処理モジュールA50に出力される。
【0040】
そして、画像処理モジュールA50内の入力部51は、入力された第1ブロック画像データを、データバッファ52に書き込む。また、画像処理モジュールA50内の出力部53は、データバッファ52に記憶している第1ブロック画像データを読み出し、フィルタ処理部531によってフィルタ処理を行った画像処理データを、画像処理モジュールB60から入力されたデータ要求信号に応じて出力する。
【0041】
その後、画像処理モジュールA50は、入力部51によるデータバッファ52への第1ブロック画像データの書き込みが終了する、すなわち、処理110においてシーケンサ30によって設定された入力データ数の第1ブロック画像データをデータバッファ52に書き込んだとき、入力完了割込み信号をシーケンサ30に出力する。
【0042】
シーケンサ30は、画像処理モジュールA50から入力完了割込み信号が入力されると、処理200を行う。処理200においてシーケンサ30は、まず、処理210において、画像処理モジュールA50の入力部51に対して、入力DMAモジュール40から入力される次(2つ目)のブロック画像データ(以下、「第2ブロック画像データ」という)の入力データ数を設定する。
【0043】
続いて、シーケンサ30は、処理220において、画像処理モジュールA50内の入力部51側の動作の状態をリセットする。この入力部51側のリセットにおいてシーケンサ30は、画像処理モジュールA50に対して、入力部リセット信号のみを出力する。その後、シーケンサ30は、画像処理モジュールA50に対するリセットを解除する。これにより、画像処理モジュールA50は、入力DMAモジュール40に対して第2ブロック画像データを要求するデータ要求信号を出力し、第2ブロック画像データのデータバッファ52への書き込みを開始する。
【0044】
なお、処理220においてシーケンサ30は、画像処理モジュールA50に対して共通リセット信号を出力していないため、画像処理モジュールA50内の調停部54およびデータバッファ領域決定部55はリセットされない。このため、画像処理モジュールA50内の入力部51が第2ブロック画像データをデータバッファ52に書き込む際には、第1ブロック画像データを最後に書き込んだデータバッファ52の記憶領域の次の記憶領域から、第2ブロック画像データの書き込みが開始される。これにより、入力部51が第2ブロック画像データをデータバッファ52に書き込む際に、出力部53がフィルタ処理を行って画像処理モジュールB60に出力していない第1ブロック画像データが上書きされてしまうことを回避することができる。
【0045】
その後、画像処理モジュールA50は、出力部53によるデータバッファ52からの第1ブロック画像データの読み出し、およびフィルタ処理部531によるフィルタ処理後の画像処理データの画像処理モジュールB60への出力が終了する、すなわち、処理110においてシーケンサ30によって設定された出力データ数のフィルタ処理後の画像処理データを出力したとき、出力完了割込み信号をシーケンサ30に出力する。
【0046】
シーケンサ30は、画像処理モジュールA50から出力完了割込み信号が入力されると、処理300を行う。処理300においてシーケンサ30は、まず、処理310において、画像処理モジュールA50の出力部53に対して、第2ブロック画像データを画像処理する際に必要なパラメータや、画像処理データを画像処理モジュールB60に出力する出力データ数を設定する。
【0047】
続いて、シーケンサ30は、処理320において、画像処理モジュールA50内の出力部53側の動作の状態をリセットする。この出力部53側のリセットにおいてシーケンサ30は、画像処理モジュールA50に対して、出力部リセット信号のみを出力する。その後、シーケンサ30は、画像処理モジュールA50に対するリセットを解除する。これにより、画像処理モジュールA50は、データバッファ52に記憶している第2ブロック画像データに対するフィルタ処理後の画像処理データを、画像処理モジュールB60から入力されたデータ要求信号に応じて出力する。
【0048】
なお、処理320においてシーケンサ30は、画像処理モジュールA50に対して共通リセット信号を出力していないため、画像処理モジュールA50内の調停部54およびデータバッファ領域決定部55はリセットされない。このため、画像処理モジュールA50内の出力部53が第2ブロック画像データをデータバッファ52から読み出す際には、第1ブロック画像データを最後に読み出したデータバッファ52の記憶領域の次の記憶領域から、第2ブロック画像データの読み出しが開始される。これにより、出力部53が第2ブロック画像データをデータバッファ52から読み出す際に、データバッファ52に残っている第1ブロック画像データを読み出してフィルタ処理を行って画像処理モジュールB60に出力してしまうことを回避することができる。
【0049】
その後、画像処理モジュールA50は、入力部51によるデータバッファ52への第2ブロック画像データの書き込みが終了する、すなわち、処理210においてシーケンサ30によって設定された入力データ数の第2ブロック画像データをデータバッファ52に書き込んだとき、入力完了割込み信号をシーケンサ30に出力する。
【0050】
シーケンサ30は、画像処理モジュールA50から入力完了割込み信号が入力されると、処理400を行う。処理400においてシーケンサ30は、処理200と同様に、入力DMAモジュール40から入力される次(3つ目)のブロック画像データ(以下、「第3ブロック画像データ」という)に対応した処理を行う。より具体的には、シーケンサ30は、処理410において、画像処理モジュールA50の入力部51に対して、第3ブロック画像データの入力データ数を設定する。そして、シーケンサ30は、処理420において、画像処理モジュールA50内の入力部51側の動作の状態をリセットおよびリセットの解除を行う。これにより、画像処理モジュールA50は、入力DMAモジュール40に対して第3ブロック画像データを要求するデータ要求信号を出力し、第3ブロック画像データのデータバッファ52への書き込みを開始する。
【0051】
その後、画像処理モジュールA50は、出力部53によるデータバッファ52からの第2ブロック画像データの読み出し、およびフィルタ処理部531によるフィルタ処理後の画像処理データの画像処理モジュールB60への出力が終了する、すなわち、処理310においてシーケンサ30によって設定された出力データ数のフィルタ処理後の画像処理データを出力したとき、出力完了割込み信号をシーケンサ30に出力する。
【0052】
シーケンサ30は、画像処理モジュールA50から出力完了割込み信号が入力されると、処理500を行う。処理500においてシーケンサ30は、処理300と同様に、第3ブロック画像データに対応した処理を行う。より具体的には、シーケンサ30は、処理510において、画像処理モジュールA50の出力部53に対して、第3ブロック画像データを画像処理する際に必要なパラメータや、画像処理データを画像処理モジュールB60に出力する出力データ数を設定する。そして、シーケンサ30は、処理520において、画像処理モジュールA50内の出力部53側の動作の状態をリセットおよびリセットの解除を行う。これにより、画像処理モジュールA50は、データバッファ52に記憶している第3ブロック画像データに対するフィルタ処理後の画像処理データを、画像処理モジュールB60から入力されたデータ要求信号に応じて出力する。
【0053】
以降、同様に、画像処理モジュールA50から割込み信号が入力される毎に、シーケンサ30は、入力された割込み信号に応じた処理を、画像処理装置1における1フレームの静止画像のデータのパイプライン処理が終了となるまで繰り返す。
【0054】
上記に述べたように、本実施形態の画像処理装置1に備えた画像処理モジュールA50では、入力DMAモジュール40からのブロック画像データの入力処理が完了したときの入力完了割込み信号と、画像処理モジュールB60へのフィルタ処理後の画像処理データの出力処理が完了ときの出力完了割込み信号とを、それぞれシーケンサ30に出力することができる。また、本実施形態の画像処理装置1に備えた画像処理モジュールB60では、画像処理モジュールA50からのフィルタ処理後の画像処理データの入力処理が完了したときの入力完了割込み信号と、出力DMAモジュール70への画像処理データの出力処理が完了ときの出力完了割込み信号とを、それぞれシーケンサ30に出力することができる。このように、画像処理モジュールA50および画像処理モジュールB60では、入力部51側の制御(入力リセットドメイン)と、出力部53側の制御(出力リセットドメイン)とを、分離することができる。これにより、画像処理モジュールA50および画像処理モジュールB60では、前の画像処理データの出力処理を実行している最中に、次のブロック画像データの入力処理を開始することができる。
【0055】
このように、画像処理データの出力処理が完了する前に、次のブロック画像データの入力処理を開始することによって、画像処理モジュールA50および画像処理モジュールB60のそれぞれで、前の画像処理データの出力処理の完了から次の画像処理データの出力処理の開始までのロス時間を低減することができ、パイプライン処理の効率を向上させることができる。特に、ブロック画像データが入力されてからフィルタ処理後の画像処理データが出力されるまでの入出力の遅延時間が長い処理モジュール(例えば、以下に説明する歪補正処理モジュール)においては、高い効果を得ることができる。
【0056】
<適用例>
次に、画像処理モジュールA50を実際の画像処理に適用した場合の動作例について説明する。以下の説明においては、画像処理モジュールA50が、出力部53に備えたフィルタ処理部531によって歪補正処理を行う場合の例について説明する。図4は、本実施形態の画像処理モジュールA50において行う歪補正処理を説明する図である。
【0057】
一般的に歪補正処理においては、歪補正前の入力データが入力されてから、歪補正処理後の出力データが出力されるまでの入出力の遅延時間が長い。これは、歪補正処理においては、1つの補正後の出力データを得るために、複数の入力データが処理に用いられるからである。例えば、図4(a)に示すように、歪補正後の1つのラインXの出力データを得るためには、範囲Y分の入力データが必要である。このため、範囲Y分の入力データが処理モジュールに入力されるまで、補正後のラインXの出力データを出力することができない。このことにより、パイプライン処理における歪補正処理に起因するロス時間が長くなってしまう。
【0058】
画像処理モジュールA50による歪補正処理においては、図4(b)に示すように、1フレームの静止画像のデータを複数のブロックに分割する。そして、分割したブロックに含まれるブロック画像データ毎に歪補正処理を行う。画像処理モジュールA50においては、上記に述べたように、前のブロック画像データに対応した画像処理データの出力処理、すなわち、歪補正処理を実行している最中に、次のブロック画像データの入力処理を行うことができる。より具体的には、最初のブロック1のブロック画像データに対して歪補正処理を行っている最中に、ブロック2のブロック画像データの入力を開始することができる。このため、画像処理モジュールA50では、ブロック1の歪補正処理における入出力の遅延時間以外の遅延時間を短縮することができ、パイプライン処理のロス時間を低減することができる。
【0059】
<歪補正処理の方法例>
ここで、画像処理モジュールA50による歪補正処理の動作の説明に先立って、画像処理モジュールA50における歪補正処理の処理方法および各構成要素の構成について説明する。まず、画像処理モジュールA50における歪補正処理の方法について説明する。図5は、本実施形態の画像処理モジュールA50における歪補正処理方法の一例を説明する図である。歪補正処理に画像処理モジュールA50を適用した場合の本適用例においては、画像処理モジュールA50内のフィルタ処理部531は、図5(a)に示したような、1フレームの静止画像のデータを水平方向に複数のブロック(以下、「ブロックライン」という)に分割したブロック画像データ毎に歪補正処理を行う。そして、フィルタ処理部531は、静止画像の上(ブロックライン1)から順次歪補正処理を行うものとする。
【0060】
より具体的には、フィルタ処理部531は、まず、図5(b)に示すように、ブロックライン1の歪補正処理を行う。そして、ブロックライン1の歪補正処理が終了した後に、図5(c)および図5(d)に示すように、ブロックライン2、続いてブロックライン3というように、順次、歪補正処理を行っていく。
【0061】
なお、フィルタ処理部531が歪補正処理を行う際に静止画像のデータを分割する方法は、図5に示した水平方向のみの分割に限定されるものではなく、例えば、図4(a)に示したように、水平方向に加えて垂直方向にも分割し、分割したそれぞれのブロック毎に歪補正処理を行う構成とすることもできる。
【0062】
<データバッファの構成例>
続いて、本適用例におけるデータバッファ52の構成について説明する。図6および図7は、本実施形態の画像処理モジュールA50に備えたデータバッファ52の構成例および動作例を説明する図である。本適用例の画像処理モジュールA50に備えたデータバッファ52は、図6(a)に示したように、ブロックラインの垂直方向の幅を1ラインとし、ブロックラインの水平方向に16ライン分の記憶領域(領域1〜領域16)で構成されているものとする。
【0063】
そして、上記に述べたように、ブロックライン1→ブロックライン2→ブロックライン3というように、順次、歪補正処理を行っていく(図6(b)参照)。このとき、画像処理モジュールA50には、入力DMAモジュール40から、図6(c)に示したような順番でブロック画像データが入力される。より具体的には、最初に、ブロックライン1の1ライン目のブロック画像データが入力され、続いて、ブロックライン1の2ライン目のブロック画像データが入力される。その後、ブロックライン1の20ライン目のブロック画像データが入力されると、続いて、ブロックライン2の1ライン目のブロック画像データが入力される。以降、同様に、ブロックライン2の2ライン目のブロック画像データ・・・ブロックライン2の20ライン目のブロック画像データ、ブロックライン3の1ライン目のブロック画像データ・・・ブロックライン3の20ライン目のブロック画像データというように、入力DMAモジュール40から順次ブロック画像データが入力される。
【0064】
なお、以下の説明においては、画像処理モジュールA50に入力されるブロック画像データに対して、ブロックライン、およびブロックライン内のライン数を区別するための符号を付与して説明する。例えば、ブロックライン1の1ライン目のブロック画像データは、「ブロック画像データIBL1−1」という。また、例えば、ブロックライン3の20ライン目のブロック画像データは、「ブロック画像データIBL3−20」という。また、フィルタ処理部531によって歪み補正処理がされた後に、画像処理モジュールA50から出力される歪補正処理後の画像処理データに対しても、同様に、ブロックライン、およびブロックライン内のライン数を区別するための符号を付与して説明する。例えば、歪補正処理後の画像処理データにおいて、ブロックライン1の1ライン目の画像処理データは、「画像処理データOBL1−1」という。また、例えば、ブロックライン3の16ライン目の画像処理データは、「画像処理データOBL3−16」という。
【0065】
図7は、入力DMAモジュール40から本適用例の画像処理モジュールA50に20ラインのブロック画像データが入力され、本適用例の画像処理モジュールA50から画像処理モジュールB60に16ラインの歪補正処理後の画像処理データが出力される場合のパイプライン処理のタイミングを示している。
【0066】
<データバッファへのデータ書き込みの例>
続いて、本適用例においてブロック画像データをデータバッファ52に書き込む動作について説明する。図8は、本実施形態の画像処理モジュールA50に備えたデータバッファ52にブロック画像データを書き込む動作例を説明する図である。
【0067】
本適用例の画像処理モジュールA50内に備えたデータバッファ52の構成は、図6(a)に示したように、16ライン分の記憶領域で構成されている。すなわち、データバッファ52の記憶領域は、領域1〜領域16のみである。このため、画像処理モジュールA50では、データバッファ52が、領域1と領域16とを仮想的にリング状につなげられたリングバッファの形式であるものとして、入力部51が、入力DMAモジュール40から入力されたブロック画像データの書き込みを制御する。ブロック画像データを書き込むデータバッファ52の領域は、データバッファ領域決定部55によって決定される。
【0068】
図8では、ブロックライン1→ブロックライン2→ブロックライン3というように、順次、ブロック画像データをデータバッファ52に書き込む場合において、各ブロックラインが20ラインであったときに、それぞれのブロック画像データが記憶されるデータバッファ52の記憶領域を示している。なお、図8においては、説明を容易にするため、データバッファ52の記憶領域(領域1〜領域16)の状態を、時系列に4回並べて表している。
【0069】
より具体的には、画像処理装置1におけるパイプライン処理が開始されると、データバッファ領域決定部55は、データバッファ52の領域1〜領域16を、ブロック画像データIBL1−1〜ブロック画像データIBL1−16を書き込む記憶領域として決定する(図8(a)参照)。また、データバッファ領域決定部55は、領域1〜領域16に記憶しているブロック画像データIBL1−1〜ブロック画像データIBL1−16が、フィルタ処理部531による歪補正処理に使用され、調停部54によって空き領域であると判断される毎に、空き領域であると判断されたデータバッファ52の領域1〜領域16を、順次、次のブロック画像データを書き込む記憶領域として決定する(図8(b)〜図8(d)参照)。
【0070】
図8(b)においては、データバッファ52の領域1〜領域4が、ブロック画像データIBL1−17〜ブロック画像データIBL1−20を書き込む記憶領域として決定され、データバッファ52の領域5〜領域16が、ブロック画像データIBL2−1〜ブロック画像データIBL1−12を書き込む記憶領域として決定された場合を表している。なお、入力部51は、データバッファ52の領域4へのブロック画像データIBL1−20の書き込みが完了したときに、入力完了割込み信号を、シーケンサ30に出力する。
【0071】
また、図8(c)においては、データバッファ52の領域1〜領域8が、ブロック画像データIBL2−13〜ブロック画像データIBL2−20を書き込む記憶領域として決定され、データバッファ52の領域9〜領域16が、ブロック画像データIBL3−1〜ブロック画像データIBL1−8を書き込む記憶領域として決定された場合を表している。なお、入力部51は、データバッファ52の領域8へのブロック画像データIBL2−20の書き込みが完了したときに、入力完了割込み信号を、シーケンサ30に出力する。
【0072】
また、図8(d)においては、データバッファ52の領域1〜領域12が、ブロック画像データIBL3−9〜ブロック画像データIBL3−20を書き込む記憶領域として決定された場合を表している。なお、入力部51は、データバッファ52の領域12へのブロック画像データIBL3−20の書き込みが完了したときに、入力完了割込み信号を、シーケンサ30に出力する。
【0073】
<データバッファからのデータ読み出しの例>
続いて、本適用例においてデータバッファ52に記憶されているブロック画像データを読み出す動作について説明する。図9は、本実施形態の画像処理モジュールA50に備えたデータバッファ52からブロック画像データを読み出す動作例を説明する図である。
【0074】
データバッファ52に記憶されているブロック画像データを読み出す際には、出力部53が、フィルタ処理部531による歪補正処理を行うために必要なブロック画像データがデータバッファ52内に記憶されているか否かを判断し、必要なブロック画像データが記憶されていると判断された場合に、データバッファ52の読み出しを行う。歪補正処理を行うために必要なブロック画像データがデータバッファ52内に記憶されているか否かの判断は、調停部54から出力される有効データ量情報に基づいて行われる。
【0075】
図9では、データバッファ52のそれぞれの記憶領域に記憶されている20ラインのブロック画像データを用いて歪み補正処理を行い、16ラインの画像処理データを出力する場合を示している。なお、図9においては、歪補正処理に関係するデータバッファ52の領域のみにブロック画像データの符号を示している。
【0076】
ここで、図9を参照して、データバッファ52に記憶されているブロック画像データを読み出して、歪補正処理後の画像処理データを生成する場合の動作例について説明する。まず、図9(a)を参照して、画像処理データOBL1−1を出力するために、ブロック画像データIBL1−1〜ブロック画像データIBL1−4が必要である場合について説明する。出力部53は、調停部54から出力される有効データ量情報が、データバッファ52の領域1〜領域4に記憶されているブロック画像データが有効なデータであるか否かを判断する。そして、データバッファ52の領域1〜領域4に記憶されているブロック画像データが有効なデータである場合、出力部53は、データバッファ52の領域1〜領域4に記憶されているブロック画像データを読み出し、フィルタ処理部531による歪補正処理後の画像処理データOBL1−1を出力する。
【0077】
また、出力部53は、次の画像処理データOBL1−2を出力するために必要としないデータバッファ52の記憶領域に対応するリード完了通知を、調停部54に出力する。調停部54は、リード完了通知が入力されたデータバッファ52の記憶領域を、空き領域とする。図9(a)においては、画像処理データOBL1−1を出力するために必要であったが、画像処理データOBL1−2を出力するためには必要でないブロック画像データIBL1−1を記憶しているデータバッファ52の領域1に対応するリード完了通知を出力し、領域1を空き領域とする場合を示している。この空き領域となったデータバッファ52の記憶領域には、入力部51によって、順次、次に入力されたブロック画像データが書き込まれる。
【0078】
以降、出力部53は、画像処理データOBL1−2〜画像処理データOBL1−16を出力するために必要なデータバッファ52の記憶領域を、調停部54から出力される有効データ量情報に基づいて順次判断し、フィルタ処理部531による歪補正処理後の画像処理データOBL1−2〜画像処理データOBL1−16を順次出力する。また、出力部53は、画像処理データを出力した後に、次の画像処理データを出力するために必要としないデータバッファ52の記憶領域に対応するリード完了通知を、調停部54に順次出力する。そして、調停部54は、入力されたリード完了通知に基づいて、データバッファ52の記憶領域を、順次空き領域とし、空き領域となったデータバッファ52の記憶領域には、入力部51によって、順次、次に入力されたブロック画像データが書き込まれる。
【0079】
図9(b)においては、画像処理データOBL1−2を出力するために、ブロック画像データIBL1−2〜ブロック画像データIBL1−5が必要である場合を示している。図9(c)においては、画像処理データOBL1−16を出力するために、ブロック画像データIBL1−16〜ブロック画像データIBL1−20が必要である場合を示している。図9(c)においてブロックライン1における画像処理データOBL1−16の出力が完了する。これにより、ブロック画像データIBL1−16〜ブロック画像データIBL1−20は、次のブロックライン2に対応した画像処理データOBL1−1を出力するために必要ではないため、出力部53は、データバッファ52の領域1〜領域4および領域16に対応するリード完了通知を、調停部54に出力する。なお、出力部53は、次の画像処理モジュールB60への画像処理データOBL1−16の出力が完了したときに、出力完了割込み信号を、シーケンサ30に出力する。
【0080】
そして、出力部53は、画像処理データOBL2−1を出力するために必要なブロック画像データIBL2−1〜ブロック画像データIBL2−5が、データバッファ52の領域5〜領域9に記憶されているか否かを、調停部54から出力される有効データ量情報に基づいて判断する。そして、データバッファ52の領域5〜領域9に記憶されているブロック画像データが有効なデータである場合、出力部53は、データバッファ52の領域5〜領域9に記憶されているブロック画像データを読み出し、フィルタ処理部531による歪補正処理後の画像処理データOBL2−1を出力する(図9(d)参照)。
【0081】
以降、出力部53は、画像処理データを出力するために必要なデータバッファ52の記憶領域を、調停部54から出力される有効データ量情報に基づいて順次判断し、データバッファ52の記憶領域に記憶されているブロック画像データが有効なデータである場合に、ブロック画像データを順次読み出しと、画像処理データの出力とを順行う。また、出力部53は、画像処理データを出力した後に、次の画像処理データを出力するために必要としないデータバッファ52の記憶領域に対応するリード完了通知を、調停部54に順次出力して、データバッファ52の記憶領域を順次空き領域とする。
【0082】
<動作例>
続いて、本適用例の画像処理モジュールA50における歪み補正処理の動作について説明する。図10および図11は、本実施形態の画像処理モジュールA50におけるパイプライン処理のタイミングおよび制御内容の一例を説明する図である。図10および図11においては、説明を容易にするため、図4〜図9を用いて説明した本適用例の画像処理モジュールA50の構成を簡略化した場合の例を示している。図10および図11の説明を行うための変更点は以下である。まず、1フレームの静止画像のデータを、2つのブロックラインに分割する。また、データバッファ52は8ライン分の記憶領域(領域1〜領域8)とする。また、入力部51には、12ラインのブロック画像データが入力され、出力部53からは、11ラインの画像処理データが出力されるものとする。なお、ブロック画像データおよび画像処理データには、ブロックライン、およびブロックライン内のライン数を区別するための符号を、上記と同様に付与して説明する。なお、画像処理モジュールA50のパイプライン処理のタイミングに関しては図10を参照し、このときのシーケンサ30による画像処理モジュールA50の制御内容に関しては図11を参照して説明を行う。
【0083】
画像処理装置1がDRAM20に記憶された1フレームの静止画像のデータの画像処理を開始すると、まず、シーケンサ30は、処理100を行う。処理100においては、図3で説明した処理100と同様に、シーケンサ30が、パイプラインを構成する全ての処理モジュールに対するパラメータや入出力データ数などのレジスタ設定を行い、全ての処理モジュールの動作状態の初期化(リセット)を行う。これにより、画像処理モジュールA50は、歪み補正処理を開始することができる状態となり、調停部54が出力するバッファ空き量情報は、データバッファ52の記憶領域が全て空き領域であることを表す情報に初期化され、有効データ量情報は、データバッファ52の全ての記憶領域に有効なデータが記憶されていないことを表す情報に初期化される。また、データバッファ領域決定部55が出力するライト領域情報に含まれるライト先頭バッファ領域と、リード領域情報に含まれるリード先頭バッファ領域とは、データバッファ52の領域1となる。また、入力部51は、入力DMAモジュール40に対してブロック画像データのデータ要求信号を出力する。なお、以下の説明においては、調停部54とデータバッファ領域決定部55とを合わせて、「共通部」ともいう。
【0084】
そして、シーケンサ30は、入力DMAモジュール40および出力DMAモジュール70に対するDMA開始トリガ信号を出力する。これにより、入力DMAモジュール40は、DMAによって、DRAM20からのブロック画像データIBL1−1を読み出し、読み出したブロック画像データIBL1−1を、画像処理モジュールA50に出力する(タイミングt1)。入力DMAモジュール40からブロック画像データIBL1−1が入力されると、入力部51は、入力されたブロック画像データIBL1−1をデータバッファ52の領域1に書き込む。また、入力部51は、ブロック画像データIBL1−1のデータバッファ52の領域1への書き込みが完了すると、ライト完了通知を調停部54に出力する。調停部54は、入力部51からライト完了通知が入力されると、領域1の状態を表すステータスを、「データあり」の状態に変更する(タイミングt2)。
【0085】
以降、入力DMAモジュール40からブロック画像データが入力される毎に、入力部51は、入力されたブロック画像データをデータバッファ52の対応する記憶領域に書き込み、対応するライト完了通知を調停部54に出力する。そして、調停部54は、ライト完了通知が入力されたデータバッファ52に対応する領域のステータスを、「データあり」の状態に変更していく。
【0086】
その後、調停部54は、歪補正処理後の画像処理データを生成するために必要なブロック画像データがデータバッファ52内に記憶されたときに、有効データ量情報をデータバッファ52内の記憶領域に有効なデータが記憶されていることを表す状態に変更する。図10では、画像処理データOBL1−1を出力するために、ブロック画像データIBL1−1〜ブロック画像データIBL1−3が必要であり、ブロック画像データIBL1−3が、データバッファ52の領域3に書き込まれたときに有効データ量情報を変更する場合を示している。出力部53は、調停部54からの有効データ量情報が入力されると、データバッファ52の領域1〜領域3から、ブロック画像データIBL1−1からブロック画像データIBL1−3を読み出し、フィルタ処理部531によって歪み補正処理を行って、画像処理データOBL1−1を出力する(タイミングt3)。
【0087】
また、出力部53は、画像処理データOBL1−1を出力すると、次の画像処理データOBL1−2を出力するためには必要でないブロック画像データIBL1−1を記憶しているデータバッファ52の領域1に対応するリード完了通知を調停部54に出力する。調停部54は、出力部53からリード完了通知が入力されると、ブロック画像データIBL1−1を記憶していたデータバッファ52の領域1のステータスを、「データなし」の状態、すなわち、空き領域の状態に変更する(タイミングt4)。
【0088】
以降、出力部53は、調停部54から入力される有効データ量情報に基づいて、データバッファ52の対応する記憶領域からブロック画像データを読み出し、フィルタ処理部531によって歪み補正処理を行った画像処理データを出力する。
【0089】
その後、図10のタイミングt5〜タイミングt6の期間は、画像処理データOBL1−3を出力するために必要なブロック画像データIBL1−3〜ブロック画像データIBL1−6がデータバッファ52の対応する記憶領域に書き込まれていないため、有効データ量情報が有効なデータが記憶されていないことを表す状態となっており、出力部53の処理が待たされている状態を示している。出力部53は、ブロック画像データIBL1−3〜ブロック画像データIBL1−6がデータバッファ52に書き込まれた後に、ブロック画像データIBL1−3〜ブロック画像データIBL1−6のデータバッファ52からの読み出しを再開し、フィルタ処理部531によって歪み補正処理を行った画像処理データOBL1−3を出力する。
【0090】
また、図10のタイミングt7は、データバッファ52の領域8に書き込むブロック画像データIBL1−8が入力DMAモジュール40から入力された後、ブロック画像データIBL1−9が入力されたタイミングである。このとき、調停部54におけるデータバッファ52の領域1のステータスは、「データなし」の状態であるため、入力部51は、引き続きブロック画像データIBL1−9をデータバッファ52の領域1に書き込む。
【0091】
その後、入力部51は、ブロックライン1の最後のブロック画像データIBL1−12を、データバッファ52の領域4への書き込みが完了すると、ライト完了通知を調停部54に出力するとともに、入力完了割込み信号をシーケンサ30に出力する(タイミングt8)。
【0092】
シーケンサ30は、画像処理モジュールA50から入力完了割込み信号が入力されると、処理200を行う。処理200においては、図3で説明した処理200と同様に、シーケンサ30が、画像処理モジュールA50の入力部51に対して、入力DMAモジュール40から入力されるブロックライン2のブロック画像データの入力データ数の設定を行い、入力部51側の動作の状態のリセットを行うための入力部リセット信号を出力する(タイミングt9)。これにより、画像処理モジュールA50は、ブロックライン2のブロック画像データの入力を開始することができる状態となり、入力部51は、入力DMAモジュール40に対してブロックライン2のブロック画像データのデータ要求信号を出力する。なお、共通部(調停部54およびデータバッファ領域決定部55)は、リセットされないため、入力部51は、入力DMAモジュール40から入力されたブロックライン2のブロック画像データをデータバッファ52の領域5から順次書き込みを行う。このとき、データバッファ領域決定部55が出力するライト領域情報に含まれるライト先頭バッファ領域は、データバッファ52の領域5となる。
【0093】
その後、図10のタイミングt10〜タイミングt11の期間は、画像処理データOBL1−11を出力するために、出力部53がデータバッファ52の領域8に記憶されているブロック画像データIBL1−8が使用されている、すなわち、出力部53によるブロック画像データIBL1−8の読み出しが完了していないため、入力部51によるデータバッファ52の領域8へのブロック画像データIBL2−4の書き込みが待たされている状態を示している。そして、出力部53は、画像処理データOBL1−11の出力が完了すると、リード完了通知を調停部54に出力するとともに、出力完了割込み信号をシーケンサ30に出力する(タイミングt11)。入力部51は、出力部53によるブロック画像データIBL1−8の読み出しが完了した後に、データバッファ52の領域8へのブロック画像データIBL2−4の書き込みを再開する。
【0094】
シーケンサ30は、画像処理モジュールA50から出力完了割込み信号が入力されると、処理300を行う。処理300においては、図3で説明した処理300と同様に、シーケンサ30が、画像処理モジュールA50の出力部53に対して、ブロックライン2のブロック画像データに対して歪み補正処理を行うために必要なパラメータや、画像処理データの出力データ数の設定を行い、出力部53側の動作の状態のリセットを行うための出力部リセット信号を出力する(タイミングt12)。これにより、画像処理モジュールA50は、ブロックライン2のブロック画像データに対する歪み補正処理を開始できる状態となり、出力部53は、データバッファ52に記憶しているブロックライン2のブロック画像データの読み出しと、画像処理データの出力とを開始する。なお、共通部(調停部54およびデータバッファ領域決定部55)は、リセットされないため、出力部53は、データバッファ52の領域5からブロックライン2のブロック画像データの読み出しを順次行う。このとき、データバッファ領域決定部55が出力するリード領域情報に含まれるリード先頭バッファ領域は、データバッファ52の領域5となる。
【0095】
その後、入力部51は、ブロックライン2の最後のブロック画像データIBL2−12を、データバッファ52の領域8への書き込みが完了すると、ライト完了通知を調停部54に出力するとともに、入力完了割込み信号をシーケンサ30に出力する(タイミングt13)。なお、タイミングt13においてシーケンサ30に入力完了割込み信号が入力されるが、シーケンサ30は、画像処理モジュールA50に対して何も行わない。これは、タイミングt13において入力された入力完了割込み信号は、全てのブロックラインのブロック画像データが画像処理モジュールA50に入力されたことを表しているのみであり、画像処理モジュールA50に次のブロックラインに対する設定をする必要がないからである。
【0096】
その後、出力部53は、画像処理データOBL2−11の出力が完了すると、リード完了通知を調停部54に出力するとともに、出力完了割込み信号をシーケンサ30に出力する(タイミングt14)。
【0097】
シーケンサ30は、画像処理モジュールA50から出力完了割込み信号が入力されると、処理600を行う。処理600においてシーケンサ30は、画像処理モジュールA50の全体をリセットし、画像処理モジュールA50における処理を完了する。より具体的には、シーケンサは、共通リセット信号、入力部リセット信号、および出力部リセット信号を画像処理モジュールA50に出力して、画像処理モジュールA50の処理を完了する。
【0098】
上記に述べたように、本適用例の画像処理モジュールA50では、入力DMAモジュール40からのブロック画像データの入力処理が完了したときの入力完了割込み信号と、歪み補正処理を行った画像処理データの出力処理が完了ときの出力完了割込み信号とを、それぞれシーケンサ30に出力することができる。また、データバッファ52の使用状態に応じて、ブロック画像データのデータバッファ52への書き込み制御、およびデータバッファ52からのブロック画像データの読み出し制御を調停することができる。
【0099】
このようにして、本適用例の画像処理モジュールA50では、前の画像処理データの出力処理を実行している最中に、次のブロック画像データの入力処理を開始することができる。図12は、従来の処理モジュールにおけるパイプライン処理と、本実施形態の処理モジュールにおけるパイプライン処理とを比較した図である。なお、図12(a)は、従来の処理モジュールにおけるパイプライン処理を示し、図12(b)は、本実施形態の処理モジュールにおけるパイプライン処理を示している。従来の処理モジュールでは、図12(a)に示したように、前に入力されたデータに対応した出力が完了してから次に入力されたデータに対応した出力が開始されるまでの時間が、ロス時間となっている。これに対して、本適用例の画像処理モジュールA50(本実施形態の処理モジュール)では、図12(b)に示したように、画像処理モジュールA50における入出力の遅延時間は変わらないが、画像処理データの出力処理が完了する前に、次のブロック画像データの入力処理を開始することができるため、前の画像処理データの出力処理の完了から次の画像処理データの出力処理の開始までのロス時間を、従来の処理モジュールよりも低減することができる。これにより、特に、ブロック画像データが入力されてから画像処理データが出力されるまでの入出力の遅延時間が長い処理モジュールにおいて、パイプライン処理の効率を向上させることができる。
【0100】
<データバッファのバッファサイズ決定方法の例>
なお、図10に示したパイプライン処理のタイミングにおいては、出力部53の処理が待たされている期間(タイミングt5〜タイミングt6)、および入力部51によるデータバッファ52へのブロック画像データの書き込みが待たされている期間(タイミングt10〜タイミングt11)が存在している。このように、処理が待たされる時間も処理モジュールの入出力の遅延時間に影響し、パイプライン処理におけるロス時間となってしまう。このような処理モジュール内の処理が待たされることによるロス時間は、データバッファ52のバッファサイズを最適化することによって、低減することもできる。
【0101】
ここで、本適用例におけるデータバッファ52のバッファサイズを決定する方法について説明する。図13は、本実施形態の画像処理モジュールA50に備えるデータバッファ52の記憶領域の数(バッファサイズ)を決定する方法を説明する図である。本適用例の画像処理モジュールA50においては、歪量が最も大きいブロックラインの最後のラインの画像処理データを出力するために必要なブロック画像データの数と、その次のブロックラインの最初のラインの画像処理データを出力するために必要なブロック画像データの数とに基づいて決定することができる。
【0102】
例えば、ブロックライン1の最後のラインの画像処理データ(例えば、図9(c)に示した画像処理データOBL1−16)を出力するために必要なブロック画像データの数が図13に示した範囲(糊代)Mであり、次のブロックライン2の最初のラインの画像処理データ(例えば、図9(d)に示した画像処理データOBL2−1)を出力するために必要なブロック画像データの数が図13に示した範囲(糊代)Nであると仮定する。この場合において、出力部53側から考えると、画像処理データOBL1−16を出力した直後に画像処理データOBL2−1を出力することができれば、画像処理モジュールA50内の処理が待たされる時間、すなわちロス時間を最小にすることができる。すなわち、画像処理データOBL1−16の歪み補正処理を行っている間に、画像処理データOBL2−1を出力するために必要なブロック画像データがデータバッファ52に書き込まれていれば、ロス時間を最小にすることができる。これは、データバッファ52に、画像処理データOBL1−16を出力するために使用する範囲Mのブロック画像データと、画像処理データOBL2−1を出力するために使用する範囲Nのブロック画像データとが、画像処理データOBL1−16の歪み補正処理を行っている間、格納されている必要があることを表している。このため、範囲Mと範囲Nとを合計した数を、データバッファ52のバッファサイズに決定する。
【0103】
このようにして、フィルタ処理部531によって行うフィルタ処理に必要なブロック画像データの数に応じてデータバッファ52のバッファサイズを決定することにより、最適な回路規模で、ロス時間を低減することができる。なお、本適用例では、歪み補正処理に必要なブロック画像データの数に基づいてバッファサイズを決定する方法を説明したが、バッファサイズの決定方法は、フィルタ処理部531が行うフィルタ処理の種類によって異なる。例えば、フィルタ処理部531によるフィルタ処理が、ローパスフィルタ処理であれば、フィルタのタップ数(フィルタサイズ)に応じた必要なデータ数に基づいてバッファサイズを決定する。
【0104】
上記に述べたとおり、本発明を実施するための形態によれば、パイプラインを構成するそれぞれの処理モジュールの内、入出力の遅延時間に起因する時間的なロスが大きい処理モジュールにおけるリセットの制御単位を、当該処理モジュールの入力側と出力側とで分離する。そして、処理モジュールの入力側または出力側の処理が完了する毎に、処理が完了したことを表す信号をそれぞれ出力するように構成する。より具体的には、例えば、画像処理モジュールA50においては、入力部51側と出力部53側とに分離し、入力完了割込み信号と出力完了割込み信号とを、それぞれ出力する。これにより、処理モジュールの入力側または出力側のいずれか一方の処理が完了したときに、他方の処理が完了していなくとも、次の処理を開始させることができ、当該処理モジュールにおける入出力の遅延時間に起因するロス時間を短くすることができる。これにより、パイプライン処理におけるロス時間を低減することができる。
【0105】
なお、本実施形態においては、歪み補正処理を行う画像処理モジュールに適用した場合について説明したが、適用することができる画像処理モジュールは、本発明を実施するための形態に限定されるものではない。例えば、ローパスフィルタ処理、ノイズ低減フィルタ処理、画像リサイズ処理など、大きなフィルタ処理を行う様々な画像処理モジュールに適用することができる。
【0106】
また、本実施形態においては、入力DMAモジュール40、画像処理モジュールA50、画像処理モジュールB60、および出力DMAモジュール70によってパイプラインを構成した場合の一例について説明したが、パイプラインを構成する処理モジュールは、本発明を実施するための形態に限定されるものではない。
【0107】
なお、特許文献1には、ロス時間を短縮するために、2つのバッファを用いる方法も開示されている(図17(a)参照)。2つのバッファを使用する場合には、図17(b)に示したように、一方のバッファ(例えば、バッファA)に画像データを書き込んでいる(Writeしている)ときには、他方のバッファ(例えば、バッファB)に書き込まれている画像データを読み出して(Readして)出力するように、切り替え制御を行っている。しかしながら、フィルタ処理を行う処理モジュールにおいては、フィルタ処理を行うために大容量のバッファを使用することが考えられるため、1つの処理モジュール内に大容量のバッファを2つ備えると、処理モジュールの回路規模が大きくなってしまう。本実施形態においては、バッファを仮想的にリング状につなげることによって、1つのバッファのみでフィルタ処理を行うことができる。このため、従来の2つのバッファを用いた処理モジュールよりも、小さい回路規模でフィルタ処理を行う処理モジュールを実現することができる。
【0108】
以上、本発明の実施形態について、図面を参照して説明してきたが、具体的な構成はこの実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲においての種々の変更も含まれる。
【符号の説明】
【0109】
1・・・画像処理装置
10・・・DMAバス
20・・・DRAM
30・・・シーケンサ(画像処理装置)
40・・・入力DMAモジュール
50・・・画像処理モジュールA(データ処理装置)
51・・・入力部(データ書き込み制御部)
52・・・データバッファ(バッファ部)
53・・・出力部(データ読み出し制御部)
531・・・フィルタ処理部(データ読み出し制御部、フィルタ処理部)
54・・・調停部(バッファ領域決定部)
55・・・データバッファ領域決定部(バッファ領域決定部)
60・・・画像処理モジュールB(データ処理装置)
70・・・出力DMAモジュール
【特許請求の範囲】
【請求項1】
データを記憶するバッファ部と、
入力データを、前記バッファ部に書き込むデータ書き込み制御部と、
前記バッファ部に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データを出力するデータ読み出し制御部と、
前記データ書き込み制御部がデータを書き込む前記バッファ部内の記憶領域、および前記データ読み出し制御部がデータを読み出す前記バッファ部内の記憶領域を決定するバッファ領域決定部と、
を備え、
前記データ書き込み制御部は、
前記バッファ領域決定部によって決定された前記記憶領域に前記入力データを書き込み、前記入力データの書き込みが完了したときに、データの書き込みが完了したことを表すデータ書き込み完了信号を出力し、
前記データ読み出し制御部は、
前記バッファ領域決定部によって決定された前記記憶領域に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データの出力が完了したときに、データの読み出しが完了したことを表すデータ読み出し完了信号を出力する、
ことを特徴とするデータ処理装置。
【請求項2】
前記データ書き込み制御部は、
前記バッファ領域決定部によって決定された前記バッファ部内の書き込み可能領域に前記入力データを書き込み、予め定められた数の前記入力データの前記バッファ部への書き込みが完了したときに、データの書き込みが完了したと判定し、
前記データ読み出し制御部は、
前記バッファ領域決定部によって決定された前記バッファ部内の読み出し可能領域からデータを読み出し、予め定められた数の前記バッファ部からの読み出しが完了し、該読み出したデータに基づいて生成した出力データの出力が完了したときに、データの読み出しが完了したと判定し、
前記バッファ領域決定部は、
前記データ書き込み制御部による前記入力データの書き込み状態、および前記データ読み出し制御部によるデータの読み出し状態に応じて、前記バッファ部内の前記書き込み可能領域および前記読み出し可能領域を変更する、
ことを特徴とする請求項1に記載のデータ処理装置。
【請求項3】
前記バッファ領域決定部は、
前記データ書き込み制御部によってデータが書き込まれた前記バッファ部内の前記記憶領域を、有効なデータが記憶され、該記憶されたデータを読み出しことができる前記読み出し可能領域に決定し、
前記データ読み出し制御部によってデータが読み出された前記バッファ部内の前記記憶領域を、空き領域であり、前記入力データを書き込むことができる前記書き込み可能領域に決定する、
ことを特徴とする請求項2に記載のデータ処理装置。
【請求項4】
前記データ読み出し制御部は、
前記読み出したデータに基づいてフィルタ処理した出力データを生成するフィルタ処理部、
を備え、
前記バッファ部内の前記記憶領域の記憶容量は、
前記フィルタ処理部がフィルタ処理を行う際に必要とするデータ数に基づいて決定する、
ことを特徴とする請求項3に記載のデータ処理装置。
【請求項5】
前記記憶容量は、
前記フィルタ処理部がフィルタ処理を行う際に必要とするデータ数の2倍のデータ数の前記入力データを記憶することができる容量である、
ことを特徴とする請求項4に記載のデータ処理装置。
【請求項6】
データを記憶するバッファ部と、入力データを、前記バッファ部に書き込むデータ書き込み制御部と、前記バッファ部に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データを出力するデータ読み出し制御部と、前記データ書き込み制御部がデータを書き込む前記バッファ部内の記憶領域、および前記データ読み出し制御部がデータを読み出す前記バッファ部内の記憶領域を決定するバッファ領域決定部と、を有し、前記データ書き込み制御部が前記バッファ領域決定部によって決定された前記記憶領域に前記入力データを書き込み、前記入力データの書き込みが完了したときに、データの書き込みが完了したことを表すデータ書き込み完了信号と、前記データ読み出し制御部が前記バッファ領域決定部によって決定された前記記憶領域に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データの出力が完了したときに、データの読み出しが完了したことを表すデータ読み出し完了信号と、をそれぞれ出力するデータ処理装置、
を備え、
前記データ書き込み完了信号が出力された後に、前記データ書き込み制御部による画像データの書き込みに係る設定を行い、
前記データ読み出し完了信号が出力された後に、前記データ読み出し制御部による画像データの読み出しに係る設定を行う、
ことを特徴とする画像処理装置。
【請求項1】
データを記憶するバッファ部と、
入力データを、前記バッファ部に書き込むデータ書き込み制御部と、
前記バッファ部に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データを出力するデータ読み出し制御部と、
前記データ書き込み制御部がデータを書き込む前記バッファ部内の記憶領域、および前記データ読み出し制御部がデータを読み出す前記バッファ部内の記憶領域を決定するバッファ領域決定部と、
を備え、
前記データ書き込み制御部は、
前記バッファ領域決定部によって決定された前記記憶領域に前記入力データを書き込み、前記入力データの書き込みが完了したときに、データの書き込みが完了したことを表すデータ書き込み完了信号を出力し、
前記データ読み出し制御部は、
前記バッファ領域決定部によって決定された前記記憶領域に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データの出力が完了したときに、データの読み出しが完了したことを表すデータ読み出し完了信号を出力する、
ことを特徴とするデータ処理装置。
【請求項2】
前記データ書き込み制御部は、
前記バッファ領域決定部によって決定された前記バッファ部内の書き込み可能領域に前記入力データを書き込み、予め定められた数の前記入力データの前記バッファ部への書き込みが完了したときに、データの書き込みが完了したと判定し、
前記データ読み出し制御部は、
前記バッファ領域決定部によって決定された前記バッファ部内の読み出し可能領域からデータを読み出し、予め定められた数の前記バッファ部からの読み出しが完了し、該読み出したデータに基づいて生成した出力データの出力が完了したときに、データの読み出しが完了したと判定し、
前記バッファ領域決定部は、
前記データ書き込み制御部による前記入力データの書き込み状態、および前記データ読み出し制御部によるデータの読み出し状態に応じて、前記バッファ部内の前記書き込み可能領域および前記読み出し可能領域を変更する、
ことを特徴とする請求項1に記載のデータ処理装置。
【請求項3】
前記バッファ領域決定部は、
前記データ書き込み制御部によってデータが書き込まれた前記バッファ部内の前記記憶領域を、有効なデータが記憶され、該記憶されたデータを読み出しことができる前記読み出し可能領域に決定し、
前記データ読み出し制御部によってデータが読み出された前記バッファ部内の前記記憶領域を、空き領域であり、前記入力データを書き込むことができる前記書き込み可能領域に決定する、
ことを特徴とする請求項2に記載のデータ処理装置。
【請求項4】
前記データ読み出し制御部は、
前記読み出したデータに基づいてフィルタ処理した出力データを生成するフィルタ処理部、
を備え、
前記バッファ部内の前記記憶領域の記憶容量は、
前記フィルタ処理部がフィルタ処理を行う際に必要とするデータ数に基づいて決定する、
ことを特徴とする請求項3に記載のデータ処理装置。
【請求項5】
前記記憶容量は、
前記フィルタ処理部がフィルタ処理を行う際に必要とするデータ数の2倍のデータ数の前記入力データを記憶することができる容量である、
ことを特徴とする請求項4に記載のデータ処理装置。
【請求項6】
データを記憶するバッファ部と、入力データを、前記バッファ部に書き込むデータ書き込み制御部と、前記バッファ部に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データを出力するデータ読み出し制御部と、前記データ書き込み制御部がデータを書き込む前記バッファ部内の記憶領域、および前記データ読み出し制御部がデータを読み出す前記バッファ部内の記憶領域を決定するバッファ領域決定部と、を有し、前記データ書き込み制御部が前記バッファ領域決定部によって決定された前記記憶領域に前記入力データを書き込み、前記入力データの書き込みが完了したときに、データの書き込みが完了したことを表すデータ書き込み完了信号と、前記データ読み出し制御部が前記バッファ領域決定部によって決定された前記記憶領域に記憶されているデータを読み出し、該読み出したデータに基づいて生成した出力データの出力が完了したときに、データの読み出しが完了したことを表すデータ読み出し完了信号と、をそれぞれ出力するデータ処理装置、
を備え、
前記データ書き込み完了信号が出力された後に、前記データ書き込み制御部による画像データの書き込みに係る設定を行い、
前記データ読み出し完了信号が出力された後に、前記データ読み出し制御部による画像データの読み出しに係る設定を行う、
ことを特徴とする画像処理装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2012−98883(P2012−98883A)
【公開日】平成24年5月24日(2012.5.24)
【国際特許分類】
【出願番号】特願2010−245478(P2010−245478)
【出願日】平成22年11月1日(2010.11.1)
【出願人】(000000376)オリンパス株式会社 (11,466)
【Fターム(参考)】
【公開日】平成24年5月24日(2012.5.24)
【国際特許分類】
【出願日】平成22年11月1日(2010.11.1)
【出願人】(000000376)オリンパス株式会社 (11,466)
【Fターム(参考)】
[ Back to top ]