(57)【要約】【課題】SIMDを用いた画像データの空間フィルタ処理をより高速に実行する。【解決手段】ステップＳ１において、演算ユニットは、処理対象の画像データにおいて水平方向に並んでいる画素が、メモリ上においてプロセッサエレメント数と同じ間隔で並ぶように画素を並び替え、ステップＳ２において、SDMI型プロセッサは、水平方向の空間フィルタ処理を実行する。ステップＳ３において、演算ユニットは、処理対象の画像データにおいて垂直方向に並んでいる画素が、メモリ上においてプロセッサエレメント数と同じ間隔で並ぶように画素を並び替え、ステップＳ４において、SDMI型プロセッサは、垂直方向の空間フィルタ処理を実行する。ステップＳ５において、演算ユニットは、画素の配列を元に戻す。本発明は、例えば、画像処理装置に適用できる。【選択図】図２
2010134612.tif 000002
【特許請求の範囲】
【請求項１】
１つの命令で２以上の所定の数のデータに対する処理を行う演算手段を用いて、画像データの空間フィルタ処理を行う画像処理方法において、
空間フィルタ処理を行う方向であって、前記画像データの交差する２方向のいずれか一方である第１の方向に並んでいる画素が、メモリ上で前記所定の数と同じ間隔で並ぶように前記画像データの画素を並び替える第１の並び替えステップと、
前記演算手段を用いて、第１の並び替えステップにより画素を並び替えた後の前記画像データに対して前記第１の方向の空間フィルタ処理を実行する第１のフィルタステップと、
前記メモリ上の前記画像データの画素の配列を、前記第１の並び替えステップにより並び替える前の配列に戻す復旧ステップと
を含むことを特徴とする画像処理方法。
【請求項２】
前記画像データの画素がラスタ順に前記メモリ上に配置される場合、前記第１の並び替えステップにおいて、前記第１の方向が水平方向であるとき、前記所定の数と同じ行数ごとのブロックに前記画像データを分割し、分割したブロックごとに縦横を入れ替え、縦横を入れ替えた後のブロックを縦に並べることにより生成される画像データの画素のラスタ順と同じ順番に画素を並び替え、前記第１の方向が垂直方向であるとき、前記所定の数と同じ列数ごとのブロックに前記画像データを分割し、分割したブロックを縦に並べることにより生成される画像データの画素のラスタ順と同じ順番に画素を並び替える
ことを特徴とする請求項１に記載の画像処理方法。
【請求項３】
前記第１の並び替えステップにおいて、前記画像データの前記第１の方向と直交する第２の方向の画素数が前記所定の数の倍数でない場合、前記第２の方向の画素数が前記所定の数の倍数になるようにダミーの画素を付加し、前記ダミーの画素を付加した前記画像データに対して画素の並び替えを行う
ことを特徴とする請求項２に記載の画像処理方法。
【請求項４】
前記第１の方向と直交する第２の方向の空間フィルタ処理をさらに行う場合、
前記第１の並び替えステップと前記復旧ステップとの間において、
前記画像データの前記第２の方向に並んでいる画素が、前記メモリ上で前記所定の数と同じ間隔で並ぶように前記画像データの画素を並び替える第２の並び替えステップと、
前記演算手段を用いて、前記第２の並び替えステップにより画素を並び替えた後の前記画像データに対して前記第２の方向の空間フィルタ処理を実行する第２のフィルタステップと
をさらに含むことを特徴とする請求項１乃至３のいずれかに記載の画像処理方法。
【請求項５】
１つの命令で２以上の所定の数のデータに対する処理を行う演算手段を備えるコンピュータに、
空間フィルタ処理を行う方向であって、画像データの交差する２方向のいずれか一方である第１の方向に並んでいる画素が、メモリ上で前記所定の数と同じ間隔で並ぶように前記画像データの画素を並び替える第１の並び替えステップと、
前記演算手段を用いて、第１の並び替えステップにより画素を並び替えた後の前記画像データに対して前記第１の方向の空間フィルタ処理を実行する第１のフィルタステップと、
前記メモリ上の前記画像データの画素の配列を、前記第１の並び替えステップにより並び替える前の配列に戻す復旧ステップと
を含む処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理方法およびプログラムに関し、特に、SIMD（Single Instruction Multiple Data）を用いて空間フィルタ処理を行う場合に用いて好適な画像処理方法およびプログラムに関する。
【背景技術】
【０００２】
従来、空間フィルタ処理などの画像処理を行う際に、SIMD（Single Instruction Multiple Data）の実行が可能なSIMD型プロセッサが用いられる場合がある（例えば、特許文献１または２参照）。SIMD型プロセッサを用いると、複数の画素に対して１つの命令で同じ処理を施すことができるため、処理の高速化が期待できる。
【０００３】
【特許文献１】特開２００５−２１８０５５号公報
【特許文献２】特開２００１−３５７３９５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、SIMD型プロセッサを用いて画像データの空間フィルタ処理を行う場合、例えば、処理対象となる画像データの幅が、SIMD型プロセッサが備えるプロセッサエレメントの数（以下、プロセッサエレメント数と称する）、すなわち、SIMD型プロセッサが１つの命令で処理することができるデータの数の倍数でないとき、SIMD型プロセッサ内で、シャッフル命令等を用いて何度も画素の並び替えを行う必要が生じる。その結果、処理が複雑になり、処理時間が長くなってしまう。
【０００５】
本発明は、このような状況を鑑みてなされたものであり、SIMDを用いた画像データの空間フィルタ処理をより高速に実行できるようにするものである。
【課題を解決するための手段】
【０００６】
本発明の一側面の画像処理方法またはプログラムは、空間フィルタ処理を行う方向であって、画像データの交差する２方向のいずれか一方である第１の方向に並んでいる画素が、メモリ上で所定の数と同じ間隔で並ぶように画像データの画素を並び替える第１の並び替えステップと、１つの命令で２以上の所定の数のデータに対する処理を行う演算手段を用いて、第１の並び替えステップにより画素を並び替えた後の画像データに対して第１の方向の空間フィルタ処理を実行する第１のフィルタステップと、メモリ上の画像データの画素の配列を、第１の並び替えステップにより並び替える前の配列に戻す復旧ステップとを含む。
【０００７】
本発明の一側面においては、空間フィルタ処理を行う方向であって、画像データの交差する２方向のいずれか一方である第１の方向に並んでいる画素が、メモリ上で所定の数と同じ間隔で並ぶように画像データの画素が並び替えられ、画素を並び替えた後の画像データに対して第１の方向の空間フィルタ処理が実行され、メモリ上の画像データの画素の配列が、並び替える前の配列に戻される。
【発明の効果】
【０００８】
本発明によれば、SIMDを用いた画像データの空間フィルタ処理をより高速に実行することができる。
【発明を実施するための最良の形態】
【０００９】
以下、図面を参照して本発明を適用した実施の形態について説明する。
【００１０】
図１は、本発明を適用した情報処理装置の一実施の形態を示すブロック図である。図１の情報処理装置１においては、SIMD（Single Instruction Multiple Data）機能を有するプロセッサ（以下、適宜SIMD型プロセッサと称する）１１が、キャッシュメモリ１２に接続され、キャッシュメモリ１２と主記憶装置１３が相互に接続されている。
【００１１】
SIMD型プロセッサ１１は、SIMD型プロセッサ１１が備えるプロセッサエレメント数と同じ数のデータに対する処理を、１つの命令で実行可能なプロセッサである。SIMD型プロセッサ１１においては、SIMD演算ユニット２１およびSIMDレジスタ２２が、内部バス２５に接続され、内部バス２５と外部インタフェース２６が相互に接続されている。また、外部インタフェース２６には、キャッシュメモリ１２が接続されている。
【００１２】
SIMD演算ユニット２１は、所定の数のプロセッサエレメントを備えており、最大でプロセッサエレメント数と同じ数のデータに対する処理を、１つの命令で実行することが可能である。SIMDレジスタ２２は、SIMD演算ユニット２１の演算対象となるデータを、プロセッサエレメント数の倍数単位で、外部インタフェース２６および内部バス２５を介して、キャッシュメモリ１２から読み出し、格納する。SIMD演算ユニット２１は、SIMDレジスタ２２に格納されたデータを利用して各種の演算を実行し、演算結果を示すデータをSIMDレジスタ２２に格納する。SIMDレジスタ２２は、内部バス２５および外部インタフェース２６を介して、演算結果を示すデータをキャッシュメモリ１２に書き込む。
【００１３】
また、SIMD型プロセッサ１１は、内部バス２５に接続する演算ユニット２３とレジスタ２４を有している。演算ユニット２３とレジスタ２４で構成される部分は、通常のプロセッサ、すなわち、１つの命令で１つのデータに対する処理を実行可能なプロセッサを構成している。この部分においては、演算ユニット２３およびレジスタ２４が、内部バス２５に接続され、内部バス２５と外部インタフェース２６が相互に接続されている。また、外部インタフェース２６には、キャッシュメモリ１２が接続されている。
【００１４】
レジスタ２４は、演算ユニット２３の演算対象となるデータを、外部インタフェース２６および内部バス２５を介して、キャッシュメモリ１２から読み出し、格納する。演算ユニット２３は、レジスタ２４に格納されたデータを利用して各種の演算を実行し、演算結果を示すデータをレジスタ２４に格納する。レジスタ２４は、内部バス２５および外部インタフェース２６を介して、演算結果を示すデータをキャッシュメモリ１２に書き込む。
【００１５】
なお、以下、説明を分かりやすくするために、SIMD演算ユニット２１とキャッシュメモリ１２との間、SIMDレジスタ２２とキャッシュメモリ１２との間、演算ユニット２３とキャッシュメモリ１２との間、および、レジスタ２４とキャッシュメモリ１２との間の通信経路における、内部バス２５および外部インタフェース２６の記載を省略するものとする。また、以下の説明でSIMD型演算を行う部分をSIMD型プロセッサ部と呼ぶことがある。
【００１６】
キャッシュメモリ１２は、主記憶装置１３と比較して、容量が小さく高速な記憶媒体であり、例えば、SRAM（Static Random Access Memory）により構成される。一方、主記憶装置１３は、キャッシュメモリ１２と比較して、容量が大きく低速な記憶媒体であり、例えば、ハードディスクドライブにより構成される。キャッシュメモリ１２は、SIMD型プロセッサ１１とは独立して、主記憶装置１３からデータを読み出し保持したり、保持しているデータを主記憶装置１３に記憶させたりする。
【００１７】
そして、SIMD型プロセッサ１１は、キャッシュメモリ１２を介して、主記憶装置１３へのアクセスを行う。すなわち、SIMD型プロセッサ１１は、読み出すデータがキャッシュメモリ１２に保持されている場合、キャッシュメモリ１２からそのデータを読み出す。一方、読み出すデータがキャッシュメモリ１２に保持されていない場合、キャッシュメモリ１２が、SIMD型プロセッサ１１の指示の基に、そのデータを主記憶装置１３から読み出し、SIMD型プロセッサ１１は、キャッシュメモリ１２が読み出したデータを取得する。従って、SIMD型プロセッサ１１が使用するデータがキャッシュメモリ１２に保持されている確率が高くなるほど、演算速度を高速化することができる。
【００１８】
また、SIMD型プロセッサ１１は、主記憶装置１３にデータを書き込む場合、そのデータをキャッシュメモリ１２に書き込み、キャッシュメモリ１２が、書き込まれたデータを主記憶装置１３に記憶させる。
【００１９】
また、主記憶装置１３には、例えば、SIMD型プロセッサ１１が実行するプログラムが格納される。そのプログラムは、例えば、図示せぬプログラム記録媒体などからインストールされる。
【００２０】
次に、図２のフローチャートを参照して、情報処理装置１により実行される空間フィルタ処理について説明する。
【００２１】
なお、以下、SIMD型プロセッサ部が備えるプロセッサエレメント数を４つとして説明する。すなわち、SIMD型プロセッサ１１のSIMD演算ユニット２１が、１つの命令で４つのデータに対する処理を行うことが可能であるものとする。
【００２２】
また、以下、図３に示される縦１０行×横９列の画像データＩＤ１に対して、図４に示される縦３行×横３列のカーネル６１を用いた平均化フィルタ処理を行う場合の処理を、適宜具体例として挙げながら説明する。なお、この平均化フィルタ処理により、画像データＩＤ１の各画素の画素値が、その画素を中心とする縦３行×横３列の範囲内の画素の画素値の平均値に置き換えられる。
【００２３】
さらに、以下、画像データＩＤ１の行番号をａからｊまでのアルファベットにより表し、列番号を１から９までの数字で表す。また、画像データＩＤ１の座標（x,y）の画素をPxyと表し、その画素値をVxyと表す。例えば、画像データＩＤ１の座標（1,ａ）の画素P1aの画素値はV1aとなり、座標（9,j）の画素P9jの画素値はV9jとなる。
【００２４】
また、図５および図６は、主記憶装置１３上での画像データＩＤ１の画素の配列を示している。図５は、主記憶装置１３上での画像データＩＤ１の画素の配列を、横に並べて示した図であり、図６は、SIMD型プロセッサ部のプロセッサエレメント数と同じ数の４画素ごとに改行して示した図である。図５および図６に示されるように、画像データＩＤ１の画素は、主記憶装置１３において、ラスタ順（画像の左上の画素から右に向かって配置し、次に下の段に移って配置を繰り返す配置順）に並べて配置されている。
【００２５】
ステップＳ１において、演算ユニット２３は、処理対象の画像データにおいて水平方向に並んでいる画素が、メモリ上においてプロセッサエレメント数と同じ間隔で並ぶように画素を並び替える。
【００２６】
ここで、図７乃至図９を参照して、ステップＳ１の処理における最終的な画素の配列の決め方について説明する。
【００２７】
まず、画像データの行数、すなわち、画像データの垂直方向の画素数が、SIMD型プロセッサ部のプロセッサエレメント数の倍数でない場合、行数がプロセッサエレメント数の倍数になるように、ダミーの画素からなるダミー行を画像データに付加する。
【００２８】
例えば、図３の画像データＩＤ１の場合、行数が１０行であり、プロセッサエレメント数の倍数、すなわち、４の倍数でないため、図７に示されるように、行数が４の倍数の１２行になるように、画像データＩＤ１の下端に２行のダミー行が付加される。なお、ダミー行の画素の画素値は、任意の値とすることができる。
【００２９】
なお、画像データの行数が、SIMD型プロセッサ部のプロセッサエレメント数の倍数である場合には、ダミー行を付加する必要はない。
【００３０】
次に、行数をプロセッサエレメント数の倍数とした後の画像データを、プロセッサエレメント数と同じ行数ごとのブロックに分割する。例えば、画像データＩＤ１にダミー行を付加した後の図７の画像データＩＤ２が、４行ごとのブロックＢ２１乃至Ｂ２３に分割される。なお、ブロックＢ２１は、画像データＩＤ２の１行目から４行目に相当し、ブロックＢ２２は、画像データＩＤ２の５行目から８行目に相当し、ブロックＢ２３は、画像データＩＤ２の９行目から１２行目（ただし、１１,１２行目はダミー行）に相当する。
【００３１】
次に、ブロックごとに縦横を入れ替え、入れ替えた後のブロックを縦に並べた画像データを生成する。例えば、図７の画像データＩＤ２から、図８に示される、ブロックＢ３１乃至Ｂ３３が縦に並べられた画像データＩＤ３が生成される。なお、ブロックＢ３１は、画像データＩＤ２のブロックＢ２１の左上隅の画素P1aを基点にして、ブロックＢ２１の縦横を入れ替えたブロックであり、ブロックＢ３２は、画像データＩＤ２のブロックＢ２２の左上隅の画素P1eを基点にして、ブロックＢ２２の縦横を入れ替えたブロックであり、ブロックＢ３３は、画像データＩＤ２のブロックＢ２３の左上隅の画素P1iを基点にして、ブロックＢ２３の縦横を入れ替えたブロックである。
【００３２】
そして、生成した画像データの画素をラスタ順に並べたものが、ステップＳ１の処理における最終的な画素の配列となる。
【００３３】
図９は、図３の画像データＩＤ１に対する、ステップＳ１における最終的な画素の配列を示している。すなわち、図９の画素の配列は、図８の画像データＩＤ３の画素をラスタ順に横に並べたものである。逆に、図８の画像データＩＤ３の画素の配列は、図９の画素の配列を、SIMD型プロセッサ部のプロセッサエレメント数と同じ数の４画素ごとに改行したものと等しい。
【００３４】
図８および図９の画素の配列では、画像データＩＤ１において水平方向に隣接する画素が、プロセッサエレメント数と同じ間隔で、すなわち、４つおきに配置されている。例えば、画像データＩＤ１のａ行目について見た場合、図９の画素の配列において、画素P1aが先頭から１番目、画素P2aが先頭から５番目、画素P3aが先頭から９番目といったように、画像データＩＤ１のａ行目において水平方向に隣接する画素が４つ置きに配置されている。これは、他の行の画素についても同様である。
【００３５】
なお、上述したようにダミー行を付加することにより、画像データＩＤ１の行数がプロセッサエレメント数の倍数でなくても、画像データＩＤ１の全ての行の画素について、水平方向に隣接する画素が４つ置きに配置されるようになる。
【００３６】
ステップＳ１において、演算ユニット２３は、例えば、図３の画像データＩＤ１が処理対象となっている場合、主記憶装置１３上で図５に示されるように並べられている画素の配列を、図９に示される最終的な画素の配列となるように、すなわち、図８の画像データＩＤ３の画素のラスタ順と同じ順番に、画像データＩＤ１の画素の並び替えを行う。
【００３７】
ステップＳ２において、SIMD型プロセッサ部は、水平方向の空間フィルタ処理を実行する。いまの例の場合、SIMD演算ユニット２１は、画像データＩＤ１に対して、水平方向の平均化フィルタ処理を行う。すなわち、SIMD演算ユニット２１は、画像データＩＤ１の各画素について、その画素とその画素の水平方向に隣接する画素との画素値の平均値を求め、求めた平均値を新しい画素値として置き換える。例えば、画素P5eについて考えた場合、画素P5e、画素P4eおよび画素P6eの画素値の平均値V5e'（＝（V4e＋V5e＋V6e）÷3）を求め、求めた平均値V5e'を画素P5eの新しい画素値とする処理が行われる。
【００３８】
なお、以下、水平方向の平均化フィルタ処理を実行した後の画像データＩＤ１の座標（x,y）の画素Pxyの画素値を、Vxy'と表す。
【００３９】
ところで、上述したように、SIMD演算ユニット２１は、１つの命令で４つのデータに対する処理を行うことが可能である。また、上述したように、ステップＳ１の処理において並べ替えた後の画素の配列においては、画像データＩＤ１の水平方向に隣接する画素が、SIMD型プロセッサ部のプロセッサエレメント数と同じ４つおきに配置されている。
【００４０】
従って、例えば、図８に示される画素の配列において注目する行（以下、注目行と称する）の４つの画素の水平方向の平均化フィルタ処理を、注目行と注目行の上下に隣接する行の、主記憶装置１３上で連続して配置されている１２個の画素を用いて一度に行うことができる。例えば、画素P4e乃至P4h、画素P5e乃至P5h、および、画素P6e乃至P6hの、主記憶装置１３上で連続して配置されている１２個の画素を用いて、画素P5e乃至P5hの４つの画素の水平方向の平均化フィルタ処理を一度に行うことができる。
【００４１】
なお、注目行の画素が画像データＩＤ１の左端または右端の画素である場合は、注目行と注目行の上または下のどちらか一方の行の８個の画素を用いて水平方向の平均化フィルタ処理が行われることになる。
【００４２】
これにより、SIMD演算ユニット２１は、図８に示される画素の配列において、先頭の行から順番に４画素ずつ読み出していきながら、先頭の行から順番に４画素ずつ水平方向の平均化フィルタ処理を実行することができる。従って、シャッフル命令等を用いて、SIMD型プロセッサ部内で画素の並び替えを行う必要がない。また、画像データＩＤ１の画素を配列の先頭から順番に読み出していけばよいため、必要な画素がキャッシュメモリ１２に保持されている確率を上げることができるとともに、必要な画素が格納されている主記憶装置１３のアドレスを頻繁に検索する必要がなくなる。その結果、処理を実行するためのプログラムの構成を簡素化することができ、処理時間を短縮することができる。
【００４３】
なお、ステップＳ２において、ステップＳ１に付加したダミーの画素についても、他の画素と同様に処理されるが、その演算結果は、画像データＩＤ１の他の画素に影響を及ぼすものではなく、そのまま廃棄すればよい。
【００４４】
ステップＳ３において、演算ユニット２３は、処理対象の画像データにおいて垂直方向に並んでいる画素が、メモリ上においてプロセッサエレメント数と同じ間隔で並ぶように画素を並び替える。
【００４５】
ここで、図１０乃至図１２を参照して、ステップＳ３の処理における最終的な画素の配列の決め方について説明する。
【００４６】
まず、画像データの列数、すなわち、画像データの水平方向の画素数が、SIMD型プロセッサ部のプロセッサエレメント数の倍数でない場合、列数がプロセッサエレメント数の倍数になるように、ダミーの画素からなるダミー列を画像データに付加する。
【００４７】
例えば、図３の画像データＩＤ１の場合、列数が９列であり、プロセッサエレメント数の倍数、すなわち、４の倍数でないため、図１０に示されるように、列数が４の倍数の１２列になるように、画像データＩＤ１の右端に３列のダミー列が付加される。なお、ダミー列の画素の画素値は、任意の値とすることができる。
【００４８】
なお、画像データの列数が、SIMD型プロセッサ部のプロセッサエレメント数の倍数である場合には、ダミー列を付加する必要はない。
【００４９】
次に、列数をプロセッサエレメント数の倍数とした後の画像データを、プロセッサエレメント数と同じ列数ごとのブロックに分割する。例えば、画像データＩＤ１にダミー列を付加した後の図１０の画像データＩＤ４が、４列ごとのブロックＢ４１乃至Ｂ４３に分割される。なお、ブロックＢ４１は、画像データＩＤ４の１列目から４列目に相当し、ブロックＢ４２は、画像データＩＤ４の５列目から８列目に相当し、ブロックＢ４３は、画像データＩＤ４の９列目から１２列目（ただし、１０乃至１２列目はダミー列）に相当する。
【００５０】
次に、各ブロックを縦に並べた画像データを生成する。例えば、図１０の画像データＩＤ４から、図１１に示される、画像データＩＤ４のブロックＢ４１乃至Ｂ４３を縦に並べた画像データＩＤ５が生成される。
【００５１】
そして、生成した画像データの画素をラスタ順に並べたものが、ステップＳ３の処理における最終的な画素の配列となる。
【００５２】
図１２は、図３の画像データＩＤ１に対する、ステップＳ３における最終的な画素の配列を示している。すなわち、図１２の画素の配列は、図１１の画像データＩＤ４の画素をラスタ順に横に並べたものである。逆に、図１１の画像データＩＤ５の画素の配列は、図１２の画素の配列を、SIMD型プロセッサ部のプロセッサエレメント数と同じ数の４画素ごとに改行したものと等しい。
【００５３】
図１１および図１２の画素の配列では、画像データＩＤ１において垂直方向に隣接する画素が、プロセッサエレメント数と同じ間隔で、すなわち、４つおきに配置されている。例えば、画像データＩＤ１の１列目について見た場合、図１２の画素の配列において、画素P1aが先頭から１番目、画素P1bが先頭から５番目、画素P1cが先頭から９番目といったように、画像データＩＤ１の１列目において垂直方向に隣接する画素が４つ置きに配置されている。これは、他の列の画素についても同様である。
【００５４】
なお、上述したようにダミー列を付加することにより、画像データＩＤ１の列数がプロセッサエレメント数の倍数でなくても、画像データＩＤ１の全ての列の画素について、垂直方向に隣接する画素が４つ置きに配置されるようになる。
【００５５】
ステップＳ３において、演算ユニット２３は、例えば、図３の画像データＩＤ１が処理対象となっている場合、主記憶装置１３上で図９に示されるように並べられている画素の配列を、図１２に示される最終的な画素の配列となるように、すなわち、図１１の画像データＩＤ４の画素のラスタ順と同じ順番に、水平方向の平均化フィルタ処理を実行した後の画像データＩＤ１の画素の並び替えを行う。
【００５６】
ステップＳ４において、SIMD型プロセッサ部は、垂直方向の空間フィルタ処理を実行する。いまの例の場合、SIMD演算ユニット２１は、画像データＩＤ１に対して、垂直方向の平均化フィルタ処理を行う。すなわち、SIMD演算ユニット２１は、水平方向の平均化フィルタ処理を実行した後の画像データＩＤ１の各画素について、その画素とその画素の垂直方向に隣接する画素との画素値の平均値を求め、求めた平均値を新しい画素値として置き換える。例えば、画素P5eについて考えた場合、画素P5e、画素P5dおよび画素P5fの画素値の平均値V5e''（＝（V5d'＋V5e'＋V5f'）÷3）を求め、求めた平均値V5e''を画素P5eの新しい画素値とする処理が行われる。
【００５７】
なお、以下、垂直方向の平均化フィルタ処理を実行した後の画像データＩＤ１の座標（x,y）の画素Pxyの画素値を、Vxy''と表す。
【００５８】
ところで、上述したように、ステップＳ３の処理において並べ替えた後の画素の配列においては、画像データＩＤ１の垂直方向に隣接する画素が、SIMD型プロセッサ部のプロセッサエレメント数と同じ４つおきに配置されている。従って、ステップＳ２の処理と同様に、SIMD演算ユニット２１は、図１１に示される画素の配列において、先頭の行から順番に４画素ずつ読み出していきながら、先頭の行から順番に４画素ずつ垂直方向の平均化フィルタ処理を実行することができる。そして、このステップＳ４の処理は、処理対象となる画素の配列が変更されているだけで、ステップＳ２の処理と実質的に同じ処理となる。
【００５９】
ここで、図１３を参照して、ステップＳ２およびＳ４の処理で実行される平均化フィルタ処理の演算について、もう少し詳細に説明する。なお、以下、画像データＩＤ１の画素P5fに注目して、説明を行う。
【００６０】
図１３は、ステップＳ２およびＳ４の処理において、注目画素である画素P5fおよび画素P5fに隣接する８つの画素（画素P4e，P5e，P6e，P4f，P6f，P4g，P5gおよびP6g）の画素値の変化を示した図である。
【００６１】
図１３のいちばん上の図は、処理前の画素値を示している。処理前の画素P4e乃至P6gの画素値は、それぞれV4e乃至V6gである。
【００６２】
図１３のまん中の図は、ステップＳ２の処理で水平方向の平均化フィルタ処理を実行した後の画素値を示している。水平方向の平均化フィルタ処理の実行後の画素P4e乃至P6gの画素値は、それぞれV4e'乃至V6g'となる。そのうち、画素P5e乃至P5gの画素値V5e'乃至V5g'は、以下の式（１）乃至（３）により求められる。
【００６３】
V5e'＝(V4e＋V5e＋V6e)/3  ・・・（１）
V5f'＝(V4f＋V5f＋V6f)/3  ・・・（２）
V5g'＝(V4g＋V5g＋V6g)/3  ・・・（３）
【００６４】
図１３のいちばん下の図は、ステップＳ４の処理で垂直方向の平均化フィルタ処理を実行した後の画素値を示している。垂直方向の平均化フィルタ処理の実行後の画素P4e乃至P6gの画素値は、それぞれV4e''乃至V6g''となる。そのうち、注目画素P5fの画素値V5f''は、以下の式（４）により求められる。
【００６５】
V5f''＝(V5e'＋V5f'＋V5g')/3
＝｛(V4e＋V5e＋V6e)/3＋(V4f＋V5f＋V6f)/3＋(V4g＋V5g＋V6g)/3｝/3
＝(V4e＋V5e＋V6e＋V4f＋V5f＋V6f＋V4g＋V5g＋V6g)/9    ・・・（４）
【００６６】
なお、この方法では、各画素の画素値を求める際に、２回除算を行う必要があり、厳密に言えば、式（４）の最終式を直接用いて１回の除算だけで画素値を求める場合と比較して、演算結果に相違が出る場合がある。しかし、各画素の画素値は量子化されるため、その演算結果の相違は、実際には問題にならないレベルとなる。
【００６７】
図２に戻り、ステップＳ５において、演算ユニット２３は、画素の配列を元に戻す。すなわち、演算ユニット２３は、主記憶装置１３上における画像データの画素の配列を、ステップＳ１の処理により並び替える前の画素の配列に戻す。いまの例の場合、主記憶装置１３上における、水平方向および垂直方向の平均化フィルタ処理を実行した後の画像データＩＤ１の画素の配列が、図１２に示される配列から、図５に示される配列に戻される。
【００６８】
ステップＳ６において、演算ユニット２３は、各画素に対して最終的な処理を行う。なお、この処理は、現在例として挙げている平均化フィルタ処理では実行する必要はないため、具体例として、図１３乃至図１５を参照しながら、８方向のラプラシアンフィルタを画像データＩＤ１に適用する場合について説明する。なお、以下、画像データＩＤ１の画素P5fに注目して、説明を行う。
【００６９】
図１４は、８方向のラプラシアンフィルタに用いるカーネルの例を示している。カーネル１０１を用いたラプラシアンフィルタを適用した場合、注目画素P5fの画素値Vは、以下の式（５）により求められる。
【００７０】
V＝V4e×(-1)＋V5e×(-1)＋V6e×(-1)＋V4f×(-1)＋V5f×8＋V6f×(-1)
＋V4g×(-1)＋V5g×(-1)＋V6g×(-1)      ・・・（５）
【００７１】
ただし、実際の処理では、まず、ステップＳ２およびＳ４の処理において、図１５の縦３行×横３列のカーネル１１１を用いた空間フィルタ処理が行われる。すなわち、ステップＳ２において、以下の式（６）乃至（８）の演算が行われる。
【００７２】
V5e'＝V4e×(-1)＋V5e×(-1)＋V6e×(-1)  ・・・（６）
V5f'＝V4f×(-1)＋V5f×(-1)＋V6f×(-1)  ・・・（７）
V5g'＝V4g×(-1)＋V5g×(-1)＋V6g×(-1)  ・・・（８）
【００７３】
次に、ステップＳ４において、以下の式（９）の演算が行われる。
【００７４】
V5f''＝V5e'＋V5f'＋V5g'
＝V4e×(-1)＋V5e×(-1)＋V6e×(-1)＋V4f×(-1)＋V5f×(-1)＋V6f×(-1)
＋V4g×(-1)＋V5g×(-1)＋V6g×(-1)    ・・・（９）
【００７５】
最後に、ステップＳ６において、以下の式（１０）の演算が行われる。
【００７６】
V5f'''＝V5f''＋V5f×9
＝V4e×(-1)＋V5e×(-1)＋V6e×(-1)＋V4f×(-1)＋V5f×8＋V6f×(-1)
＋V4g×(-1)＋V5g×(-1)＋V6g×(-1)    ・・・（１０）
【００７７】
このようにして、カーネルの範囲内の各画素に対する演算が、画素ごとに異なる空間フィルタ処理についても実行することが可能になる。
【００７８】
以上のようにして、SIMDを用いた画像データの空間フィルタ処理をより高速に実行することが可能になる。
【００７９】
なお、上述した例とは逆に、垂直方向、水平方向の順番に空間フィルタ処理を実行する場合、図２のステップＳ１およびＳ２の処理と、ステップＳ３およびＳ４の処理の順番を入れ替えるようにすればよい。
【００８０】
また、水平方向の空間フィルタ処理のみを実行する場合、ステップＳ３およびＳ４の処理を省略することができ、垂直方向の空間フィルタ処理のみを実行する場合、ステップＳ１およびＳ２の処理を省略することができる。
【００８１】
さらに、以上の説明では、平均化フィルタ処理およびラプラシアンフィルタ処理を実行する場合の例を示したが、本発明は、その他の空間フィルタ処理を実行する場合にも適用することが可能である。
【００８２】
また、上述した一連の処理は、ハードウエアにより実行することもできるし、ソフトウエアにより実行することもできる。
【００８３】
なお、SIMD型プロセッサ１１が実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
【００８４】
なお、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
【図面の簡単な説明】
【００８５】
【図１】本発明を適用した情報処理装置の一実施の形態を示すブロック図である。
【図２】情報処理装置により実行される空間フィルタ処理を説明するためのフローチャートである。
【図３】画像データの画素の配列の例を示す図である。
【図４】平均化フィルタに用いるカーネルの例を示す図である。
【図５】主記憶装置上での画像データの画素の配列の例を示す図である。
【図６】主記憶装置上での画像データの画素の配列の例を示す図である。
【図７】図２のステップＳ２における画素の並び替えを説明するための図である。
【図８】図２のステップＳ２における画素の並び替えを説明するための図である。
【図９】図２のステップＳ２の処理における最終的な画素の配列を示す図である。
【図１０】図２のステップＳ４における画素の並び替えを説明するための図である。
【図１１】図２のステップＳ４における画素の並び替えを説明するための図である。
【図１２】図２のステップＳ４の処理における最終的な画素の配列を示す図である。
【図１３】平均化フィルタ処理の詳細について説明するための図である。
【図１４】ラプラシアンフィルタに用いるカーネルの例を示す図である。
【図１５】図２のフローチャートに従って、ラプラシアンフィルタを実行する場合の処理を説明するための図である。
【符号の説明】
【００８６】
１  情報処理装置，  １１  SIMD型プロセッサ，  １２  キャッシュメモリ，  １３  主記憶装置，  ２１  SIMD演算ユニット，  ２２  SIMDレジスタ，  ２３  演算ユニット，  ２４  レジスタ
【図１】
2010134612.tif 000003
【図２】
2010134612.tif 000004
【図３】
2010134612.tif 000005
【図４】
2010134612.tif 000006
【図５】
2010134612.tif 000007
【図６】
2010134612.tif 000008
【図７】
2010134612.tif 000009
【図８】
2010134612.tif 000010
【図９】
2010134612.tif 000011
【図１０】
2010134612.tif 000012
【図１１】
2010134612.tif 000013
【図１２】
2010134612.tif 000014
【図１３】
2010134612.tif 000015
【図１４】
2010134612.tif 000016
【図１５】
2010134612.tif 000017