(57)【要約】【課題】任意角回転処理時におけるメモリへのバースト読み出し効率を向上させる。【解決手段】画像処理装置であって、入力画像に対し、所定の走査順序で第一の画像処理を施す手段と、前記第一の画像処理が施された画像を所定の格納単位で格納するメモリと、前記メモリから前記所定の格納単位でバースト読み出された画像に対し、任意の角度での回転処理を含む第二の画像処理を施す手段と、前記所定の格納単位を、前記任意の角度に応じて決定する決定手段と、を備えたことを特徴とする。【選択図】図２
2015201677.tif 000002
【特許請求の範囲】
【請求項１】
入力画像に対し、所定の走査順序で第一の画像処理を施す手段と、
前記第一の画像処理が施された画像を所定の格納単位で格納するメモリと、
前記メモリから前記所定の格納単位でバースト読み出された画像に対し、任意の角度での回転処理を含む第二の画像処理を施す手段と、
前記所定の格納単位を、前記任意の角度に応じて決定する決定手段と、
を備えたことを特徴とする画像処理装置。
【請求項２】
前記決定手段は、縦横比が異なる複数の候補の中から、前記所定の格納単位を選択して決定することを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記複数の候補は、前記メモリにアクセスする際のバースト長をN画素分としたとき、N=PxQを満たす自然数PとQの組み合わせからなる、縦P画素で横Q画素の矩形領域であることを特徴とする請求項２記載の画像処理装置。
【請求項４】
前記第一の画像処理は、シェーディング補正であることを特徴とする請求項２又は３に記載の画像処理装置。
【請求項５】
前記所定の走査順序は、前記入力画像を副走査方向に分割した領域毎に、当該副走査方向への走査を主走査方向に繰り返す順序であることを特徴とする請求項１乃至４のいずれか１項に記載の画像処理装置。
【請求項６】
前記決定手段は、前記複数の候補のうち、前記矩形領域の対角線と前記所定の走査順序に従う走査方向とのなす角度が、前記任意の角度に最も近いものを、前記所定の格納単位として選択することを特徴とする請求項３乃至５のいずれか１項に記載の画像処理装置。
【請求項７】
前記決定手段は、複数の異なる角度と前記矩形領域との対応関係を規定したテーブルを参照して、前記任意の角度に対応する前記所定の格納単位を選択することを特徴とする請求項６に記載の画像処理装置。
【請求項８】
前記入力画像は、スキャナで原稿をスキャンすることにより得られた画像であり、
前記スキャナにセットされた前記原稿の傾きを検出する斜行検出手段をさらに備え、
前記任意の角度は、前記斜行検出手段で検出された角度である
ことを特徴とする請求項１乃至７のいずれか１項に記載の画像処理装置。
【請求項９】
前記所定の走査順序は、画像処理装置に固有の順序であることを特徴とする請求項１乃至８のいずれか１項に記載の画像処理装置。
【請求項１０】
前記メモリには、前記任意の角度に応じて、前記格納単位を行又は列毎に所定の画素分ずらして格納されることを特徴とする請求項１乃至９のいずれか１項に記載の画像処理装置。
【請求項１１】
入力画像に対し、所定の走査順序で第一の画像処理を施すステップと、
前記第一の画像処理が施された画像を所定の格納単位でメモリに格納するステップと、
前記メモリから前記所定の格納単位でバースト読み出された画像に対し、任意の角度での回転処理を含む第二の画像処理を施すステップと、
前記所定の格納単位を、前記任意の角度に応じて決定する決定ステップと、
を含むことを特徴とする画像処理方法。
【請求項１２】
コンピュータを、請求項１乃至１０のいずれか１項に記載の画像処理装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリから画像データをバースト読み出しして画像を回転処理する画像処理装置および画像処理方法に関する。
【背景技術】
【０００２】
近年、画像処理装置において入力画像を任意の角度で回転させる任意角回転処理が要求されることがある。この任意角回転処理は、例えばスキャン時に原稿が傾いていた場合、スキャンした原稿の傾きを測定し、傾きを打ち消すような補正処理（斜行補正）に用いられる。回転前の画像の座標を(x,y)、 回転後の画像の座標を(X,Y)とすると、両者の関係は回転角度θを用いて以下の式（１）で与えられる。ただし、座標(X,Y)が画素の中心である場合に対応する座標(x,y)は必ずしも画素の中心とならないため、一般的に周囲の画素からの補間などによって演算される。
【０００３】
【数１】
2015201677.tif 000003
【０００４】
従来、画像処理装置に入力された画像データは、装置内のメモリ上で行毎に連続的に格納される。図１（ａ）は、画像がメモリ上で行毎に連続的に格納されている様子を示す図である。図１（ａ）において、画像１００は幅１６画素の画像であり、0,1,2,…の数字は、メモリに格納されている各画素のアドレス（16進数。以降同様。）をそれぞれ示している。例えば、座標(0,0)の画素は0番地，座標(1,0)の画素は1番地，座標(3,2)の座標は23番地に格納されている。このように格納されている入力画像１００に、回転角度θの画像回転処理を行うとする（図１（ｂ）を参照）。この時、出力画像における１行は図中の矢印に位置する。そのため、回転された画像の画素値を、補間演算を用いて近傍の画素から算出することになり、例えば図中の網点で示された部分の画素（処理対象画素）が必要となる。
【０００５】
メモリから処理対象画素を読み出す際、連続した領域についてはバーストアクセスによる高速読み出しが可能である。ここでバースト長を８画素分とすると、図１（ｂ）中の網点部分の画素を全て包含するように読み出すには、１ｘ８画素を８回読み出す必要がある（図１（ｃ）を参照）。この場合、計６４画素を読み出すことになるが必要な網点部分の画素（処理対象画素）は３６画素であり、非効率的である。このように、行毎にメモリに格納されている画像データに対して斜め方向にアクセスすると、バーストアクセスの効率が上げられず読み出しに時間が掛かる。
【０００６】
この点、例えば特許文献１に記載の方法では、ＮｘＮ画素単位で画像データをメモリに書き込むことで90°あるいは270°回転時のバースト読み出しを効率化している。
【０００７】
また、特許文献２に記載の方法では、回転角度に応じてブロックのサイズおよび形状を選択し、角度が補正されるようにブロック同士の相対位置をずらしながらメモリに書き込んでいる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１１−１８８０５０号公報
【特許文献２】特開２００６−２０３７１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記特許文献１に記載された方法では、90°および270°という２種類の回転角度のみに適用可能であり、任意の角度に対応できない。
【００１０】
また、上記特許文献２に記載された方法では、ブロックの形状はいずれもほぼ正方形であるため、全ての角度でバーストアクセスに適した形状とはならない。
【００１１】
特にスキャナでは、一般的にシェーディング補正を行った後に斜行補正を行い、その 後にフィルタ処理などの画像処理という流れでスキャンした画像データが処理される。このような処理順の下で、画像の走査方向をシェーディング補正の方向（副走査方向）に合わせたとき、当該順序で後続する斜行補正を行うと走査方向が斜行角度に応じで変わってしまう。こうなるとシステム性能が低下してしまうことになる。
【課題を解決するための手段】
【００１２】
本発明に係る画像処理装置は、入力画像に対し、所定の走査順序で第一の画像処理を施す手段と、前記第一の画像処理が施された画像を所定の格納単位で格納するメモリと、前記メモリから前記所定の格納単位でバースト読み出された画像に対し、任意の角度での回転処理を含む第二の画像処理を施す手段と、前記所定の格納単位を、前記任意の角度に応じて決定する決定手段と、を備えたことを特徴とする。
【発明の効果】
【００１３】
本発明によれば、任意角回転処理時のバースト読み出しを効率よく行なうことができる。
【図面の簡単な説明】
【００１４】
【図１】従来の画像回転処理の概要を説明する図である。
【図２】実施例１に係る、スキャナ補正処理を実現する画像処理装置の内部構成を示すブロック図である。
【図３】バンド垂直順序を説明する図である。
【図４】入力画像とセンサとの位置関係を説明する図である。
【図５】１バンド分のシェーディング補正処理の流れを示すフローチャートである。
【図６】メモリのバースト長が１６画素である場合における画像の格納例を示す図である。
【図７】実施例１におけるタイルの処理順序を示す図である。
【図８】斜行補正部の内部構成を示すブロック図である。
【図９】2x8のタイルによる位置をずらした書き込みの一例を示す図である。
【図１０】実施例２に係る画像処理装置の内部構成を示すブロック図である。
【図１１】タイル水平順序を説明する図である。
【発明を実施するための形態】
【００１５】
以下、本発明を実施する為の形態について図面を用いて説明する。なお、以下の実施例において示す構成は一例にすぎず、本発明は図示された構成に限定されるものではない。
【実施例１】
【００１６】
本実施例では、スキャナで読み取った画像（以下、スキャン画像）に対し、斜行補正を含む一連のスキャナ補正処理を行う態様について説明する。
【００１７】
図２は、本実施例に係る、スキャナ補正処理を実現する画像処理装置の内部構成を示すブロック図である。スキャナ補正処理は、前段画像補正部２００における処理と後段画像補正部２１０における処理とに大別できる。前段画像補正部２００に入力される画像データは、ラインセンサにより読み取られた生データである。前段画像補正部２００の処理結果は、メモリ２２０を経由して後段画像補正部２１０へと入力される。後段画像補正部２１０の処理結果は、補正済画像（出力画像）として外部へ出力される。また、斜行検出部２３０は例えば専用のセンサにより構成され、スキャナ（不図示）にセットされた原稿の傾き（搬入角度）θを測定する。測定された角度θはパラメータとして、後述するリオーダ部２０３および斜行補正部２１１に送られる。
【００１８】
＜前段画像補正部＞
まず、前段画像補正部２００について詳しく説明する。前段画像補正部２００は、ＨＶ変換部２０１、シェーディング補正部２０２、リオーダ部２０３で構成される（図２を参照）。
【００１９】
ＨＶ変換部２０１は、入力画像を、所定の走査順序の画像に変換する処理を行なう。本実施例では、入力画像を副走査方向に分割した複数の領域毎に処理する。以下では、この分割された領域を「バンド」と呼ぶ。図３に示すように、入力画像３００の各バンドでは副走査方向への走査が主走査方向に繰り返され、最終的に入力画像３００全体が走査される。以降では、図３に示される走査順序をバンド垂直順序と呼ぶこととする。後述するように、シェーディング補正を効率化する目的で、このようなシステム固有の走査順序となっている。ＨＶ変換部２０１でバンド垂直順序の画像へと変換された画像データは、シェーディング補正部２０２に送られる。
【００２０】
シェーディング補正部２０２は、センサ毎のゲインを補正する処理を行なう。図４は、入力画像３００とセンサとの位置関係を説明する図である。一般的なスキャナではセンサ（ラインセンサ）４００は主走査方向にセンサ画素が並ぶため、バンド垂直順序の画像における１列は同一のセンサ画素により撮像された画素となる。このためバンド垂直順序では、シェーディング補正に必要なパラメータを列毎に更新すればよいことになり、効率的に処理できる。
【００２１】
図５は、１バンド分のシェーディング補正処理の流れを示すフローチャートである。
【００２２】
ステップ５０１において、シェーディング補正部２０２は、センサ画素それぞれのゲインに対応するパラメータであるシェーディングパラメータを取得する。
【００２３】
ステップ５０２において、シェーディング補正部２０２は、処理対象となるバンド内の処理対象列における注目画素を決定する。この際、注目画素は、上述したバンド垂直順序に従って決定される。
【００２４】
ステップ５０３において、シェーディング補正部２０２は、ステップ５０１で取得したシェーディングパラメータを用いて、決定された注目画素に対しシェーディング補正処理を行う。
【００２５】
ステップ５０４において、シェーディング補正部２０２は、注目画素が処理対象列の最後の画素かどうかを判定する。注目画素が処理対象列の最後の画素であれば、ステップ５０５に進む。一方、注目画素が処理対象列の最後の画素でなければステップ５０２に戻り、次の画素を注目画素に決定し、処理を続行する。
【００２６】
ステップ５０５において、シェーディング補正部２０２は、注目画素が処理対象となっているバンド内の最後の画素であるかどうかを判定する。注目画素が処理対象バンド内の最後の画素でなければステップ５０１に戻り、次の処理対象列のシェーディングパラメータを取得し、次の処理対象列についての処理を続行する。一方、注目画素が処理対象バンド内の最後の画素であれば本処理を終える。
【００２７】
以上が、１バンド分のシェーディング補正処理の内容であり、このような処理がすべてのバンドに対して実行される。このように、走査順序をバンド垂直順序とすることで、列単位で同じシェーディングパラメータを用いることができる。これが例えばバンド内を水平方向に走査する場合は、１画素毎にシェーディングパラメータを取得する必要があるところ、本実施例ではその必要がなく、シェーディングパラメータ取得の頻度を減らすことができる。シェーディング補正された画像のデータは、リオーダ部２０３に送られる。
【００２８】
リオーダ部２０３は、シェーディング補正された画像データに対し、斜行検出部２３０で検出された角度θに応じて、後続の斜行補正部２１１の処理に適した形へと画素列を並び替えて、メモリ２２０に書き込む。リオーダ部２０３は、その内部にバンド高さ複数列分を蓄積可能な一時メモリを持ち、これを用いて画素を所定の格納単位毎にパッキングする。図６は、メモリ２２０のバースト長が１６画素である場合の、メモリ２２０への画像の格納例を示す図である。図６の（ａ）はタイル形状が1x16の場合、同（ｂ）はタイル形状が2x8の場合、 同（ｃ）はタイル形状が4x4の場合、 同（ｄ）はタイル形状が8x2の場合、 同（ｅ）はタイル形状が16x1の場合にそれぞれ対応している。選択されたいずれかのタイル形状の１タイルがバーストアクセスできるようにパッキングしてメモリ２２０に配置される。例えば8x2のタイル形状が選択された時であれば、座標(0,0)から座標(7,1)までの8行2列16画素がメモリ２２０の0番地からf番地に格納されることになる。ここで、タイル形状の選択方法について説明する。
【００２９】
タイル形状は、タイルの対角線と走査方向（バンド垂直順序では副走査方向）とのなす角が、検出された角度（回転角度）θと最も近いものを選択すればよい。図６の（ａ）〜（ｅ）に示した1x16, 2x8, 4x4, 8x2, 16x1の各タイル形状の場合、対角線と副走査方向とのなす角は、それぞれarctan(16)、arctan(4)、arctan(1)、arctan(1/4)、arctan(1/16) で与えられる。例えば、回転角度θが45°近傍であれば4x4のタイル形状を選択すればよいことになる。そして、選択の際は、回転角度θに基づいて、タイルの対角線と走査方向とのなす角を求め、最も適切なタイル形状を選択するようにすればよい。或いは、回転角度θとタイル形状との対応関係を規定したテーブルを予め用意しておき、当該テーブルを参照して、検出された角度θに応じたタイル形状を選択するようにしてもよい。このようにして検出された角度θに応じてメモリへの格納単位を決定することで、１つのタイルに含まれ得る１走査分の画素数を最大化することができ、バーストアクセスの効率を上げることができる。
【００３０】
なお、タイル形状の選択肢は、メモリ２２０にアクセスするバースト長をN画素分としたとき、N=PxQを満たす自然数PとQ の組合せ（縦P画素、横Q画素のタイル形状）を選択肢とすればよい。例えばN=12であれば、選択対象となるタイル形状の候補としては、1x12、2x6、 3x4、4x3、6x2、12x1となる。タイル形状をこのような縦P画素、横Q画素の矩形領域とすることで、画像をもれなくメモリ２２０に格納でき、またメモリアドレスも単純な演算により求めることができる。
【００３１】
＜後段画像補正部＞
次に、後段画像補正部２１０について詳しく説明する。
【００３２】
後段画像補正部２１０は、斜行補正部２１１、フィルタ処理部２１２で構成される（図２を参照）。
【００３３】
リオーダ部２０３によってメモリ２２０に格納された画像（対象画像）は、その書き込み時における格納単位でバースト読み出しされて斜行補正部２１１へと送られる。ここで、タイル形状として8x2が選択された場合を例に、メモリ２２０に格納された画像データが斜行補正部２１１へと送られる様子を説明する。図７の（ａ）はバンド垂直順序の画像１バンド分をθ回転させた状態を示す図であり、同（ｂ）は格納単位でバースト読み出しされる際の順序を１〜３９の数字で示している。斜行補正部２１１からの出力がこの順序となるので、斜行補正部２１１への入力は、図７（ｂ）に示される順序に従い格納単位（ここでは8x2のタイル）でメモリ２２０から読み出されることになる。なお、角度θはページ毎に変わり得るため、この順序もページ毎に変わり得ることになる。
【００３４】
図８は、斜行補正部２１１の内部構成を示すブロック図である。斜行補正部２１１に入力された8x2タイルのデータはまずバッファ８１０に蓄積される。バッファ８１０は、8x2タイルデータを複数保持可能であり、すべての画素が現在のバンド内で参照されなくなるまで保持する（現在のバンド内で参照されなくなった画素は随時破棄する。）。次に、バッファ８１０から補間に必要な所定の参照画素群を取り出し、補間演算部８２０へ送る。所定の参照画素群は、例えば補間演算部８２０での演算が線形補間であれば、処理対象画素の近傍2x2の画素群となる。座標演算部８３０は、処理対象画素の座標をバンド垂直順序に従って更新しながら、それに対応する回転前の座標を、角度θを用いて計算する。これにより、バッファ８１０に対しては、補間演算に必要な参照画素群の座標及び現在のバンド内ではもはや参照されない非参照画素の座標を送る。そして、補間演算部８２０に対しては、補間演算のパラメータ（位相）を送る。また、メモリ２２０に対しては、次に読み出す8x2タイルのメモリアドレスを送る。こうして、補間演算部８２０における補間演算結果（角度θに応じて回転処理を施した画素のデータ）が、バンド垂直順序でフィルタ処理部２１２へと出力される。 
フィルタ処理部２１２は、任意の角度で回転処理された画素のデータに対し、バッファを用いて蓄積しながら例えば３ｘ３フィルタ演算を実行し、ノイズ除去などを行う。フィルタ処理された画像データは外部へと出力される。
【００３５】
斜行補正部２１１及びフィルタ処理部２１２では、周辺画素を参照するための一定量の遅延バッファが必要であるが、バンド垂直順序で処理することで遅延バッファの容量はバンドの高さ依存となる。すなわち、本実施例の手法によれば、原画像のサイズに依存しない画像処理装置を実現することが可能となる。
【００３６】
以上説明したように本実施例によれば、回転角度θに従って適応的にメモリへの書き込み単位の縦横比が変更される。これにより、バースト読み出しの効率を高めることができる。特に、シェーディング補正と斜行補正の双方における走査順序を考慮してメモリに格納単位を決定しているので、ページ毎に変わり得る斜行角度に依らない安定したシステム性能を実現できる。
【００３７】
なお、前段画像補正部２００内に、回転処理に不必要なタイルを破棄する機能を持たせてもよい。例えば、図７（ｂ）におけるバンド１の左上端のタイル７１０は回転処理で参照されないためメモリ２２０に書き込む必要はない。したがって、このような不必要なタイルを破棄する構成を別途設けてもよい。
【００３８】
また、画素の走査順序は本実施例で説明した順序に限定されるものではない。一般に、走査順序が回転角度に依らない所定の順序として回転処理後に出力する場合、回転処理への入力は回転角度に依存する斜め方向の入力順序となる。この時、回転対象の画像をメモリに書き込む際に回転角度θが分かっていれば、同様に本発明を適用することができる。
【００３９】
さらに、シェーディング補正部２０２やフィルタ処理部２１２は、他の処理と入れ替えてもよいし、他の処理を加えてもよい。例えば、シェーディング補正の代わりに光学歪み補正をしてもよいし、フィルタ処理の後に解像度変換をしてもよい。
【００４０】
また、本実施例では、メモリ２２０へ格子状に画像データ（タイルデータ）を書き込んでいるが、角度に応じて相対位置をずらして書き込んでもよい。図９は2x8のタイルによる位置をずらした書き込みの一例を示す図であり、（ａ）は１行毎に主走査方向にずらした場合、同（ｂ）は１列毎に副走査方向にずらした場合をそれぞれ示している。このように、所定の画素分ずつずらしながら格納することにより、メモリアドレスの演算など制御が少し複雑化するものの、よりメモリアクセスを効率化できる場合がある。 
なお、本発明の適用によりメモリに書き込む際の効率は低下し得る。しかしながら、任意の角度での回転処理は一般に周囲の画素を参照し、またその後段でもフィルタ処理や解像度変換といった周囲の画素を参照する処理があることが多い。よって、通常であればメモリ書き込み量よりもメモリ読み出し量の方が多いといえる。すなわち、メモリ書き込みの効率を犠牲にしてでもメモリ読み出しを効率化することでトータルでの効率化が成し遂げられる。
【実施例２】
【００４１】
次に、実施例１とは異なる走査順序でシェーディング補正を行う態様について、実施例２として説明する。なお、実施例１と共通する部分については説明を省略ないしは簡略化し、以下では差異点を中心に説明するものとする。
【００４２】
図１０は、本実施例に係る画像処理装置の内部構成を示すブロック図であり、実施例１における図２に対応している。本実施例のスキャナ補正処理が前段画像補正部１０００における処理と後段画像補正部１０１０における処理とに大別される点は実施例１と同じである。実施例１に係る図２の構成と比較すると、本実施例の前段画像補正部１０００では、ＨＶ変換部が取り除かれているのが分かる。
【００４３】
本実施例における前段画像処理部１０００への画像データの入力は、タイル水平順序に従うものとする。図１１は、本実施例におけるタイル水平順序を説明する図であり、分割された各タイルにおいて主走査方向に走査されることが示されている。
【００４４】
シェーディング補正部１００２では、タイル水平順に各画素をシェーディング補正する。シェーディングパラメータは左右の画素で異なるため、１画素毎に更新する必要がある。そのため、タイル幅分に相当するシェーディングパラメータをシェーディング補正部内の一時メモリなどに蓄積しておき、１画素毎にそれを読み出して用いる。
【００４５】
リオーダ部１００３では、実施例１におけるリオーダ部２０３と同様、回転角度に適したメモリ格納単位へと画素をパッキングして、メモリ１０２０に書き込む。そのため、リオーダ部１００３はタイル幅の複数行を蓄積可能な一時メモリを具備し、当該一時メモリにメモリ格納単位の画素が揃い次第、随時メモリ１０２０へ書き込む。
【００４６】
メモリ１０２０に書き込まれた時点での画像は、実施例１と同様であり、それ以降の処理も実施例１と異なるところはない。すなわち、回転処理に適したメモリ格納単位でメモリ１０２０に格納されているため、効率的にメモリ読み出しが実行できる。
【００４７】
以上説明したように、一般的に使用されている水平方向の走査順序の場合でも、本発明を同様に適用することができる。
【００４８】
（その他の実施例）
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施例の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2015201677.tif 000004
【図２】
2015201677.tif 000005
【図３】
2015201677.tif 000006
【図４】
2015201677.tif 000007
【図５】
2015201677.tif 000008
【図６】
2015201677.tif 000009
【図７】
2015201677.tif 000010
【図８】
2015201677.tif 000011
【図９】
2015201677.tif 000012
【図１０】
2015201677.tif 000013
【図１１】
2015201677.tif 000014