(57)【要約】【課題】カーネル係数が左右対称である対称型画像フィルタを用いる場合、対称型画像フィルタのフィルタリング処理を高速化する為にＳＩＭＤ命令を有効利用する技術を提供すること。【解決手段】行単位中間データ生成部１は、Ｑ個の連続したデータを同時に処理できるＳＩＭＤ命令を用いて、左右いずれかの｛（Ｎ＋１）÷２｝列の各列におけるＭ個の各カーネル係数と、一行分の画素数がＰである画像データにおける縦方向のＭ個の各画素との累積加算を、Ｐ÷Ｑ回行なうことで画像データの一行分の中間データを生成し、記憶部３の中間データ格納領域Ｔに格納する。その後、行単位中間データ利用部２は、記憶部３の中間データ格納領域Ｔに格納れている中間データを読み出し、この読み出した中間データを累積加算して画素値を算出する。【選択図】  図１
2004199222.tif 000002
【特許請求の範囲】
【請求項１】
画像データをＮ×Ｍ（Ｎ及びＭは奇数かつ３以上の自然数）のカーネル係数から成る左右対称型のフィルタで処理する装置であって、
中心列に対して左側列又は右側列のカーネル係数と、この左側列又は右側列のカーネル係数と対応する画像データの列要素とを累積加算する演算手段と、
前記演算手段で累積加算された演算結果を中間データとして記憶する記憶手段と、
前記記憶手段に記憶されている中間データを累積加算し、前記画像データの画素値を算出する画素結果計算手段と
を有することを特徴とする対称型画像フィルタ処理装置。
【請求項２】
前記演算手段は、左側列又は右側列のカーネル係数と、この左側列又は右側列のカーネル係数と対応する画像データの列要素とを累積加算して画像データの一行分の中間データを算出するように構成され、
前記画素結果計算手段は、前記画像データの各画素の位置に対応する中間データを前記記憶手段から読み出し、この読み出した中間データを累積加算して画素値を算出するように構成されていることを特徴とする請求項１に記載の対称型画像フィルタ処理装置。
【請求項３】
前記演算手段及び前記画素結果計算手段は、ＳＩＭＤ命令を用いて、累積加算の演算を行なうように構成されていることを特徴とする請求項１又は請求項２に記載の対称型画像フィルタ処理装置。
【請求項４】
前記画像データは一行分の画素数がＰ（Ｐは自然数）であり、
前記演算手段は、Ｑ個（Ｑ＞１かつＰ＞Ｑの条件を満たす自然数）の連続したデータを同時に処理できるＳＩＭＤ命令を用いて、左右いずれかの｛（Ｎ＋１）／２｝列の各列におけるＭ個の各カーネル係数と、画像データにおける縦方向のＭ個の各画素との累積加算を、Ｐ／Ｑ回行なうことで画像データの一行分の中間データを生成するように構成されていることを特徴とする請求項１に記載の対称型画像フィルタ処理装置。
【請求項５】
Ｎ×Ｍ（Ｎ及びＭは奇数かつ３以上の自然数）のカーネル係数から成る左右対称型のフィルタを用いて、コンピュータに画像データをフィルタ処理させるプログラムであって、
前記プログラムは、コンピュータを、
中心列に対して左側列又は右側列のカーネル係数と、この左側列又は右側列のカーネル係数と対応する画像データの列要素とを累積加算する演算手段と、
前記演算手段で累積加算された演算結果を中間データとして記憶する手段と、
前記記憶手段に記憶されている中間データを累積加算し、前記画像データの画素値を算出する算出手段として機能させる
ことを特徴とするプログラム。
【請求項６】
前記プログラムの前記演算手段は、左側列又は右側列のカーネル係数と、この左側列又は右側列のカーネル係数と対応する画像データの列要素とを累積加算して画像データの一行分の中間データを算出する手段であり、
前記画素結果計算手段は、前記記憶された画像データの各画素の位置に対応する中間データを読み出し、この読み出した中間データを累積加算して画素値を算出する手段として機能することを特徴とする請求項５に記載のプログラム。
【請求項７】
前記プログラムの前記演算手段及び前記画素結果計算手段は、ＳＩＭＤ命令を用いて、累積加算の演算を行なう手段として機能することを特徴とする請求項５又は請求項６に記載のプログラム。
【請求項８】
前記画像データは一行分の画素数がＰ（Ｐは自然数）であり、前記プログラムの前記演算手段は、Ｑ個（Ｑ＞１かつＰ＞Ｑの条件を満たす自然数）の連続したデータを同時に処理できるＳＩＭＤ命令を用いて、左右いずれかの｛（Ｎ＋１）／２｝列の各列におけるＭ個の各カーネル係数と、画像データにおける縦方向のＭ個の各画素との累積加算を、Ｐ／Ｑ回行なうことで画像データの一行分の中間データを生成する手段として機能することを特徴とする請求項５に記載のプログラム。
【請求項９】
画像データをＮ×Ｍ（Ｎ及びＭは奇数かつ３以上の自然数）のカーネル係数から成る左右対称型のフィルタで処理する方法であって、
（ａ）中心列に対して左側列又は右側列のカーネル係数と、この左側列又は右側列のカーネル係数と対応する画像データの列要素とを累積加算するステップと、
（ｂ）前記（ａ）のステップで算出された累積加算結果を中間データとして記憶するステップと、
（ｃ）前記（ｂ）ステップで記憶された中間データを累積加算し、前記画像データの画素値を算出するステップと
を有することを特徴とする対称型画像フィルタ処理方法。
【請求項１０】
前記（ａ）ステップは、左側列又は右側列のカーネル係数と、この左側列又は右側列のカーネル係数と対応する画像データの列要素とを累積加算して画像データの一行分の中間データを算出するステップであり、
前記（ｃ）ステップは、前記（ｂ）ステップで記憶した画像データの各画素の位置に対応する中間データを読み出し、この読み出した中間データを累積加算して画素値を算出するステップであることを特徴とする請求項９に記載の対称型画像フィルタ処理方法。
【請求項１１】
前記画像データは一行分の画素数がＰ（Ｐは自然数）であり、
前記（ａ）ステップは、Ｑ個（Ｑ＞１かつＰ＞Ｑの条件を満たす自然数）の連続したデータを同時に処理できるＳＩＭＤ命令を用いて、左右いずれかの｛（Ｎ＋１）／２｝列の各列におけるＭ個の各カーネル係数と、画像データにおける縦方向のＭ個の各画素との累積加算を、Ｐ／Ｑ回行なうことで画像データの一行分の中間データを生成するステップであることを特徴とする請求項９に記載の対称型画像フィルタ処理方法。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
本発明は、マルチメディア処理を高速化する為に拡張されたＳＩＭＤ(Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉ  Ｄａｔａ）命令と呼ばれる命令セットを有する計算機において、対称型画像フィルタのフィルタリング処理に関するものである。
【０００２】
【従来技術】
既存の汎用プロセッサやＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｔｏｃｅｓｓｏｒ）が持つ、一つの命令で複数のデータを同時に処理するＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  ｓｔｒｅａｍ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ  ｓｔｒｅａｍ）命令を用いて、画像データに対するフィルタ処理が行なわれている。例えば、画像フィルタのカーネルサイズをＮ×Ｍ、画像データの横幅画素数をＰとした場合、通常、画像データの１行分（Ｐ個）の結果画素を求めるのに、Ｐ×２×Ｎ×Ｍステップの演算処理（N×M回の乗算と、M×N回の加算による積和演算とをP回実施）が必要である。
【０００３】
具体的には、図７に示すように、一度にＱ個（但し、Ｑ＞１，Ｐ＞Ｑ）の連続したデータを同時に処理できるＳＩＭＤ命令（平行四辺形で囲まれている部分が、ＳＩＭＤ命令を用いる処理を表す）を用いて、縦方向のＭ画素分のソース画素Ｓと、このＭ画素分のソース画素Ｓに対応するカーネル係数Ｋとを乗じ、この乗算結果を累積加算する。この処理を縦方向画素の読み出し開始位置から横方向に１画素づつ移動させながらＮ回繰り返す。この結果、１行分の結果画素が求められる。このように、ＳＩＭＤ命令を用いることで、１行分の結果画素を求めるのに、（２×Ｎ×Ｍ）×Ｐ÷Ｑステップの演算処理で済む。つまり、ＳＩＭＤ命令を用いれば、ＳＩＭＤ命令を用いないで結果画素を求める場合に比べてＱ倍の高速化が実現できる。
ここで、左右の対称性を持つフィルタを使用して画像処理する技術として、例えば、画像１行中の画素数と同じかそれ以下の数個の処理要素を用意し、画素単位で並列処理を行ない、フィルタリング処理における演算回数、転送回数を削減して高速処理を行なう技術がある（特許文献１参照）。
【０００４】
しかしながら、左右の対称性を持つフィルタを使用して画像処理する技術は、如何にしてＳＩＭＤ命令を活用すれば、左右の対称性を持つフィルタを効率良く活用できるかを想定することができない。
【０００５】
【特許文献１】
第２８６２３８８号
【０００６】
【発明が解決しようとする課題】
ところで、画像フィルタのカーネル係数は、多くの場合、左右に対称性を有する。この為、例えば左側の画素結果を求める際に計算した積和演算結果を、右側の画素結果を求める際にも用いることができる。
【０００７】
しかしながら、従来の方法では、左側の画素結果を求める際に計算した積和結果を用いずに、再度、最初から積和結果を求め右側の画素結果を計算する。この結果、カーネル係数の対称性を利用した更なる高速化を実現できない問題点があった。
【０００８】
そこで、本発明の目的は、カーネル係数が左右対称である対称型画像フィルタを用いる場合、対称型画像フィルタのフィルタリング処理を高速化する為にＳＩＭＤ命令を有効利用する技術を提供することである。
【０００９】
【課題を解決するための手段】
本発明の目的を達成する第１の発明は、画像データをＮ×Ｍ（Ｎ及びＭは奇数かつ３以上の自然数）のカーネル係数から成る左右対称型のフィルタで処理する装置であって、
中心列に対して左側列又は右側列のカーネル係数と、この左側列又は右側列のカーネル係数と対応する画像データの列要素とを累積加算する演算手段と、
前記演算手段で累積加算された演算結果を中間データとして記憶する記憶手段と、
前記記憶手段に記憶されている中間データを累積加算し、前記画像データの画素値を算出する画素結果計算手段とを有する。
【００１０】
本発明の目的を達成する第２の発明は、上記第１の発明において、前記演算手段は、左側列又は右側列のカーネル係数と、この左側列又は右側列のカーネル係数と対応する画像データの列要素とを累積加算して画像データの一行分の中間データを算出するように構成され、
前記画素結果計算手段は、前記画像データの各画素の位置に対応する中間データを前記記憶手段から読み出し、この読み出した中間データを累積加算して画素値を算出するように構成されていることを特徴とする。
【００１１】
本発明の目的を達成する第３の発明は、上記第１又は第２の発明において、前記演算手段及び前記画素結果計算手段は、ＳＩＭＤ命令を用いて、累積加算の演算を行なうように構成されていることを特徴とする。
【００１２】
本発明の目的を達成する第４の発明は、上記第１の発明において、前記画像データは一行分の画素数がＰ（Ｐは自然数）であり、
前記演算手段は、Ｑ個（Ｑ＞１かつＰ＞Ｑの条件を満たす自然数）の連続したデータを同時に処理できるＳＩＭＤ命令を用いて、左右いずれかの｛（Ｎ＋１）／２｝列の各列におけるＭ個の各カーネル係数と、画像データにおける縦方向のＭ個の各画素との累積加算を、Ｐ／Ｑ回行なうことで画像データの一行分の中間データを生成するように構成されていることを特徴とする。
【００１３】
本発明の目的を達成する第５の発明は、Ｎ×Ｍ（Ｎ及びＭは奇数かつ３以上の自然数）のカーネル係数から成る左右対称型のフィルタを用いて、コンピュータに画像データをフィルタ処理させるプログラムであって、
前記プログラムは、コンピュータを、
中心列に対して左側列又は右側列のカーネル係数と、この左側列又は右側列のカーネル係数と対応する画像データの列要素とを累積加算する演算手段と、
前記演算手段で累積加算された演算結果を中間データとして記憶する手段と、
前記記憶手段に記憶されている中間データを累積加算し、前記画像データの画素値を算出する算出手段として機能させることを特徴とする。
【００１４】
本発明の目的を達成する第６の発明は、上記第５の発明において、前記プログラムの前記演算手段は、左側列又は右側列のカーネル係数と、この左側列又は右側列のカーネル係数と対応する画像データの列要素とを累積加算して画像データの一行分の中間データを算出する手段であり、
前記画素結果計算手段は、前記記憶された画像データの各画素の位置に対応する中間データを読み出し、この読み出した中間データを累積加算して画素値を算出する手段として機能することを特徴とする。
【００１５】
本発明の目的を達成する第７の発明は、上記第５又は第６の発明において、前記プログラムの前記演算手段及び前記画素結果計算手段は、ＳＩＭＤ命令を用いて、累積加算の演算を行なう手段として機能することを特徴とする。
【００１６】
本発明の目的を達成する第８の発明は、上記第５の発明において、前記画像データは一行分の画素数がＰ（Ｐは自然数）であり、前記プログラムの前記演算手段は、Ｑ個（Ｑ＞１かつＰ＞Ｑの条件を満たす自然数）の連続したデータを同時に処理できるＳＩＭＤ命令を用いて、左右いずれかの｛（Ｎ＋１）／２｝列の各列におけるＭ個の各カーネル係数と、画像データにおける縦方向のＭ個の各画素との累積加算を、Ｐ／Ｑ回行なうことで画像データの一行分の中間データを生成する手段として機能することを特徴とする。
【００１７】
本発明の目的を達成する第９の発明は、画像データをＮ×Ｍ（Ｎ及びＭは奇数かつ３以上の自然数）のカーネル係数から成る左右対称型のフィルタで処理する方法であって、
（ａ）中心列に対して左側列又は右側列のカーネル係数と、この左側列又は右側列のカーネル係数と対応する画像データの列要素とを累積加算するステップと、
（ｂ）前記（ａ）のステップで算出された累積加算結果を中間データとして記憶するステップと、
（ｃ）前記（ｂ）ステップで記憶された中間データを累積加算し、前記画像データの画素値を算出するステップとを有することを特徴とする。
【００１８】
本発明の目的を達成する第１０の発明は、上記第９の発明において、前記（ａ）ステップは、左側列又は右側列のカーネル係数と、この左側列又は右側列のカーネル係数と対応する画像データの列要素とを累積加算して画像データの一行分の中間データを算出するステップであり、
前記（ｃ）ステップは、前記（ｂ）ステップで記憶した画像データの各画素の位置に対応する中間データを読み出し、この読み出した中間データを累積加算して画素値を算出するステップであることを特徴とする。
【００１９】
本発明の目的を達成する第１１の発明は、前記画像データは一行分の画素数がＰ（Ｐは自然数）であり、
前記（ａ）ステップは、Ｑ個（Ｑ＞１かつＰ＞Ｑの条件を満たす自然数）の連続したデータを同時に処理できるＳＩＭＤ命令を用いて、左右いずれかの｛（Ｎ＋１）／２｝列の各列におけるＭ個の各カーネル係数と、画像データにおける縦方向のＭ個の各画素との累積加算を、Ｐ／Ｑ回行なうことで画像データの一行分の中間データを生成するステップであることを特徴とする。
【００２０】
【発明の実施の形態】
本発明の実施の形態について図面を参照して詳細に説明する。
【００２１】
図１は本発明の対象型画像フィルタを実現する為のブロック図である。図２は対称型画像フィルタにおける中間データの再利用の仕方を説明する為の図である。
【００２２】
本発明の左右対称型フィルタ処理装置は、ソース画素を求める際に用いる累積加算中間結果（中間データ）を生成する行単位中間データ生成部１と、行単位中間データ生成部１で生成された中間データを用いて１行部の対称型画像フィルタの結果画素を求める行単位中間データ利用部２と、行単位中間データ生成部１で生成された中間データと行単位中間データ利用部２とで求められた対称型画像フィルタの結果画素とを記憶する記憶部３とを持つ。
【００２３】
そして、画像の横幅画素数（１行分の画素数）をＰとし、ＳＩＭＤ命令は一度にＱ個（但し Ｑ＞１、Ｐ＞Ｑの条件を満たす自然数）の連続したデータを同時に処理できるものとする。また、ＳＩＭＤ命令の実行の際に用いられるＳＩＭＤ命令用レジスタ（以下、ＳＩＭＤレジスタという）は、同時にＱ個のデータ要素を格納できるレジスタとする。
【００２４】
尚、ＳＩＭＤ命令を用いて、複数のデータを同時に処理する技術は既存の技術であることから、詳細な説明は省略する。
【００２５】
ところで、Ｎ×Ｍのカーネルサイズの左右対称型カーネル係数（左右対称型フィルタ）を用いて、ある結果画素を求める場合、フィルタリングの対象となる画像データの縦方向Ｍ画素と、このＭ画素に対応するカーネル係数との積和演算結果は、対象画像の（Ｎ＋１）÷２画素だけ離れたもう一つの結果画素を求める際にも使用できる性質がある。例えば、図２に示す通り、Ｎ×Ｍのカーネルサイズ（但し、Ｎ，Ｍは奇数かつ３以上の自然数）の左右対称型カーネル係数（左右対称型画像フィルタ）を用いて、対象画像データから結果画素Ｄ（ｉ，ｊ），Ｄ（ｉ＋２，ｊ）を求める場合、
Ｄ（ｉ，ｊ）＝  Ｓ（ｉ，ｊ＋０）＊Ｋ（０，０）＋Ｓ（ｉ＋１，ｊ＋０）＊Ｋ（１，０）＋Ｓ（ｉ＋２，ｊ＋０）＊Ｋ（２，０）＋Ｓ（ｉ，ｊ＋１）＊Ｋ（０，１）＋Ｓ（ｉ＋１，ｊ＋１）＊Ｋ（１，１）＋Ｓ（ｉ＋２，ｊ＋１）＊Ｋ（２，１）＋Ｓ（ｉ，ｊ＋２）＊Ｋ（０，２）＋Ｓ（ｉ＋１，ｊ＋２）＊Ｋ（１，２）＋Ｓ（ｉ＋２，ｊ＋２）＊Ｋ（２，２）
Ｄ（ｉ＋２，ｊ）＝  Ｓ（ｉ＋２，ｊ＋０）＊Ｋ（０，０）＋Ｓ（ｉ＋３，ｊ＋０）＊Ｋ（１，０）＋Ｓ（ｉ＋４，ｊ＋０）＊Ｋ（２，０）＋Ｓ（ｉ＋２，ｊ＋１）＊Ｋ（０，１）＋Ｓ（ｉ＋３，ｊ＋１）＊Ｋ（１，１）＋Ｓ（ｉ＋４，ｊ＋１）＊Ｋ（２，１）＋Ｓ（ｉ＋２，ｊ＋２）＊Ｋ（０，２）＋Ｓ（ｉ＋３，ｊ＋２）＊Ｋ（１，２）＋Ｓ（ｉ＋４，ｊ＋２）＊Ｋ（２，２）
の積和計算を行なって求める。そして、求めた結果画素には、共通項、
Ｓ（ｉ＋２，ｊ＋０）＊Ｋ（２，０）＝  Ｓ（ｉ＋２，ｊ＋０）＊Ｋ（０，０）
Ｓ（ｉ＋２，ｊ＋１）＊Ｋ（２，１）＝  Ｓ（ｉ＋２，ｊ＋１）＊Ｋ（０，１）
Ｓ（ｉ＋２，ｊ＋２）＊Ｋ（２，２）＝  Ｓ（ｉ＋２，ｊ＋２）＊Ｋ（０，２）
（但し、Ｋ（２，０）＝＝Ｋ（０，０），Ｋ（２，１）＝＝Ｋ（０，１），Ｋ（２，２）＝＝Ｋ（０，２））
が存在する。
【００２６】
そこで、本願発明は、一方の結果画素を求める際の１行分の演算結果（共通項）を中間データとし、この中間データを利用して他方の結果画素を求めるものである。
【００２７】
次に、本発明の構成要素の概略を図１に基づいて述べる。
【００２８】
行単位中間データ生成部１は、ＳＩＭＤ命令を用いて、１行分のソース画素とカーネル係数との積和の累積加算結果を中間データとして生成し、この中間データを記憶部３の中間データ格納領域Ｔに格納するものである。
【００２９】
行単位中間データ利用部２は、記憶部３の中間データ格納領域Ｔに格納されたＮ個の中間データを読み出し、更にＳＩＭＤ命令で累積加算していくことで、 １行分の対称型画像フィルタの画素結果を得るものである。尚、画像全体に対するフィルタ処理は、上述した1行分の処理を画像の行数分だけ繰り返すことにより行なう。
【００３０】
記憶部３は、行単位中間データ生成部１により生成された中間データを格納する中間データ格納領域Ｔと、行単位中間データ利用部２で求められた結果画素を格納する結果画素格納領域Ｄとを有するものである。
【００３１】
続いて、各部の構成の動作について具体的に説明する。
【００３２】
図３は各部の動作を説明する為のフローチャートである。
【００３３】
尚、以下の説明では、ソース画素Ｓから結果画素を求める際、現在処理しているソース画像Ｓの行番号を表す変数をｊ、ソース画像Ｓの一行中のどの位置（列）に対応する中間データを求めているかを表す変数をｉ、Ｍ×Ｎ個のカーネル係数のどの列を用いて処理するかを表す変数をｎ、Ｍ×Ｎ個のカーネル係数のｎ列のどの行を用いて処理するかを表す変数をｍとして説明する。
【００３４】
まず、行単位中間データ生成部１について図３を用いて説明する。
【００３５】
行単位中間データ生成部１は、変数ｉ，ｎ，ｍを”０”に初期化する。また、ＳＩＭＤレジスタＸ内の全要素を”０”に初期化する（Ｓ１１〜Ｓ１３）。
【００３６】
次に、行単位中間データ生成部１は、ＳＩＭＤ加算命令やＳＩＭＤ乗算命令を一回づつ用いて、ｊ＋ｍ行目のｉ列目からｉ＋Ｑ−１列目までのQ個の連続した各ソース画像Ｓ（ｉ，ｊ＋ｍ）〜Ｓ（ｉ＋Ｑ−１，ｊ＋ｍ）に、同時にカーネル係数Ｋ（ｎ，ｍ）を乗じ、これにより得られたＱ個の連続した結果を、同時にＳＩＭＤレジスタＸ内の連続した要素位置に格納する（Ｓ１４）。
【００３７】
そして、行単位中間データ生成部１は、変数ｍを１だけ増加させ、ｍとＭとの大小を比較する。mがMに満たない場合、Ｓ１４の動作を繰り返し、ｍがM以上である場合、次の処理を行なう（Ｓ１５）。すなわち、行単位中間データ生成部１は、ＳＩＭＤレジスタＸに格納したＱ列分のソース画素の夫々に、同じ１列分のカーネル係数を乗じて累積加算し、これにより得られたＱ個の連続した中間データを、１回のＳＩＭＤストア命令により、記憶部３の中間データ格納領域Ｔの連続した位置（ｉ，ｎ）〜（ｉ＋Ｑ−１，ｎ）に格納する（Ｓ１６）。
【００３８】
このようにして、記憶部３の中間データ格納領域Ｔには、ソース画素のｉ列目とカーネル係数のｎ列目との積和結果が格納される。
【００３９】
また、行単位中間データ生成部１は、変数ｎを”１”だけ増加させ、ｎの値が（Ｎ＋１）÷２に満たない場合、Ｓ１３のステップに戻り、ｎの値が（Ｎ＋１）÷２以上である場合、次の処理を行なう（Ｓ１７）。すなわち、行単位中間データ生成部１は、ｉをＱだけ増加させ、ｉの値がＰの値に満たない場合、Ｓ１２のステップに戻る。一方、ｉの値がＰの値以上である場合、中間データの生成処理を終了する（Ｓ１８）。
【００４０】
このようにして、行単位中間データ生成部１は、積和演算をＰ÷Ｑ回（Ｐ÷Ｑが割り切れない場合にはＰ÷Ｑ（余り切り捨て）＋１回）行なって、｛Ｐ×（Ｎ＋１）÷２｝個の中間データを生成する。
【００４１】
次に、行単位中間データ利用部２について図３を用いて説明する。
【００４２】
行単位中間データ利用部２は、変数ｉ，ｎ，ｍを”０”に初期化する。また、ＳＩＭＤレジスタＸ内の各要素を”０”に初期化する（Ｓ２１〜Ｓ２２）。
【００４３】
行単位中間データ利用部２は、結果画素を求める際に参照するべき中間データを特定する為、ｎの値と（Ｎ＋１）÷２の値との大小を比較する。ｎの値が（Ｎ＋１）÷２の値より大きい場合、Ｎ−１−ｎの値を変数ｏとし、ｎの値が（Ｎ＋１）÷２の値より小さい場合、ｎの値を変数ｏとする。これにより記憶部３の中間データ格納領域Ｔ（ｉ＋ｎ，ｏ）〜（ｉ＋Ｑ−１＋ｎ，ｏ）に格納されいるＱ個 の連続した中間データが参照すべき中間データであると特定する。更に、行単位中間データ利用部２は、特定した中間データを１回のＳＩＭＤ加算命令で、ＳＩＭＤレジスタX内の連続した各要素に累積加算する（Ｓ２３）。
【００４４】
その後、行単位中間データ利用部２は、ｎの値を”１”だけ増加させ、この増加させたｎの値とＮの値とを比較する。ｎの値がＮの値に満たない場合、Ｓ２３に戻り、ｎの値がＮの値以上である場合、次の処理を行なう（Ｓ２４）。すなわち、行単位中間データ利用部２は、Ｓ２３の動作をＮ回繰り返す。この結果、求められた結果画素値を、1回のＳＩＭＤストア命令により記憶部２の結果画素格納領域Ｄの連続した位置Ｄ（ｉ，ｊ）〜Ｄ（ｉ＋Ｑ−１，ｊ）に格納する（Ｓ２５）。
【００４５】
更に、行単位中間データ利用部２は、変数ｉの値をＱの値だけ増加させ、ｉの値とＰの値とを比較する。そして、ｉの値≧Ｐの値である場合、Ｓ２１に戻り、ｉの値＜Ｐの値である場合、結果画素の演算処理を終了する（Ｓ１６）。
【００４６】
上述した動作により、ソース画像Ｓのフィルタ処理を行なう。
【００４７】
続いて、具体的な実施の形態の動作について説明する。
【００４８】
図４は対称型画像フィルタ（カーネル係数）の一例として、カーネルサイズが１３×１３のメキシカン ハット型画像フィルタ(Ｎ＝Ｍ＝１３)のカーネル係数を説明する為の図である。図５は画素位置の列番号を１の位、行番号を１０の位に持つ値を画素値とするソース画像を説明する為の図である。
【００４９】
尚、以下の説明では、Ｐ＝２５６，Ｑ＝４とし、ソース画像の先頭行に着目する為、ｊ＝０として説明する。
【００５０】
まず、行単位中間データ生成部１は、上述したＳ１１〜Ｓ１３の処理を行なう。すなわち、変数ｉ，ｎ，ｍ及びＳＩＭＤレジスタＸの値を０に初期化する。
【００５１】
そして、行単位中間データ生成部１は、上述したＳ１４〜Ｓ１５の処理を繰り返す。すなわち、変数ｊ，ｎ，ｍを０（ｉ＝０，ｎ＝０）に固定した上で、変数ｍの値を１〜１２まで１づつ増加させ、カーネル係数とソース画素との累積積和演算を行い、この演算結果をＳＩＭＤレジスタＸ（０）〜Ｘ（３）に格納する。つまり、行単位中間データ生成部１は、
Ｘ（０）＝  １＊０＋１１＊０＋２１＊０＋３１＊０＋４１＊０＋５１＊（−１）＋６１＊（−１）＋７１＊（−１）＋８１＊０＋９１＊０＋１０１＊０＋１１１＊０＋１２１＊０
Ｘ（１）＝  ２＊０＋１２＊０＋２２＊０＋３２＊０＋４２＊０＋５２＊（−１）＋６２＊（−１）＋７２＊（−１）＋８２＊０＋９２＊０＋１０２＊０＋１１２＊０＋１２２＊０
Ｘ（２）＝  ３＊０＋１３＊０＋２３＊０＋３３＊０＋４３＊０＋５３＊（−１）＋６３＊（−１）＋７３＊（−１）＋８３＊０＋９３＊０＋１０３＊０＋１１３＊０＋１２３＊０
Ｘ（３）＝  ４＊０＋１４＊０＋２４＊０＋３４＊０＋４４＊０＋５４＊（−１）＋６４＊（−１）＋７４＊（−１）＋８４＊０＋９４＊０＋１０４＊０＋１１４＊０＋１２４＊０
の累積加算を行い、Ｑ個（４個）の中間データを求める。
【００５２】
更に、行単位中間データ生成部１は、上述したＳ１６の処理を行なう。すなわち、累積加算して求めた４個の中間データを、１回のＳＩＭＤ命令により、記憶部３の中間データ格納領域Ｔ（ｉ，ｊ）〜（ｉ＋Ｑ−１，ｊ）に格納する。つまり、行単位中間データ生成部１は、記憶部３の中間データ格納領域Ｔに、
Ｔ（０，０）  ←  Ｘ（０）
Ｔ（１，０）  ←  Ｘ（１）
Ｔ（２，０）  ←  Ｘ（２）
Ｔ（３，０）  ←  Ｘ（３）
ＳＩＭＤレジスタＸ（０）〜Ｘ（１）の値を格納する。
【００５３】
次に、行単位中間データ生成部１は、変数ｎの値を１に増加した後，上述したＳ１７の判断を行なう。すなわち、ｎの値とＭの値とを比較する。ここでは、ｎ（ｎ＝１）＜Ｍ（Ｍ＝１３）であることから、上述したＳ１３の処理に戻る。すなわち、行単位中間データ生成部１は、再度、変数ｍの値を１〜１２まで１づつ増加させて、カーネル係数とソース画素との累積積和演算を行い、この演算結果をＳＩＭＤレジスタＸ（０）〜Ｘ（３）に格納する。つまり、行単位中間データ生成部１は、
Ｘ（０）＝  １＊０＋１１＊０＋２１＊０＋３１＊（−１）＋４１＊（−１）＋５１＊（−２）＋６１＊（−２）＋７１＊（−２）＋８１＊（−１）＋９１＊（−１）＋１０１＊０＋１１１＊０＋１２１＊０
Ｘ（１）＝  ２＊０＋１２＊０＋２２＊０＋３２＊（−１）＋４２＊（−１）＋５２＊（−２）＋６２＊（−２）＋７２＊（−２）＋８２＊（−１）＋９２＊（−１）＋１０２＊０＋１１２＊０＋１２２＊０
Ｘ（２）＝  ３＊０＋１３＊０＋２３＊０＋３３＊（−１）＋４３＊（−１）＋５３＊（−２）＋６３＊（−２）＋７３＊（−２）＋８３＊（−１）＋９３＊（−１）＋１０３＊０＋１１３＊０＋１２３＊０
Ｘ（３）＝  ４＊０＋１４＊０＋２４＊０＋３４＊（−１）＋４４＊（−１）＋５４＊（−２）＋６４＊（−２）＋７４＊（−２）＋８４＊（−１）＋９４＊（−１）＋１０４＊０＋１１４＊０＋１２４＊０
の累積加算を行い、Ｑ個（４個）の中間データを求める。
【００５４】
更に、行単位中間データ生成部１は、上述したＳ１６の処理を行なう。すなわち、累積加算して求めた４個の中間データを、１回のＳＩＭＤ命令により、記憶部３の中間データ格納領域Ｔ（ｉ，ｊ）〜（ｉ＋Ｑ−１，ｊ）に格納する。つまり、行単位中間データ生成部１は、記憶部３の中間データ格納領域Ｔに、
Ｔ（０，１）  ←  Ｘ（０）
Ｔ（１，１）  ←  Ｘ（１）
Ｔ（２，１）  ←  Ｘ（２）
Ｔ（３，１）  ←  Ｘ（３）
ＳＩＭＤレジスタＸ（０）〜Ｘ（１）の値を格納する。
【００５５】
同様にして、行単位中間データ生成部１は、変数ｎの値を２〜６に増加する毎に、変数ｍの値を１〜１２まで１づつ増加させて、カーネル係数とソース画素との累積積和演算を行い、この演算結果をＳＩＭＤレジスタＸに格納する。そして、行単位中間データ生成部１は、累積加算して求めた４個の中間データを、１回のＳＩＭＤ命令により、記憶部３の中間データ格納領域Ｔに格納していく。
【００５６】
このようにして、行単位中間データ生成部１が、上述したＳ１７の処理を終了し、Ｓ１８の処理に進んだときには、記憶部３の中間データ格納領域Ｔ（０，０）〜Ｔ（３，６）に、計２８個の中間データが格納される。
【００５７】
そして、行単位中間データ生成部１は、上述したＳ１８の処理を行なう。すなわち、変数ｉの値（ｉ＝０）をＱの値（Ｑ＝４）だけ増加させ、ｉの値とＰの値（Ｐ＝２５６）とを比較し、ｉの値がＰの値に満たない場合には、再度、Ｓ１２からの処理を行う。一方、ｉの値がＰの値以上である場合には、中間データの生成処理を終了する。
【００５８】
以上、行単位中間データ生成部１による中間データ生成終了時には、記憶部３の中間データ格納領域Ｔ（０，０）〜Ｔ（２５５，６）に、計２５６×７＝１７９２個の中間データが格納される。
【００５９】
その後、行単位中間データ利用部２は、上述したＳ２１〜Ｓ２２の処理を実行する。すなわち、変数ｉ，ｎの値を０に初期化すると共に、ＳＩＭＤレジスタＸを０に初期化する。
【００６０】
そして、行単位中間データ利用部２は、上述したＳ２３〜Ｓ２４の処理を実行し、記憶部３の中間データ格納領域Ｔに格納されている中間データをＳＩＭＤレジスタＸに格納する。すなわち、変数ｎの値を０〜１２まで１づつ増加させる毎に、ｎの値と（Ｎ＋１）÷２の値とを比較する。そして、ｎの値＞（Ｎ＋１）÷２の値である場合、変数ｏの値をＮ−１−ｎの値にする。一方、ｎの値≦（Ｎ＋１）÷２の値である場合、変数ｏの値をｎの値にし、この値によって示される記憶部３の中間データ格納領域Ｔ（ｉ＋ｎ，ｏ）〜Ｔ（ｉ＋Ｑ−１＋ｎ，ｏ）の中間データをＳＩＭＤレジスタＸ（０）〜Ｘ（３）に格納する。つまり、ＳＩＭＤレジスタＸ（０）〜Ｘ（１）には、
Ｘ（０）＝  Ｔ（０，０）＋Ｔ（１，１）＋Ｔ（２，２）＋Ｔ（３，３）＋Ｔ（４，４）＋Ｔ（５，５）＋Ｔ（６，６）＋Ｔ（７，５）＋Ｔ（８，４）＋Ｔ（９，３）＋Ｔ（１０，２）＋Ｔ（１１，１）＋Ｔ（１２，０）
Ｘ（１）＝  Ｔ（１，０）＋Ｔ（２，１）＋Ｔ（３，２）＋Ｔ（４，３）＋Ｔ（５，４）＋Ｔ（６，５）＋Ｔ（７，６）＋Ｔ（８，５）＋Ｔ（９，４）＋Ｔ（１０，３）＋Ｔ（１１，２）＋Ｔ（１２，１）＋Ｔ（１３，０）
Ｘ（２）＝  Ｔ（２，０）＋Ｔ（３，１）＋Ｔ（４，２）＋Ｔ（５，３）＋Ｔ（６，４）＋Ｔ（７，５）＋Ｔ（８，６）＋Ｔ（９，５）＋Ｔ（１０，４）＋Ｔ（１１，３）＋Ｔ（１２，２）＋Ｔ（１３，１）＋Ｔ（１４，０）
Ｘ（３）＝  Ｔ（３，０）＋Ｔ（４，１）＋Ｔ（５，２）＋Ｔ（６，３）＋Ｔ（７，４）＋Ｔ（８，５）＋Ｔ（９，６）＋Ｔ（１０，５）＋Ｔ（１１，４）＋Ｔ（１２，３）＋Ｔ（１３，２）＋Ｔ（１４，１）＋Ｔ（１５，０）
の累積加算値が格納される。
【００６１】
このようにして求められた累積加算値が、１３×１３のメキシカンハット型画像フィルタの位置０〜３における結果画素となる。
【００６２】
更に、行単位中間データ利用部２は、上述したＳ１６の処理を実行し、ＳＩＭＤレジスタＸに格納されている画素結果を、記憶部２の記憶領域Ｄ（ｉ，ｊ）〜Ｄ（ｉ＋Ｑ−１，ｊ）に格納する。つまり、行中間データ利用部２は、記憶部２の結果画素格納領域Ｄに、
Ｄ（０，０）  ←  Ｘ（０）
Ｄ（１，０）  ←  Ｘ（１）
Ｄ（２，０）  ←  Ｘ（２）
Ｄ（３，０）  ←  Ｘ（３）
ＳＩＭＤレジスタＸ（０）〜（３）の画素結果を格納する。
【００６３】
同様にして、行単位中間データ利用部２は、変数ｉの値をＱの値（Ｑ＝４）だけ増加させさせながら、上述したＳ２３〜Ｓ２４の処理をＰ÷Ｑ回（２５６÷４＝６４）回繰り返して実行する。この結果、記憶部３の結果画素格納領域Ｄ（０，０）〜（２５５，０）に１行分の結果画素が格納される。このようにして、ソース画像Ｓの１行分の結果画素が求められる。
【００６４】
以上、対称型の画像フィルタを用いて、１行分の結果画素を得るのに必要なＳＩＭＤ命令のステップ数は、（２×Ｍ×（Ｎ＋１）÷２＋Ｎ）×Ｐ÷Ｑステップ数である。これに対して、従来の方法によるステップ数は、２×Ｎ×Ｍ×Ｐ÷Ｑである。従って、その差は、（Ｎ×Ｍ−（Ｎ＋Ｍ））×Ｐ÷Ｑである。
【００６５】
このように、ＭがＮに等しい通常の対称型の画像フィルタの場合では、カーネルサイズ（Ｎ＝Ｍ＞３）が大きくなればなるほどその差は大きくなり、図６に示すように、従来技術を利用した場合と比べると最大５０％の処理ステップ数の削減が可能である。つまり、ＮとMとが大きい対称型の画像フィルタを用いて、フィルタ処理する場合は、大きな高速化の効果が得られる。
【００６６】
尚、本実施の形態における行単位中間データ生成部１と、行単位中間データ利用部２との全部又は一部をプログラムで動作するディジタル信号処理プロセッサ（ＭＰＵ、ＣＰＵ）等のコンピュータ制御で実現するようにしても良い。
【００６７】
【発明の効果】
本発明によれば、対称型の画像フィルタにおける１行分の結果画素を得るのに必要なＳＩＭＤ命令のステップ数を大幅に削減することができるという優れた効果を奏する。
【図面の簡単な説明】
【図１】本発明の対象型画像フィルタを実現する為のブロック図である。
【図２】対称型画像フィルタにおける中間データの再利用の仕方を説明する為の図である。
【図３】各部の動作を説明する為のフローチャートである。
【図４】対称型画像フィルタ（カーネル係数）の一例として、カーネルサイズが１３×１３のメキシカン ハット型画像フィルタ(Ｎ＝Ｍ＝１３)のカーネル係数を説明する為の図である。
【図５】画素位置の列番号を１の位、行番号を１０の位に持つ値を画素値とするソース画像を説明する為の図である。
【図６】本発明の効果を説明する為の図である。
【図７】従来の画素値を算出する動作を説明する為のフローチャートである。
【符号の説明】
１  行単位中間データ生成部
２  行単位中間データ利用部
３  記憶部
【図１】
2004199222.tif 000003
【図２】
2004199222.tif 000004
【図３】
2004199222.tif 000005
【図４】
2004199222.tif 000006
【図５】
2004199222.tif 000007
【図６】
2004199222.tif 000008
【図７】
2004199222.tif 000009