説明

画像処理装置、画像処理方法、及びプログラム

【課題】キャッシュ技術を用いて画像変形処理を行う際に、処理速度を向上させる。
【解決手段】入力画像を入力する。入力画像をブロック単位で格納する。領域を出力画像内に設定し、設定した領域内のそれぞれの画素について、画素に対応する入力画像内の画素を含むブロックを特定した場合に、特定されたブロックのデータ量の合計がキャッシュメモリの容量以下となるように、部分領域の大きさを決定する。出力画像の画像領域を複数の部分領域に分割する。複数の部分領域のそれぞれについて順に部分画像を生成する。部分画像で構成される出力画像を出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は画像処理技術に関し、特に、画像変形処理における処理制御技術に関する。
【背景技術】
【0002】
拡大縮小処理、アフィン変形処理、及びキーストーン補正処理などの画像変形処理では、出力画像の各座標についての画素データは、入力画像の対応する座標についての画素データから求められる。具体的には、入力画像データをフレームメモリに格納し、出力画像の各座標に対応する入力画像の画素データを読み出す。このとき、入力画像の画素データの読み出しは、ランダムアクセスによって行われることが多い。メモリへのランダムアクセスを高速化するための一般的な技術として、キャッシュ技術がある(例えば特許文献1)。キャッシュ技術によれば、外部メモリから、高速にアクセスできる内部メモリ(キャッシュ)へとデータが複製される。キャッシュに必要なデータが存在する場合には、時間のかかる外部メモリへのアクセスが必要ない。このため、キャッシュを用いることによりデータへのアクセス速度が向上する。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平10−51685号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
キャッシュ技術を用いる際には、キャッシュメモリに必要なデータが存在する確率(キャッシュヒット率)を高めることが、データアクセス速度向上のために必要である。図1(A)に、キャッシュヒット率を高めるための技術の1つを示す。図1(A)の例では、入力画像101に対して画像変形処理を行うことにより、変形画像103が得られる。102は、外部メモリに格納された入力画像101を示す。
【0005】
図1(A)の例で行われている画像変形処理は、縦方向への縮小処理である。ここで、変形画像の画像領域が複数のタイルに分割される。そして、それぞれのタイルについて順番にタイル内の画像が求められる。例えばタイル105内の画像を求める場合には、領域104内の画像のみが参照されるため、領域104内の画像データにのみアクセスが行われる。このように、小さい領域内の画像データに対して集中的にアクセスを行う(局所性を高める)ことにより、キャッシュヒット率を高めることができる。
【0006】
しかしながら、タイルが大きすぎると、タイルに対応する入力画像データのデータ量が、キャッシュメモリの容量を超えてしまうことがある。例えば図4の場合、タイル404には入力画像405の領域408が対応する。しかしながら、キャッシュメモリの容量は領域409の画像データ量と同等であり、キャッシュメモリは領域408内の画像データを全て格納できない。すなわち、外部メモリからキャッシュに複製したデータ(データAと呼ぶ)を次に再利用するまでに、このデータAが破棄される可能性がある。このような場合、キャッシュのヒット率は著しく低下し、処理時間も著しく長くなってしまう。特に動画に対して画像変形処理を行う場合、画像表示処理に画像変形処理が追いつけなる可能性がある。この場合、コマ落ちなどの画像劣化が発生する可能性がある。
【0007】
本発明は、キャッシュ技術を用いて画像変形処理を行う際に、処理速度を向上させることを目的とする。
【課題を解決するための手段】
【0008】
本発明の目的を達成するために、例えば、本発明の画像処理装置は以下の構成を備える。すなわち、
入力画像に変形処理を行って出力画像を生成する画像処理装置であって、
前記出力画像の各画素の画素値は、前記入力画像の対応する画素の画素値から求められ、
前記画像処理装置は、
入力画像を入力する入力手段と、
前記入力画像をブロック単位で格納する格納手段と、
部分領域の大きさを決定する決定手段であって、前記大きさを有する領域を前記出力画像の画像領域内に設定し、前記設定した領域内のそれぞれの画素について、該画素に対応する前記入力画像内の画素を含む前記ブロックを特定した場合に、前記特定されたブロックのデータ量の合計がキャッシュメモリの容量以下となるように、前記大きさを決定する決定手段と、
前記決定手段が決定した大きさに従って前記出力画像の画像領域を複数の前記部分領域に分割する分割手段と、
前記複数の部分領域のそれぞれについて順に部分画像を生成する変形手段であって、
前記部分領域内の画素を着目画素として順次選択する選択手段と、
前記着目画素に対応する前記入力画像内の画素を含むブロックがキャッシュメモリに格納されている否かを判定し、格納されている場合には当該ブロックを前記キャッシュメモリから読み出し、格納されていない場合には当該ブロックを前記格納手段から読み出しかつ当該読み出したブロックを前記キャッシュメモリに格納する制御手段と、
前記制御手段が読み出したブロックから、前記着目画素に対応する画素値を、前記部分画像における前記着目画素の画素値として取得する取得手段と、を備える変形手段と、
前記変形手段が生成した部分画像で構成される前記出力画像を出力する出力手段と、
を備えることを特徴とする。
【発明の効果】
【0009】
キャッシュ技術を用いて画像変形処理を行う際に、処理速度を向上させることができる。
【図面の簡単な説明】
【0010】
【図1】従来技術を示す図。
【図2】実施例1に係るステップS1010の詳細なフローチャート。
【図3】実施例1に係るタイル分割方法の一例を示す図。
【図4】従来技術における課題を示す図。
【図5】実施例1に係る画像処理装置500の構成例を示すブロック図。
【図6】画像変形処理の説明図。
【図7】本実施例に係るタイルの大きさを決定する処理の説明図。
【図8】実施例2に係るタイル分割方法の一例を示す図。
【図9】実施例3に係るコンピュータの構成例を示すブロック図。
【図10】実施例1に係る処理のフローチャート。
【発明を実施するための形態】
【0011】
以下、添付の図面を参照して、本発明をその好適な実施形態に基づいて詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
【実施例1】
【0012】
本実施例によれば、変形画像の画像領域を複数の部分領域(タイル)に分割し、それぞれのタイル内の変形画像データを求める場合に、適切なタイルの大きさを決定することができる。すなわち、タイルに対応する入力画像データをキャッシュメモリに格納できるように、タイルの大きさが決定される。こうして、キャッシュヒット率を向上させることができ、画像変形処理の速度を向上させることができる。さらに本実施例によれば、タイルの大きさを小さくしすぎることも防止することができる。タイルが小さすぎる場合、処理順序は例えば通常のラスタスキャンに近くなってしまうため、かえってキャッシュヒット率は低くなってしまう可能性がある。
【0013】
図5は実施例1に係る画像処理装置の構成を表す。画像処理装置500は入力画像520を、変形パラメータ513に基づき変形して変形画像526(出力画像)として出力するための装置である。本実施例における画像変形には、拡大縮小処理、アフィン変形処理、及びキーストーン補正処理などが含まれる。
【0014】
画像処理装置500について、まず大まかな処理の流れを説明する。本実施例において、画像処理装置500が出力する変形画像526のそれぞれの画素は、画像処理装置500に入力される入力画像520の画素に対応付けられている。この対応関係は、変形パラメータ513として格納されてメモリ(不図示)に格納されている。
【0015】
例えば座標変換部509は、変形パラメータ513に基づいて、変形画像526のそれぞれの画素の座標を、対応する入力画像520の画素の座標に変換することができる。本明細書では、変形画像526の画素の座標を変形後座標529と呼ぶ。また、変形後座標529を持つ変形画像526の画素に対応する、入力画像520の画素の座標を、変形前座標528と呼ぶ。
【0016】
カウンタ508は、変形画像526の各画素を順次走査する。ここで、カウンタ508の走査方法について説明する。図3に示すように、本実施例において変形画像526は、複数の領域(タイル304)に分割される。各タイルの大きさは、後述するようにタイル決定部510が決定する。カウンタ508は、分割された各タイルのそれぞれを、順に走査する。
【0017】
カウンタ508は、走査されている画素の変形後座標529に対応する変形前座標528を、座標変換部509から取得する。そしてカウンタ508は出力部550に、走査されている画素の変形後座標529と、変形後座標529に対応する変形前座標528とを、出力部550に送信する。
【0018】
出力部550は、変形前座標528に従って、フレームメモリ501における画像のデータ(イメージデータ)のアドレスを示すリードアドレス情報527を算出する。すなわち、変形前座標528を持つ画素を含むイメージデータのアドレスを、出力部550は算出する。そして出力部550は、算出したリードアドレス情報527をキャッシュ制御部506に送信する。フレームメモリ501には、複数のイメージデータに分割された入力画像520が格納されている。DMAC504は、イメージデータ単位で、フレームメモリ501に格納された入力画像520を読み出すことができる。
【0019】
キャッシュ制御部506は、リードアドレス情報527の示すイメージデータが、キャッシュメモリ507に格納されているか否かを判定する。リードアドレス情報527の示すイメージデータがキャッシュメモリ507に格納されている場合、キャッシュ制御部506はリードアドレス情報527の示すイメージデータ525をキャッシュメモリ507から取得する。リードアドレス情報527の示すイメージデータがキャッシュメモリ507に格納されていない場合、キャッシュ制御部506はリードアドレス情報527の示すイメージデータ524を、DMAC504を介してフレームメモリ501から取得する。キャッシュメモリ507のデータ読み出し速度はフレームメモリ501のデータ読み出し速度よりも高速である。キャッシュ制御部は、読み出したイメージデータ524,525を、出力部550へと出力する。
【0020】
出力部550は、変形前座標528に対応する画素値をイメージデータ524,525から取得し(変形手段)、変形画像526の変形後座標529における画素値として、メモリ560に出力する(出力手段)。このように、変形画像526の各画素の画素値を出力部550が出力することにより、メモリ560内に変形画像526が生成される。
【0021】
次に、画像処理装置500が行う動作について、図10のフローチャートを参照して詳細に説明する。ステップS1005においてメモリ格納部505は入力画像520を入力し(入力手段)、フレームメモリ501に入力画像520を格納する(格納手段)。具体的には、メモリ格納部505は入力画像520をピクセル単位で順次取得する。メモリ格納部505は、ピクセル単位で入力された入力画像520を一旦バッファする。そしてメモリ格納部505は、入力画像520を複数のイメージデータ521に分割し、それぞれのイメージデータ521をDMAC503に出力する。イメージデータ521とは、上述のようにメモリアクセスのためのデータ単位である。すなわちメモリ格納部505は、入力画像520をブロック単位(イメージデータ単位)で格納する。
【0022】
入力画像520とイメージデータ521との関係について、図7を用いて説明する。図7(B)は入力画像520の例である。また、図7(A)は複数のイメージデータに分割された入力画像520の例である。図7の例では1つのイメージデータは縦1画素×横6画素を有するが、イメージデータの大きさは異なっていてもよい。
【0023】
またメモリ格納部505は、DMAC503に対してDMAC制御情報522を出力する。DMAC制御情報522は、イメージデータ521をフレームメモリ501のどの領域に配置するかを指定するためのアドレス情報を含む。DMAC503は、Bus502を介して、フレームメモリ501のDMAC制御情報522で指定されるアドレスに、入力されたイメージデータ521を書き込む。
【0024】
ステップS1010でタイル決定部510は、タイルの大きさを示すタイル高情報532及びタイル幅情報533を生成する(決定手段)。本実施例においては、1つの入力画像520を処理する際には、1組のタイル高情報532及びタイル幅情報533のみが用いられるものとする。ステップS1010のこの処理については後述する。
【0025】
ステップS1015でカウンタ508は、タイル高情報532及びタイル幅情報533に従って、変形画像526の画像領域を複数のタイルに分割する(分割手段)。例えばカウンタ508は、変形画像526の画像領域を、タイル高情報532が示す高さ及びタイル幅情報533が示す幅を持つ複数の矩形領域に分割することができる。もっとも、画素領域の周辺部において、タイルの大きさは、タイル高情報532及びタイル幅情報533が示す大きさより小さくてもよい。
【0026】
ステップS1020でカウンタ508は、タイルのうち1つを選択する。選択は任意の方法で行うことができる。例えばカウンタ508は、ラスタ順にタイルを選択してもよい。
【0027】
ステップS1025でカウンタ508は、選択されたタイルに含まれる画素(部分領域内の画素、着目画素)を1つ選択する(選択手段)。選択は任意の方法で行うことができる。例えばカウンタ508は、ラスタ順に画素を順次選択してもよい。以降で、ステップS1025で選択された画素の座標を、変形画像526の変形後座標529と呼ぶ。
【0028】
ステップS1030でカウンタ508は、変形後座標529に対応する、入力画像520の座標である、変形前座標528を取得する。以下に、この処理について詳しく説明する。本実施例において変形前座標528のそれぞれは、1つの変形後座標529と対応している。変形後座標529と変形前座標528の関係は、変形パラメータ513で指定されている。そして、変形画像526の変形後座標529の画素値は、入力画像520の対応する変形前座標528の画素値から求められる。カウンタ508は、変形後座標529から変形前座標528への変換を、座標変換部509に行わせる。
【0029】
座標変換部509の処理について、具体的な一例を用いて説明する。本実施例においては画像処理装置500で行う変形処理は、拡大縮小、回転、及びシフトのうちの少なくとも1つを含むアフィン変形である。この場合、変形後座標529から変形前座標528への変換は、以下の式に従って行うことができる。
【数1】

上式において、xsrc,ysrcは変形前座標528であり、xdst,ydstは変形後座標529である。上式のように、変形パラメータ513はDst2Src[0][0]〜Dst2Src[1][2]の6つの係数で表現される。
【0030】
ステップS1035で出力部550は、カウンタ508から変形前座標528及び変形後座標529を取得する。そして出力部550は、変形前座標528に対応するイメージデータのアドレスを計算し、算出されたアドレスを含むリードアドレス情報527を生成する。出力部550はさらに、リードアドレス情報527をキャッシュ制御部506に出力する。変形前座標528とイメージデータのアドレスとの関係は、出力部550が予め知っていてもよい。代わりに出力部550は、変形前座標528とイメージデータのアドレスとの関係を、例えばDMAC504のようなメモリ制御部に問い合わせてもよい。
【0031】
ステップS1040でキャッシュ制御部506は、リードアドレス情報527が示すイメージデータが、キャッシュメモリ507に格納されているか否かを判定する(制御手段)。格納されている場合、処理はステップS1045に進む。格納されていない場合、処理はステップS1050に進む。
【0032】
ステップS1045でキャッシュ制御部506は、キャッシュメモリ507から、リードアドレス情報527が示すイメージデータ525を取得する。
【0033】
ステップS1050でキャッシュ制御部506は、フレームメモリ501から、リードアドレス情報527が示すイメージデータ524を取得する。具体的にはキャッシュ制御部506は、DMAC504を介してフレームメモリ501からイメージデータ524取得するために、DMAC504に対してDMAC制御情報523を出力する。DMAC504は、入力されたDMAC制御情報523に従って、フレームメモリ501から、リードアドレス情報527が示すイメージデータ524を取得する。ステップS1055でキャッシュ制御部506は、DMAC504を介して取得したイメージデータ524を、キャッシュメモリ507に格納する。例えばキャッシュ制御部506は、イメージデータ524をリードアドレス情報527と関連づけて、キャッシュメモリ507に格納することができる。
【0034】
ステップS1060で出力部550は、イメージデータ524,525から変形前座標528に対応する画素値を取得する。そして出力部550は、変形後座標529における画素値として、取得した画素値をメモリ560に出力する(出力手段)。
【0035】
ステップS1065でカウンタ508は、ステップS1025で、ステップS1020で選択したタイル内の全ての画素を選択しているか否かを判定する。全ての画素を選択している場合、処理はステップS1065に進む。全ての画素を選択していない場合、処理はステップS1025に戻る。ステップS1025〜ステップS1065の処理の繰り返しによって、ステップS1020で選択したタイル内の変形画像(部分画像)が生成される。
【0036】
ステップS1070でカウンタ508は、ステップS1020で、変形画像526の全てのタイルが選択されているか否かを判定する。全てのタイルを選択している場合、処理は終了する。全ての画素を選択していない場合、処理はステップS1020に戻る。ステップS1020〜ステップS1070の処理の繰り返しによって、それぞれのタイルによって構成される変形画像526が生成される。
【0037】
次に、ステップS1010の処理について、以下に詳しく説明する。まず、ステップS1010の概略を説明する。ステップS1010においてタイル決定部510は、タイルのタイル幅Sw及びタイル高Shを決定する。図6(C)にタイル幅Sw及びタイル高Shを持つタイル630を示す。図6(C)に示す変形画像内のタイル630は、図6(B)に示す入力画像内の領域620に対応する。すなわち、領域620内の画像を変形処理することにより、タイル630内の画像が得られる。
【0038】
また上述のように、フレームメモリ501及びキャッシュメモリ507において、入力画像は複数のイメージデータに分割されている。したがって、タイル630内の画像を生成するためには、図6(A)に示すように、領域620内の画像を全て含むイメージデータ群610を参照することになる。タイル630内の画像を生成する際には、イメージデータ群610を繰り返し参照する可能性が高いため、イメージデータ群610をキャッシュすることにより、タイル630内の画像を高速に生成することができる。
【0039】
ところが、キャッシュメモリの容量は予め定められているので、タイル630に対応するイメージデータ群610の全てをキャッシュできないことがある。図7を用いて、このことを詳しく説明する。図7(A)は、タイル高がSh1である場合の例を示す。図7(A)において、変形画像内のタイル710は、入力画像内の領域720に対応する。ところが、図7(A)の場合、キャッシュメモリ507の容量は、イメージデータ群730のデータ量に一致する。したがってキャッシュメモリ507は、領域720内の画像を全て含むイメージデータ群を格納することができない。この場合、タイル710内の画像を生成する際に、処理に必要なイメージデータがキャッシュメモリ507に入っている可能性が下がってしまう。このことは、処理速度の低下につながる。
【0040】
図7(B)は、タイル高をSh1からSh2に減らした場合の例を示す。ここで、Sh1<Sh2である。図7(B)において、変形画像内のタイル740は、入力画像内の領域750に対応する。この場合もキャッシュメモリ507は、領域750内の画像を全て含むイメージデータ群を格納することができない。
【0041】
図7(C)は、タイル高をSh2からSh3に減らした場合の例を示す。ここで、Sh2<Sh3である。図7(B)において、変形画像内のタイル770は、入力画像内の領域780に対応する。この場合キャッシュメモリ507は、領域750内の画像を全て含むイメージデータ群を格納することができる。したがって、タイル710内の画像を生成する際に、処理に必要なイメージデータがキャッシュメモリ507に入っている可能性が高くなり、処理速度が向上することが期待される。
【0042】
このように、タイルの大きさを小さくすることにより、キャッシュメモリ507に、タイルに対応する入力画像を含むイメージデータ群を全て格納させることができるようになる。ステップS1010においてタイル決定部510は、キャッシュメモリ507がタイルに対応する入力画像を含むイメージデータ群を全て格納できるように、タイル幅Sw及びタイル高Shを決定する。
【0043】
次にステップS1010について、図2のフローチャートを参照して詳しく説明する。本実施例においては、タイル幅Swは固定値とし、タイル高さShを決定するものとする。ステップS201においてタイル決定部510は、初期設定処理を行う。具体的にはタイル決定部510は、タイル上限情報511及びキャッシュサイズ情報512を取得する。タイル上限情報には、タイル高上限値Shmaxと、タイル幅上限値Swmaxとが含まれる。もっとも、Shmaxは変形画像526の高さであってもよいし、Swmaxは変形画像526の幅であってもよい。
【0044】
また、タイル決定部510は、タイル高ShをShmaxとし、タイル幅SwをSwmaxとする。すなわち本実施例においては、タイル高Shmax及びタイル幅Swmaxを初期値として用いる。さらにタイル決定部510は、変形画像526の画像領域のうち任意の画素を原点(1,1)に設定する。本実施例においては、右方向をX軸正方向、下方向をY軸正方向とし、変形画像526の画像領域の左上隅の画素を原点(1,1)に設定するものとする。このようにしてタイル決定部510は、変形画像526の画像領域)に高さSh、幅Swの領域を設定する。
【0045】
ステップS202a〜S202bはタイル高Shが0以上の間繰り返されるループである。ステップS202a〜S202bの間にShが0となった場合にはループ処理を中断し、タイル高Sh=1を出力する。もっとも、ステップS202a〜S202bの間にShが0となった場合にはエラーを通知してもよい。
【0046】
ステップS203でタイル決定部510は、イメージデータリストを初期化する。具体的にはタイル決定部510は、イメージデータリストに含まれるアドレスをクリアする。そしてタイル決定部510は、イメージデータリストに含まれるアドレスの数を示すイメージデータ数を0にセットする。イメージデータリストとは、後に説明されるように、タイルに対応するアドレスを記憶するためのリストである。
【0047】
ステップS204a〜S204bは、タイル内の全ての画素に対して行われる処理のループである。具体的には、ステップS201で設定された原点座標(1,1)と、座標(Sw,Sh)と、を頂点とする矩形領域内の全ての画素に対して、ステップS204a〜S204bの処理が行われる。以下では、座標(x,y)を有する画素に対して処理を行う場合について説明する。
【0048】
ステップS205でタイル決定部510は、変形画像526における座標(x,y)の画素を含む、イメージデータのアドレスを取得する。アドレスの取得方法については前に説明した。このようにタイル決定部510は、矩形領域内のそれぞれの画素について、この画素を含むイメージデータを特定する。
【0049】
ステップS206でタイル決定部510は、ステップS205で取得したアドレスがイメージデータリストに含まれているか否かを判定する。含まれている場合、処理はステップS204bに進む。含まれていない場合、処理はステップS207に進む。
【0050】
ステップS207でタイル決定部510は、ステップS205で取得したアドレスをイメージデータリストに追加する。さらにタイル決定部510は、イメージデータ数に1を追加する。そして、まだ処理されていない画素がある場合には、処理はステップS204bからS204aに戻る。ステップS204a〜ステップS204bの処理を繰り返すことによって、タイルに含まれる画素に対応するイメージデータの数が求められる。
【0051】
ステップS208でタイル決定部510は、ステップS204a〜ステップS204bの処理を繰り返すことによって求められたイメージデータの数(イメージデータのデータ量)を、所定の閾値と比較する。ここでこの所定の閾値は、キャッシュメモリ507が記憶できるイメージデータの数であり、イメージデータのデータ量がキャッシュメモリ507の容量以下であるか否かが判定される。イメージデータの数が閾値以下である場合、処理はステップS202a〜S202bのループを抜け、ステップS210に進む。イメージデータの数が閾値を超える場合、処理はステップS209に進む。
【0052】
ステップS209でタイル決定部510は、タイル高Shから所定値を減らす。本実施例ではタイル決定部510は、タイル高Shから1を減じるものとする。このようにしてタイル決定部510は、変形画像526の画像領域内に高さSh、幅Swの領域を再設定する。もっとも、この所定の値は任意の値であってよい。所定の値が大きいほどタイルの大きさをより高速に決定することができる。また、所定の値が小さいほどキャッシュメモリ507の容量によりよく適合したタイルの大きさを決定することができる。そして、処理はステップS202bからS202aに戻る。
【0053】
ステップS210でタイル決定部510は、得られたタイル高Shを含むタイル高情報532と、タイル幅Swを含むタイル幅情報533とを生成する。以上の処理によってタイル決定部510は、タイル高Sh及びタイル幅Swを求める。
【0054】
上述の実施例1でタイル決定部510は、タイル幅Swは固定値とし、タイル高Shを決定した。しかしながらタイル決定部510は、タイル高Shを固定値とし、タイル幅Swを決定してもよい。またタイル決定部510は、タイル幅Swとタイル高Shとの双方を決定してもよい。
【0055】
[実施例1の変形例]
実施例1では、ステップS201において、変形画像526の画像領域の左上隅の画素を原点(1,1)に設定した。しかしながら上述のように、変形画像526の画像領域の任意の画素を原点(1,1)に設定することができる。例えば、変形画像526の画像領域の中央を原点に設定してもよい。また、変形画像526の画像領域の四隅の画素のいずれかを原点に設定してもよい。例えば、変形画像526の左方向をX軸正方向、下方向をY軸正方向として、右上隅の画素を原点(1,1)に設定してもよい。変形画像526の右方向をX軸正方向、上方向をY軸正方向として、左下隅の画素を原点(1,1)に設定してもよい。さらに、変形画像526の左方向をX軸正方向、上方向をY軸正方向として、右下隅の画素を原点(1,1)に設定してもよい。
【0056】
原点の位置は、変形の種類に応じて予め設定されていてもよいし、ユーザによって設定されてもよい。例えば、タイルに対応する入力画像内の領域がより大きくなるように原点の位置を定めることにより、決定されるタイルの大きさが大きすぎることを防止することができる。従って、より縮小率が高い変形画像526の一領域が原点となるように、原点の位置が予め設定されていてもよい。
【0057】
[実施例2]
実施例1においては、1つの入力画像520を処理する際には、1組のタイル高情報532及びタイル幅情報533のみが用いられた。すなわち1つの入力画像520は、同じ大きさの複数のタイルに分割された。実施例2では、1つの入力画像520を、異なる大きさの複数のタイルに分割する。
【0058】
図8を参照して実施例2について説明する。図8において、800は入力画像を表し、801は変形画像を表す。図8の変形画像801は、入力画像800に対してピンクッション変形をかけることにより得られる。800’は、変形画像801において、入力画像800に対応する領域を示す。
【0059】
ピンクッション変形の場合、変形画像801の四隅により近い領域はより強く縮小される。逆に、変形画像801の中心により近い領域はより弱く縮小される。縮小率の高い領域は、より多くのイメージデータに対応する。したがってキャッシュヒット率を高めるためには、縮小率の高い領域においてはタイルの大きさをより小さくする必要がある。逆に縮小率の低い領域においては、タイルの大きさはより大きくてもよい。本実施例によれば、このように画像の縮小率に応じてタイルの大きさを設定することができる。
【0060】
本実施例の具体的な処理について説明する。本実施例に係る画像処理装置500は、実施例1に係る画像処理装置500と同様の構成をとりうる。また、本実施例に係る処理も、ステップS1010を除いて実施例1と同様に行うことができる。本実施例においては、ステップS1010において、ステップS201〜S210を繰り返すことにより、分割領域802,803,…の高さをそれぞれ決定する。
【0061】
まずタイル決定部510は、ステップS201で原点の座標を変形画像526の画像領域の上端の任意の画素に設定する。そしてタイル決定部510は、ステップS202a〜S210の処理を行う。この処理によって得られるタイル高Shが、分割領域802の高さSh802となる。タイル幅Swは固定値であるから、Sh802とSwとを用いて分割領域802を複数のタイルに分割することができる。
【0062】
次にタイル決定部510は、分割領域803の高さを決定するために、ステップS201〜S210を繰り返す。ここでタイル決定部510は、既に高さが決定している分割領域(分割領域802)の下に隣接する任意の画素に、原点の座標を設定する。そしてタイル決定部510は、ステップS202a〜S210の処理を行う。この処理によって得られるタイル高Shが、この分割領域803の高さSh803となる。
【0063】
同様にステップS201〜S210を繰り返すことにより、タイル決定部510は分割領域804以降の高さを決定することができる。高さが決定している分割領域の高さの合計が変形画像526の画像領域の高さ以上となった際に、タイル決定部510は、ステップS201〜S210の繰り返しを終了する。図8の例では、分割領域806の高さを決定すると、ステップS1010の処理は終了する。
【0064】
本実施例においては、分割領域の高さSh802,Sh803,…はタイル高Shに一致する。すなわち、1つの分割領域802,803,…には、横1行のタイルが含まれている。しかしながら、例えば分割領域の高さSh802,Sh803,…を、タイル高Shの複数倍としてもよい。この場合、1つの分割領域には複数行のタイルが含まれる。
【0065】
[実施例3]
本実施形態では、上述の各実施形態に係る処理をコンピュータにより行わせる。図9はコンピュータの基本構成を示す図である。このコンピュータにおいて上述の各実施形態の機能を実行するためには、各機能構成をプログラムにより表現し、このコンピュータに読み込ませればよい。こうして、このコンピュータで上述の実施形態の全ての機能を実現することができる。この場合、図9をはじめとする構成要素の各々は関数、若しくはCPUが実行するサブルーチンで機能させればよい。
【0066】
また、コンピュータプログラムは通常、CD−ROM等のコンピュータが読み取り可能な記憶媒体に格納されている。この記憶媒体を、コンピュータが有する読み取り装置(CD−ROMドライブ等)にセットし、システムにコピー若しくはインストールすることで実行可能になる。従って、係るコンピュータが読み取り可能な記憶媒体も本発明の範疇にあることは明らかである。
【0067】
図9においてCPU901は、コンピュータ全体の動作をコントロールする。例えばCPU901は、一次記憶902に格納されたプログラムの実行等を行う。一次記憶902は、主にRAM等のメモリであり、二次記憶903に記憶されたプログラム等を読み込んで格納する。二次記憶903は、例えばハードディスク、CD−ROM等がこれに該当する。本実施形態では、実施形態の処理手順を実現するプログラムは二次記憶903に格納し、プログラム実行時に一次記憶902に読み込んで、CPU901が実行処理を行う。
【0068】
入力デバイス904とはコンピュータに情報を入力するデバイスであって、例えばマウスやキーボード等がこれに該当する。入力デバイス904を用いることにより、ユーザがコンピュータに情報を入力することが可能であってもよい。出力デバイス905とはコンピュータが情報を出力するデバイスであって、モニタ及びプリンタを含む。読込デバイス906は、外部の情報を取得するためのデバイスである。読込デバイス906は、メモリカードリーダ及びネットワークカードを含む。バス908は、上述の各部を接続し、データのやりとりを可能とする。
【0069】
[その他の実施例]
上述の実施例では、フレームメモリ501及びキャッシュメモリ507に格納した画像データには、イメージデータ単位でアクセスできるものとした。また、フレームメモリ501とキャッシュメモリ507とについて、一度にアクセスできるデータ量(イメージデータの大きさ)は同じであるものとした。しかしながら、フレームメモリ501とキャッシュメモリ507とについて、一度にアクセスできるデータ量は異なっていてもよい。
【0070】
また上述の実施例において、1つの変形前座標528には1つの変形後座標529が対応しているものとした。しかしながら、1つの変形前座標528に1つの変形後座標529が対応していなくてもよい。例えば、変形後座標529は、複数の変形前座標528を用いた補間処理によって求められてもよい。補間処理を行う場合には、補間処理を行わない場合と比べて、入力画像へのアクセス回数がより増えることから、上述の実施例を適用することは処理速度向上のためにより有利である。
【0071】
上述の実施例においては画像変形処理について説明した。一般的に、画像変形処理を行った後に、さらにフィルタ処理を行うことがよくある。フィルタ処理においても、画像を複数のタイルに分割し、それぞれのタイルに対して順番にフィルタ処理を行うことにより、キャッシュヒット率を高めることができる。この場合、画像変形処理が完全に終了してからフィルタ処理を開始する必要はない。すなわち、画像の一部分について画像変形処理が終了したら、その部分のフィルタ処理を開始することができる。このようにして一連の画像処理をより高速に行うことができる。このとき、2つの処理における走査順序を整合させるために、画像変形処理とフィルタ処理とにおいて同じ方法で画像領域を分割することが有利である。すなわち、同じ方法でタイルの大きさを決定することが有利である。
【0072】
このためには、上述の実施例の方法でタイルの大きさを決定し、決定されたタイルの大きさに従って変形画像の画像領域を分割する。そして、こうして分割されたそれぞれのタイルに対して、画像変形処理を行い、さらにフィルタ処理を行えばよい。またタイル決定部510は、画像変形処理で用いられるキャッシュメモリの容量を考慮してタイルの大きさを決定してもよい。例えばステップS208においてタイル決定部510は、ステップS204a〜ステップS204bの処理を繰り返すことによって求められたイメージデータの数を、所定の閾値と比較する。ここでの所定の閾値を、キャッシュメモリ507が記憶できるイメージデータの数と、画像変形処理で用いられるキャッシュメモリが記憶できるイメージデータの数とのうち、小さい方としてもよい。
【0073】
タイルの大きさが大きすぎないことは、フィルタ処理においてもキャッシュヒット率を高めるために有利である。また、タイルの大きさが小さすぎないことも、フィルタ処理においてキャッシュヒット率を高めるために有利である。したがって、上述の実施例の方法を、画像変形処理とフィルタ処理とを組み合わせた画像処理に適用することは、いっそう有利となる。
【0074】
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)をネットワーク又は各種記憶媒体を介してシステム或いは装置に供給する。そして、そのシステム或いは装置のコンピュータ(又はCPUやMPU等)がプログラムコードを読み出して実行する。この場合、そのプログラム、及び該プログラムを記憶した記憶媒体は本発明を構成することになる。

【特許請求の範囲】
【請求項1】
入力画像に変形処理を行って出力画像を生成する画像処理装置であって、
前記出力画像の各画素の画素値は、前記入力画像の対応する画素の画素値から求められ、
前記画像処理装置は、
入力画像を入力する入力手段と、
前記入力画像をブロック単位で格納する格納手段と、
部分領域の大きさを決定する決定手段であって、前記大きさを有する領域を前記出力画像の画像領域内に設定し、前記設定した領域内のそれぞれの画素について、該画素に対応する前記入力画像内の画素を含む前記ブロックを特定した場合に、前記特定されたブロックのデータ量の合計がキャッシュメモリの容量以下となるように、前記大きさを決定する決定手段と、
前記決定手段が決定した大きさに従って前記出力画像の画像領域を複数の前記部分領域に分割する分割手段と、
前記複数の部分領域のそれぞれについて順に部分画像を生成する変形手段であって、
前記部分領域内の画素を着目画素として順次選択する選択手段と、
前記着目画素に対応する前記入力画像内の画素を含むブロックがキャッシュメモリに格納されている否かを判定し、格納されている場合には当該ブロックを前記キャッシュメモリから読み出し、格納されていない場合には当該ブロックを前記格納手段から読み出しかつ当該読み出したブロックを前記キャッシュメモリに格納する制御手段と、
前記制御手段が読み出したブロックから、前記着目画素に対応する画素値を、前記部分画像における前記着目画素の画素値として取得する取得手段と、を備える変形手段と、
前記変形手段が生成した部分画像で構成される前記出力画像を出力する出力手段と、
を備えることを特徴とする画像処理装置。
【請求項2】
前記決定手段は、前記部分領域の大きさを所定の初期値に設定し、
前記部分領域の大きさを所定値ずつ減じながら、前記特定されたブロックのデータ量の合計が前記キャッシュメモリの容量以下であるか否かを繰り返し判定することにより、前記部分領域の大きさを決定することを特徴とする、請求項1に記載の画像処理装置。
【請求項3】
入力画像に変形処理を行って出力画像を生成する画像処理装置が行う画像処理方法であって、
前記出力画像の各画素の画素値は、前記入力画像の対応する画素の画素値から求められ、
前記画像処理方法は、
入力画像を入力する入力工程と、
前記入力画像をブロック単位で格納手段に格納する格納工程と、
部分領域の大きさを決定する決定工程であって、前記大きさを有する領域を前記出力画像の画像領域内に設定し、前記設定した領域内のそれぞれの画素について、該画素に対応する前記入力画像内の画素を含む前記ブロックを特定した場合に、前記特定されたブロックのデータ量の合計がキャッシュメモリの容量以下となるように、前記大きさを決定する決定工程と、
前記決定工程で決定した大きさに従って前記出力画像の画像領域を複数の前記部分領域に分割する分割工程と、
前記複数の部分領域のそれぞれについて順に部分画像を生成する変形工程であって、
前記部分領域内の画素を着目画素として順次選択する選択工程と、
前記着目画素に対応する前記入力画像内の画素を含むブロックがキャッシュメモリに格納されている否かを判定し、格納されている場合には当該ブロックを前記キャッシュメモリから読み出し、格納されていない場合には当該ブロックを前記格納手段から読み出しかつ当該読み出したブロックを前記キャッシュメモリに格納する制御工程と、
前記制御手段が読み出したブロックから、前記着目画素に対応する画素値を、前記部分画像における前記着目画素の画素値として取得する取得工程と、を備える変形工程と、
前記変形工程で生成した部分画像で構成される前記出力画像を出力する出力工程と、
を備えることを特徴とする画像処理方法。
【請求項4】
コンピュータを、請求項1又は2に記載の画像処理装置が有する各手段として機能させるための、コンピュータプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2012−238118(P2012−238118A)
【公開日】平成24年12月6日(2012.12.6)
【国際特許分類】
【出願番号】特願2011−105645(P2011−105645)
【出願日】平成23年5月10日(2011.5.10)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】