(57)【要約】      （修正有）【課題】任意のサイズの演算対象画像に対して良好な演算効率でフィルタ演算が実行できる画像処理装置を提供する。【解決手段】画像処理装置１０１は、画像データ格納部１０５に記憶されている画像の画素データに対して、フィルタカーネルを走査させてフィルタ演算処理を行う。画像処理装置は、画像データ格納部から読み出された複数の画素データを一時的に記憶するとともに、記憶している画素データを出力する複数のレジスタと、フィルタカーネルにおけるフィルタ係数と、レジスタから出力される複数の画素データとを用いた演算処理を並列に行う複数の積和演算器と、複数のレジスタを介した演算処理に用いる画素データの転送を制御する転送制御部１０３とを有する。複数のレジスタは、フィルタ演算処理で並列して演算処理を行う画素の配置に応じて接続状態が制御される。【選択図】図１
2020140625.tif 000002
【特許請求の範囲】
【請求項１】
画像記憶手段に記憶されている画像の画素データに対して、フィルタカーネルを走査させてフィルタ演算処理を行う画像処理装置であって、
前記フィルタ演算処理で並列して演算処理を行う画素の配置に応じて接続状態が制御され、前記画像記憶手段から読み出された複数の前記画素データを一時的に記憶するとともに、記憶している前記画素データを出力する複数の記憶手段と、
前記フィルタカーネルにおけるフィルタ係数と、前記記憶手段から出力される複数の前記画素データとを用いた演算処理を並列に行う複数の演算手段と、
前記複数の記憶手段を介した前記演算処理に用いる前記画素データの転送を制御する転送制御手段とを有することを特徴とする画像処理装置。
【請求項２】
前記フィルタ演算処理で並列して演算処理を行う画素の配置に応じて、前記複数の演算手段が１つ又は複数の演算グループにグループ化され、
前記転送制御手段は、前記複数の演算手段が複数の演算グループにグループ化された場合、前記演算グループを跨いで前記演算処理に用いられる前記画素データの転送を制御することを特徴とする請求項１記載の画像処理装置。
【請求項３】
前記転送制御手段は、第１の転送モードでは同じ演算グループに属する前記演算手段での演算処理のみに用いられるように前記記憶手段の間で前記画素データを転送し、第２の転送モードでは別の演算グループに属する前記演算手段での演算処理にも用いられるように前記記憶手段の間で前記画素データを転送することを特徴とする請求項２記載の画像処理装置。
【請求項４】
前記転送制御手段は、前記第１の転送モードと前記第２の転送モードとで、前記記憶手段の間の接続状態を変更することを特徴とする請求項３記載の画像処理装置。
【請求項５】
前記転送制御手段は、
前記フィルタカーネルにおける１行分の演算処理を行っている間は、前記第１の転送モードで前記画素データの転送を制御し、
前記フィルタカーネルにおける１行分の演算処理が終了すると、前記第２の転送モードで前記画素データの転送を制御することを特徴とする請求項３又は４記載の画像処理装置。
【請求項６】
前記転送制御手段は、前記第２の転送モードでは、第１の演算グループにおいて、前記フィルタカーネルにおける１行分の演算処理を行うのに用いられた複数の画素データが、前記第１の演算グループとは異なる第２の演算グループでの前記フィルタカーネルにおける別の１行分の演算処理を行うのに用いられるように前記複数の画素データを転送することを特徴とする請求項３乃至５の何れか１項に記載の画像処理装置。
【請求項７】
前記フィルタ演算処理で並列して演算処理を行う画素の配置に応じて、前記複数の記憶手段の接続状態を制御する形状制御手段を有することを特徴とする請求項１乃至６の何れか１項に記載の画像処理装置。
【請求項８】
前記フィルタ演算処理で並列して演算処理を行う画素の配置に応じて、前記複数の演算手段を１つ又は複数の演算グループにグループ化する形状制御手段を有することを特徴とする請求項２乃至６の何れか１項に記載の画像処理装置。
【請求項９】
前記演算グループの各々は、同じ行の画素に係る前記演算処理を並列に行う前記演算手段で構成されることを特徴とする請求項８記載の画像処理装置。
【請求項１０】
画像記憶手段に記憶されている画像の画素データに対して、フィルタカーネルを走査させてフィルタ演算処理を行う画像処理方法であって、
前記フィルタ演算処理で並列して演算処理を行う画素の配置に応じて接続状態が制御される複数の記憶手段に前記画像記憶手段から読み出された複数の前記画素データを記憶させる記憶工程と、
前記複数の記憶手段に記憶している前記画素データを出力する出力工程と、
前記フィルタカーネルにおけるフィルタ係数と、前記記憶手段から出力される複数の前記画素データとを用いた演算処理を複数の演算手段が並列に行う演算工程と、
前記複数の記憶手段を介した前記演算処理に用いる前記画素データの転送を制御する転送制御工程とを有することを特徴とする画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置及び画像処理方法に関し、２次元データに対してフィルタ演算処理を行う画像処理技術に関する。
【背景技術】
【０００２】
例えば、画像処理分野では、画像における画素配列が２次元になっていることから、２次元の畳み込みフィルタ演算（コンボリューション演算）のような２次元のデータ演算が頻繁に用いられる。図１４は、２次元のデータ演算の１つである畳み込みフィルタ演算の例を説明する図である。図１４において、（ａ）はフィルタ演算の演算対象画像１４０１を示しており、（ｂ）はフィルタ演算に用いるフィルタカーネル１４０２を示しており、（ｃ）はフィルタ演算結果である演算出力画像１４０３を示している。
【０００３】
図１４には、フィルタ係数が２次元配列された、サイズが３×３のフィルタカーネル１４０２を一例として示しており、この場合、次式に示す積和演算処理により、畳み込みフィルタ演算結果が算出される。
【０００４】
【数１】
2020140625.tif 000003
【０００５】
ここで、「Ｄi,j」は演算対象画像の座標（ｊ，ｉ）での画素値を示し、「Ｒi,j」は演算出力画像の座標（ｊ，ｉ）でのフィルタ演算結果を示す。また、「Ｗs,t」は演算対象画像の座標（ｊ＋ｔ，ｉ＋ｓ）の画素値に適用するフィルタカーネルの値（フィルタ係数値）を示す。「ｃｏｌｕｍｎＳｉｚｅ」はフィルタカーネルの水平方向サイズを示し、「ｒｏｗＳｉｚｅ」はフィルタカーネルの垂直方向サイズを示す。
【０００６】
フィルタカーネル１４０２を演算対象画像１４０１中で走査させつつ、前述の演算を行うことで、畳み込みフィルタ演算の演算出力画像１４０３を得ることができる。このとき、元画像である演算対象画像１４０１のサイズを垂直方向サイズＡ×水平方向サイズＢとすると、フィルタ演算結果である演算出力画像１４０３のサイズは、（Ａ−ｒｏｗＳｉｚｅ＋１）×（Ｂ−ｃｏｌｕｍｎＳｉｚｅ＋１）となる。
【０００７】
このような演算に対して、特許文献１、２では、積和演算器に代表されるような演算器を複数用意し、演算器に供給される演算対象画像の画素データを、複数の演算器間で共有して演算を並列処理させる。これにより、演算処理の高速化、並びに演算対象画像の画素データの効率的な使用を達成しようとしている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００４−１３８７３号公報
【特許文献２】特開２０１０−１３４６９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１、２に記載の手法を用いて、並列に演算処理を行える演算器を増やそうとすると、演算対象画像に対して一方向（例えば水平方向）に並列演算を拡張することになる。特許文献１、２に記載の構成では、「積和演算器の数」が決まれば、「並列に演算されるフィルタ演算出力画素の分布」が一意に決定される。例えば、積和演算器の数が８個である場合、１次元に並んだ８画素分が並列に演算される。そのため、以下のような問題が発生する。
【００１０】
まず、演算対象画像が小さい場合には、並列演算が有効に活用できないという問題が生じる。例えば、演算対象画像の水平方向サイズが、並列演算のために用意されている積和演算器の個数よりも小さい場合、フィルタ演算には寄与しない積和演算器が発生してしまい、演算効率の低下を招くことが考えられる。
【００１１】
また、逆に演算効率を向上させるために並列度（並列演算のために用意されている積和演算器の個数）を増やそうとした場合にも、例えば、演算対象画像の水平方向サイズを超えて並列度を増やすことができない。つまり、それ以上演算器の数を増やしても、演算効率が向上しないという問題が発生する。
【００１２】
本発明は、このような事情に鑑みてなされたものであり、任意のサイズの演算対象画像に対して良好な演算効率でフィルタ演算を実行できるようにすることを目的とする。
【課題を解決するための手段】
【００１３】
本発明に係る画像処理装置は、画像記憶手段に記憶されている画像の画素データに対して、フィルタカーネルを走査させてフィルタ演算処理を行う画像処理装置であって、前記フィルタ演算処理で並列して演算処理を行う画素の配置に応じて接続状態が制御され、前記画像記憶手段から読み出された複数の前記画素データを一時的に記憶するとともに、記憶している前記画素データを出力する複数の記憶手段と、前記フィルタカーネルにおけるフィルタ係数と、前記記憶手段から出力される複数の前記画素データとを用いた演算処理を並列に行う複数の演算手段と、前記複数の記憶手段を介した前記演算処理に用いる前記画素データの転送を制御する転送制御手段とを有することを特徴とする。
【発明の効果】
【００１４】
本発明によれば、任意のサイズの演算対象画像に対して良好な演算効率でフィルタ演算を実行することが可能となる。
【図面の簡単な説明】
【００１５】
【図１】第１の実施形態における画像処理装置の構成例を示す図である。
【図２】本実施形態における並列化形状の制御例を説明する図である。
【図３】第１の実施形態における演算処理部の構成例を示す図である。
【図４】第１の実施形態における演算処理例を示すフローチャートである。
【図５】第１の実施形態における演算処理例を示すタイムチャートである。
【図６】第１の実施形態における演算処理例を示すタイムチャートである。
【図７】第１の実施形態における演算処理例を示すタイムチャートである。
【図８】第２の実施形態における画像処理装置の構成例を示す図である。
【図９】第２の実施形態における演算処理部の構成例を示す図である。
【図１０】第２の実施形態における演算処理例を示すフローチャートである。
【図１１】第２の実施形態における演算処理例を示すタイムチャートである。
【図１２】第２の実施形態における演算処理例を示すタイムチャートである。
【図１３】第３の実施形態における画像処理装置の構成例を示す図である。
【図１４】畳み込みフィルタ演算を説明する図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施形態を図面に基づいて説明する。
【００１７】
（第１の実施形態）
本発明の第１の実施形態について説明する。第１の実施形態における画像処理装置は、畳み込みフィルタ演算等のフィルタ演算処理を並列に演算する際に、フィルタ演算の演算対象領域の形状に応じて、並列に算出されるフィルタ演算出力画素の並び方を変更できるようにする。このようにフィルタ演算の演算対象領域の形状に応じて、並列処理されるフィルタ演算出力画素の並び方を変更可能にし、演算対象領域の形状が変化しても並列演算の演算効率が低下しないようにする。
【００１８】
ここで、フィルタ演算出力画素の並び方とは、並列演算で同時に出力される出力画素がどのような配置になっているのかということを表す。例えば、本実施形態における画像処理装置が演算器を８個有する（８並列）場合、フィルタ演算出力として８画素を同時に出力することが可能である。さらに、その８画素の並びが、垂直方向が１画素で水平方向が８画素であるのか、垂直方向が２画素で水平方向が４画素であるのか、或いは垂直方向が４画素で水平方向が２画素であるのかを、設定により切り替え可能とする。以下では、フィルタ演算出力画素の並び方を「並列化形状」とも称す。また、垂直方向がＭ画素で水平方向がＮ画素の領域を「Ｍ×Ｎ」と表記する。
【００１９】
以下では、演算器が８個で構成される画像処理装置を一例に説明するが、画像処理装置が有する演算器の個数は、これに限定されるものではなく、任意の複数である。また、出力画素の並び（並列化形状）を、垂直方向が１画素で水平方向が８画素である１×８と、垂直方向が２画素で水平方向が４画素である２×４と、垂直方向が４画素で水平方向が２画素である４×２との間で切り替える例を示す。しかし、切り替え可能な出力画素の並び（並列化形状）は、これに限定されるものではなく、演算器の個数に応じて適宜設定可能である。
【００２０】
本実施形態における画像処理装置では、出力画素の並び（並列化形状）に応じて複数の演算器をグループ化し、同一の水平方向１行分の出力画素を演算する演算器から構成される演算器群を同一演算グループとして設定する。そして、それぞれの演算グループ内、或いは演算グループ間での演算対象データの転送を制御する。例えば、並列化形状を１×８とする場合には、８個の演算器からなる単一の演算グループを設定する。同様に、並列化形状を２×４とする場合には、それぞれ４個の演算器からなる２つの演算グループを設定し、並列化形状を４×２とする場合には、それぞれ２個の演算器からなる４つの演算グループを設定する。したがって、演算グループを設定するということは、並列化形状を選択するということと等しい。
【００２１】
図１は、第１の実施形態における画像処理装置１０１の構成例を示すブロック図である。画像処理装置１０１は、形状制御部１０２、転送制御部１０３、フィルタ係数格納部１０４、画像データ格納部１０５、及び演算処理部１０６を有する。
【００２２】
形状制御部１０２は、入力される設定情報Ｓ１に基づいて演算器のグループ（演算グループ）を設定し、並列演算により出力される出力画素の並び（並列化形状）を決定する。設定情報Ｓ１には、演算対象画像のサイズ、フィルタカーネルのサイズ、及び演算処理部１０６が有する演算器の数（並列数）についての情報が含まれている。本実施形態では、フィルタ演算の演算対象領域の形状が変化しても並列演算の演算効率を低下させないために、フィルタ演算に寄与しない演算器を極力減らすことが重要となる。そこで、形状制御部１０２は、入力される設定情報Ｓ１から、良好な演算効率で並列演算を行うことができる出力画素の並び（並列化形状）を判断する。
【００２３】
図２を参照して、形状制御部１０２が、設定情報Ｓ１からどのように並列化形状を決定するのかを説明する。図２は、本実施形態における並列化形状の制御例を説明する図である。図２において、（ａ）、（ｂ）、及び（ｃ）はフィルタ演算の演算対象画像２０１、２０２、及び２０３を示している。また、図２において、（ｄ）は並列化形状を１×８としたときの出力画素２０４を示しており、（ｅ）は並列化形状を２×４としたときの出力画素２０５を示しており、（ｆ）は並列化形状を４×２としたときの出力画素２０６を示している。
【００２４】
図２（ａ）に示す演算対象画像２０１の水平方向サイズは１０であり、図２（ｂ）に示す演算対象画像２０２の水平方向サイズは６であり、図２（ｃ）に示す演算対象画像２０３の水平方向サイズは４である。ここで、本実施形態では、フィルタカーネルのサイズは、図１４（ｂ）に示したフィルタカーネル１４０２と同じ３×３とし、画像処理装置１０１の演算処理部１０６が有する演算器の個数（並列数）は８とする。
【００２５】
フィルタ演算の演算対象画像が演算対象画像２０１である場合、出力画素２０４、２０５、２０６が出力される何れの並列化形状を選択しても、フィルタ演算に寄与しない演算器は発生しない。フィルタ演算の演算対象画像が演算対象画像２０２である場合、出力画素２０５、２０６が出力される並列化形状であれば、フィルタ演算に寄与しない演算器は発生しない。また、フィルタ演算の演算対象画像が演算対象画像２０３である場合、出力画素２０６が出力される並列化形状であれば、フィルタ演算に寄与しない演算器は発生しない。
【００２６】
したがって、形状制御部１０２は、フィルタ演算の演算対象画像が演算対象画像２０３である場合には、並列化形状として出力画素２０６が出力される４×２を選択する。なお、フィルタ演算の演算対象画像が演算対象画像２０１、２０２である場合には、並列化形状の選択肢が複数ある。このように複数の並列化形状が選択可能である場合、形状制御部１０２は、フィルタ演算の演算処理時間が短くなる並列化形状を選択する。フィルタ演算の演算処理時間は、並列化形状、演算対象画像のサイズ、及びフィルタカーネルのサイズ等に基づいて取得可能である。
【００２７】
転送制御部１０３は、フィルタ係数格納部１０４及び画像データ格納部１０５からフィルタ係数Ｓ２及び画素データＳ３をそれぞれ読み出して演算処理部１０６に供給する制御を行う。また、転送制御部１０３は、転送制御信号Ｓ４を演算処理部１０６に出力することにより、演算処理部１０６内での画素データの転送の制御を行う。転送制御部１０３が行う、フィルタ係数格納部１０４及び画像データ格納部１０５からのデータ読み出し、及び演算処理部１０６内での画素データの転送に係る制御は、形状制御部１０２により決定された並列化形状に基づいて行われる。
【００２８】
フィルタ係数格納部１０４には、フィルタ演算で使用されるフィルタカーネルの値（フィルタ係数）が格納される。画像データ格納部１０５には、フィルタ演算の演算対象画像の画素データが格納される。画像データ格納部１０５は、画像記憶手段の一例である。演算処理部１０６は、並列して演算を実行可能な複数の演算器を有し、入力されるフィルタ係数Ｓ２と画素データＳ３とを用いてフィルタ演算を行う。
【００２９】
図３は、演算処理部１０６の構成例を示すブロック図である。以下、図３を参照して、演算処理部１０６の内部構成、及び形状制御部１０２から入力される形状制御信号Ｓ５による演算処理部１０６内での接続制御について説明する。演算処理部１０６は、レジスタ３０１〜３０８、３１１〜３１８、積和演算器３２１〜３２８、及びセレクタ３３１〜３３３を有する。レジスタ３０１〜３０８、３１１〜３１８は、記憶手段の一例であり、積和演算器３２１〜３２８は、演算手段の一例である。
【００３０】
レジスタ３０１〜３０８、３１１〜３１８は、画像データ格納部１０５から読み出されたフィルタ演算対象の画素データを一時的に記憶する。また、レジスタ３０１〜３０８、３１１〜３１８は、それぞれ接続されている積和演算器、並びに接続されているレジスタに画素データを出力する。例えば、レジスタ３０８は、記憶している画素データを積和演算器３２８とレジスタ３０７に出力する。レジスタ３０１〜３０８、３１１〜３１８のうち、積和演算器に直接接続されているレジスタ３０１〜３０８を、直接接続レジスタとも称す。例えば、積和演算器３２７にとっての直接接続レジスタはレジスタ３０７である。これとは逆に、積和演算器に直接接続されていないレジスタ３１１〜３１８を、間接接続レジスタとも称す。
【００３１】
積和演算器３２１〜３２８は、直接接続されたレジスタ３０１〜３０８から供給される画素データとフィルタ係数格納部１０４から供給されるフィルタ係数との乗算結果を累積加算する演算処理を並列に行う。例えば、積和演算器３２８は、レジスタ３０８から供給される画素データとフィルタ係数格納部１０４から供給されるフィルタ係数とを用いて積和演算を行う。
【００３２】
セレクタ３３１〜３３３は、接続されている複数の入力から１つを選択して出力する。セレクタ３３１〜３３３には形状制御部１０２からの形状制御信号が接続されており、セレクタ３３１〜３３３は、この形状制御信号により、複数の入力のうちのどの入力を選択して出力するかを設定可能となっている。つまり、形状制御信号により、セレクタ３３１〜３３３の入出力関係が設定できる。例えば、セレクタ３３１は、入力されるレジスタ３０３及びレジスタ３１１の出力のうち、いずれかを選択してレジスタ３０２に出力する。セレクタ３３１が、レジスタ３０３の出力をレジスタ３０２に出力するか、レジスタ３１１の出力をレジスタ３０２に出力するかを、形状制御信号により制御できる。
【００３３】
ここで、本実施形態における積和演算器３２１〜３２８の演算グループ分けについて説明する。この演算グループ分けは、セレクタ３３１〜３３３の入出力関係を設定することで実現される。本実施形態では、積和演算器３２１〜３２８の演算グループ分けは、次の通りにする。
【００３４】
・並列化形状を１×８とするとき
【表１】
2020140625.tif 000004
【００３５】
・並列化形状を２×４とするとき
【表２】
2020140625.tif 000005
【００３６】
・並列化形状を４×２とするとき
【表３】
2020140625.tif 000006
【００３７】
形状制御部１０２は、決定した並列化形状に応じて、前述の表に示すように積和演算器３２１〜３２８をグループ化することにより演算グループ分けを行う。さらに、形状制御部１０２は、同一の演算グループに属する積和演算器の直接接続レジスタ同士は直接接続し、異なる演算グループに属する積和演算器の直接接続レジスタ同士は間接接続レジスタを間に挟んで接続するように、形状制御信号を設定し出力する。したがって、本実施形態では、形状制御部１０２は、セレクタ３３１〜３３３に対して、以下の表に示すレジスタ３０３の出力を選択して出力するように形状制御信号を出力する。
【００３８】
【表４】
2020140625.tif 000007
【００３９】
例えば、並列化形状を１×８とするときには、セレクタ３３１は、レジスタ３０３の出力を選択してレジスタ３０２に出力する。また、並列化形状を２×４とするときにも、セレクタ３３１は、レジスタ３０３の出力を選択してレジスタ３０２に出力する。一方、並列化形状を４×２とするときには、セレクタ３３１は、レジスタ３１１の出力を選択してレジスタ３０２に出力する。
【００４０】
このように形状制御信号によりセレクタ３３１〜３３３の入出力関係を制御することで、同一の演算グループ内、或いは演算グループ間の直接接続レジスタ並びに間接接続レジスタの接続関係が所望のものになる。例えば、並列化形状を２×４とするときには、グループＢ１に属する積和演算器３２１〜３２４の直接接続レジスタ３０１〜３０４は、お互いに直接接続されるようにセレクタ３３１が設定される。なお、レジスタ３０２とレジスタ３０３との間にはセレクタ３３１があるが、セレクタは単に接続関係を決めているだけなのでレジスタ間の接続関係としては無視するものとする。また、グループＢ１に属する直接接続レジスタ（レジスタ３０４）とグループＢ２に属する直接接続レジスタ（レジスタ３０５）との間には、間接接続レジスタ３１３、３１４が接続されるようにセレクタ３３２が設定される。
【００４１】
ここで、並列化形状を２×４とする場合、セレクタ３３１、３３３で接続が遮断されているため、レジスタ３１１、３１２、３１５、３１６に格納された画素データは、積和演算器に供給されることはない。そのため、並列化形状を２×４とする場合、レジスタ３１１、３１２、３１５、３１６には、どのようなデータが入っていても演算結果には影響しない。同様に、並列化形状を１×８とする場合、セレクタ３３１〜３３３で接続が遮断されているため、レジスタ３１１〜３１６に格納された画素データは、積和演算器に供給されることはない。そのため、並列化形状を１×８とする場合、レジスタ３１１〜３１６には、どのようなデータが入っていても演算結果には影響しない。
【００４２】
以上のように、形状制御部１０２から供給される形状制御信号Ｓ５により、演算処理部１０６内部のレジスタ３０１〜３０８、３１１〜３１８の接続状態が制御される。例えば、並列化形状を１×８とする場合、レジスタ３１８→３１７→３０８→３０７→３０６→３０５→３０４→３０３→３０２→３０１という順で画素データが転送されるように演算処理部１０６内の接続状態が制御される。また、例えば、並列化形状を２×４とする場合、レジスタ３１８→３１７→３０８→３０７→３０６→３０５→３１４→３１３→３０４→３０３→３０２→３０１という順で画素データが転送されるように接続状態が制御される。また、例えば、並列化形状を２×４とする場合、レジスタ３１８→３１７→３０８→３０７→３１６→３１５→３０６→３０５→３１４→３１３→３０４→３０３→３１２→３１１→３０２→３０１という順で画素データが転送されるように接続状態が制御される。
【００４３】
次に、演算処理部１０６の動作について説明する。以下に説明する演算処理部１０６の動作は、転送制御部１０３から入力される転送制御信号Ｓ４によって制御される。この動作が行われる前に、前述したようにして演算処理部１０６内におけるレジスタ３０１〜３０８、３１１〜３１８の接続状態は、所望の並列化形状に従って制御されているものとする。つまり、セレクタ３３１〜３３３の接続状態（入出力関係）は、決定されているものとする。
【００４４】
演算処理部１０６では、転送制御部１０３からの転送制御信号により、レジスタ３０１〜３０８、３１１〜３１８に記憶されている画素データがレジスタ間をどのように転送されていくのかが制御される。まず、ここでは転送制御の概要を述べ、転送制御によるフィルタ演算の詳細は後述する。
【００４５】
転送制御信号によるフィルタ演算時の画素データの転送制御は、第１の転送モード及び第２の転送モードの２つの転送モードを有する。第１の転送モードでは、転送される画素データが演算グループ内の積和演算器での演算にのみ使用されるように、レジスタ間で画素データが転送される。つまり、第１の転送モードの時には、ある演算グループに属する積和演算器での演算に使用された画素データが、他の演算グループに属する積和演算器での演算に使用されることはない。この第１の転送モードで演算処理部１０６内の画素データ転送が制御されているときには、演算処理部１０６がフィルタカーネル１行分の演算処理を行う。
【００４６】
また、第２の転送モードでは、転送される画素データが別の演算グループの積和演算器での演算にも使用されるように、レジスタ間で画素データが転送される。演算処理部１０６にて、フィルタカーネル１行分の演算処理が終了すると、第２の転送モードによる画素データ転送が実行される。一般にフィルタカーネルは複数行で構成されるので、第１の転送モードによる画素データの転送及び第２の転送モードによる画素データの転送を繰り返すことで、フィルタ演算が実行される。
【００４７】
例えば、図１４に示したフィルタカーネル１４０２を用いたフィルタ演算のような場合、はじめに第１の転送モードで画素データの転送が行われて最初の１行分の演算が積和演算器で行われ、次式に示す演算結果が得られる。
【００４８】
【数２】
2020140625.tif 000008
【００４９】
続いて、第２の転送モードで画素データの転送が行われ、その後、再び第１の転送モードで画素データの転送が行われて次の１行分の演算が積和演算器で行われ、次式に示す演算結果が得られる。
【００５０】
【数３】
2020140625.tif 000009
【００５１】
その後、再び第２の転送モードで画素データの転送が行われ、さらに第１の転送モードで画素データの転送が行われて次の１行分の演算が積和演算器で行われ、次式に示すフィルタ演算結果が得られる。
【００５２】
【数４】
2020140625.tif 000010
【００５３】
この一連の動作を、図４に示すフローチャートと、図５、図６、及び図７に示すタイムチャートと参照して説明する。図４は、第１の実施形態における画像処理装置の演算処理例を示すフローチャートである。図５は、並列化形状を２×４とした場合のフィルタ演算の演算処理例を示すタイムチャートであり、図６は、並列化形状を４×２とした場合のフィルタ演算の演算処理例を示すタイムチャートである。また、図７は、並列化形状を１×８とした場合のフィルタ演算の演算処理例を示すタイムチャートである。
【００５４】
最初に、図４及び図５を参照して、並列化形状を２×４とした場合の動作について説明する。前述したように、形状制御部１０２による並列化形状の決定は、図４のフローチャートに示す並列演算処理の開始に先だって行われており、演算処理部１０６内のセレクタ３３１〜３３３の接続状態は決定されているものとする。セレクタ３３１は、レジスタ３０３の出力を選択してレジスタ３０２に出力し、セレクタ３３２は、レジスタ３１３の出力を選択してレジスタ３０４に出力し、セレクタ３３３は、レジスタ３０７の出力を選択してレジスタ３０６に出力するよう制御されている。また、前述のように並列化形状を２×４とした場合、レジスタ３１１、３１２、３１５、３１６に格納されているデータは演算に使用されない。したがって、図５に示すタイムチャートでは、これらのレジスタ３１１、３１２、３１５、３１６の出力欄は空欄としている。
【００５５】
図４に示すステップＳ４０１にて、画像処理装置１０１は、演算処理部１０６が有する積和演算器での並列演算（フィルタ演算）のための準備（画素データの用意）を行い、並列演算で使用するレジスタ群に画像データ格納部１０５から画素データを供給する。このステップＳ４０１では、転送制御部１０３は、画像データ格納部１０５から演算対象画像の水平方向に６画素（Ｄ００、Ｄ０１、・・・、Ｄ０５）の画素データを読み出して、演算処理部１０６に転送するよう指示する（図５の時刻ｔ０〜ｔ５）。転送制御部１０３は、その転送が終了すると、画像データ格納部１０５から演算対象画像の次の行（２行目）から６画素（Ｄ１０、Ｄ１１、・・・、Ｄ１５）の画素データを読み出して、演算処理部１０６に転送するよう指示する（図５の時刻ｔ６〜ｔ１１）。これにより、この次のサイクル（図５の時刻ｔ１２）では、演算処理部１０６において演算に使用されるレジスタには、演算対象の画素データが格納された状態になり、図５に示す時刻ｔ１２から積和演算器３２１〜３２８による積和演算が実行される。
【００５６】
なお、図５の時刻ｔ１２以降も、転送制御部１０３は、行を順次ずらし、画像データ格納部１０５から演算対象画像の水平方向に６画素ずつ画素データを読み出して、演算処理部１０６に転送するよう指示する。これにより、例えば、図５の時刻ｔ１２〜ｔ１７に示されるように画像データ格納部１０５から３行目の演算対象の画素データ（Ｄ２０、Ｄ２１、・・・、Ｄ２５）が演算処理部１０６のレジスタに供給される。また、例えば、それに続く、時刻ｔ１８〜ｔ２３に示されるように画像データ格納部１０５から４行目の演算対象の画素データ（Ｄ３０、Ｄ３１、・・・、Ｄ３５）が演算処理部１０６のレジスタに供給される。
【００５７】
続いてステップＳ４０２で、演算処理部１０６が、フィルタカーネルにおける水平方向の１行目のフィルタ係数（Ｗ００、Ｗ０１、Ｗ０２）と画素データとの積和演算を行う。そのため、転送制御部１０３は、演算処理部１０６内のレジスタに対して、シフト処理（レジスタ間の画素データ転送）を行うように指示する。この転送制御は第１の転送モードであり、その転送中に、ある演算グループに属する積和演算器に供給された画素データが、別の演算グループに属する積和演算器に供給されることはない。例えば、グループＢ２に属する積和演算器３２５〜３２８に供給された画素データＤ１０〜Ｄ１５は、グループＢ１に属する積和演算器３２１〜３２４に供給されない。
【００５８】
また、このステップＳ４０２では、転送制御部１０３は、第１の転送モードのタイミングに合わせて、フィルタ係数格納部１０４からフィルタ係数（フィルタカーネルの水平１行分）を読み出して、演算処理部１０６の積和演算器に転送するよう指示する。このようにして、演算処理部１０６では、第１の転送モードで演算対象の画素データの転送が行われ、フィルタカーネルの水平方向１行分の積和演算が実行される（図５の時刻ｔ１２〜ｔ１４）。
【００５９】
続いて、ステップＳ４０３では、転送制御部１０３は、並列演算（フィルタ演算）の終了条件を確認し、並列演算（フィルタ演算）が終了したか否かを判定する。この時点では、フィルタカーネルの水平方向の１行目と画素データとの積和演算を行っただけであるので、並列演算（フィルタ演算）が終了していないと転送制御部１０３が判定し（ＮＯ）、ステップＳ４０４に進む。
【００６０】
ステップＳ４０４では、ある演算グループに属する積和演算器に供給された画素データが別の演算グループに属する積和演算器に供給されるように、転送制御部１０３は、演算処理部１０６に指示する（図５の時刻ｔ１５〜ｔ１７）。具体的には、転送制御部１０３は、ある演算グループに属する積和演算器に供給された画素データが別の演算グループに属する積和演算器に供給されるように、演算処理部１０６内のレジスタに対して、シフト処理を行うように指示する。この転送制御は第２の転送モードであり、その転送中の間は、積和演算器は積和演算を行うことを停止する。
【００６１】
この第２の転送モードでの画素データの転送により、次のサイクル（図５の時刻ｔ１８）では、演算グループ（グループＢ１）に属する積和演算器３２１〜３２４に画素データＤ１０〜Ｄ１５が供給可能な状態になる。この画素データＤ１０〜Ｄ１５は、前回の第１の転送モード開始前に、別の演算グループ（グループＢ２）に属する積和演算器３２５〜３２８に供給されていた画素データである。また、時刻ｔ１２〜ｔ１７における画像データの読み出し及び転送により、次のサイクル（時刻ｔ１８）では、演算グループ（グループＢ２）に属する積和演算器３２５〜３２８に３行目の画素データＤ２０〜Ｄ２５が供給可能な状態になる。
【００６２】
その後、再度ステップＳ４０２の処理を行い、演算処理部１０６が、フィルタカーネルにおける水平方向の２行目のフィルタ係数（Ｗ１０、Ｗ１１、Ｗ１２）と画素データとの積和演算を行う（図５の時刻ｔ１８〜ｔ２０）。以降、ステップＳ４０３で、転送制御部１０３が、並列演算（フィルタ演算）の終了と判定するまで、画像処理装置１０１は、ステップＳ４０２及びステップＳ４０４の処理を繰り返し実行する。
【００６３】
フィルタカーネルにおける水平方向の３行目のフィルタ係数（Ｗ２０、Ｗ２１、Ｗ２２）と画素データとの積和演算が行われた後のステップＳ４０３で、転送制御部１０３は、並列演算（フィルタ演算）の終了と判定し（ＹＥＳ）、処理が終了する。並列演算（フィルタ演算）の終了時には、演算処理部１０６内の積和演算器３２１〜３２８からは、次式で表される演算結果が出力される。
【００６４】
【数５】
2020140625.tif 000011
【００６５】
図５の時刻ｔ２４での処理により並列演算（フィルタ演算）が終了した場合には、例えば、積和演算器３２１からはｉ＝０，ｊ＝０としたときの演算結果が出力され、積和演算器３２４からはｉ＝０，ｊ＝３としたときの演算結果が出力される。また、例えば、積和演算器３２５からはｉ＝１，ｊ＝０としたときの演算結果が出力され、積和演算器３２８からはｉ＝１，ｊ＝３としたときの演算結果が出力される。
【００６６】
さらに、図５の時刻ｔ２４以降では、前述した演算処理に並行して、次のフィルタ演算のために、画像データ格納部１０５からの読み出し及びレジスタのシフト処理が、パイプライン的に先行して行われている。前述した動作を、演算対象画像において、演算対象の行を順次ずらし、さらに最終行に達したら１行目に戻って演算対象の列を次の列にずらすようにして、図４に示した動作を繰り返すことにより、演算対象画像全体をフィルタ演算した演算出力画像が得られる。
【００６７】
次に、図４及び図６を参照して、並列化形状を４×２とした場合の動作について説明する。並列化形状を２×４とした場合と同様に、形状制御部１０２による並列化形状の決定は、図４のフローチャートに示す並列演算処理の開始に先だって行われており、演算処理部１０６内のセレクタ３３１〜３３３の接続状態は決定されているものとする。セレクタ３３１は、レジスタ３１１の出力を選択してレジスタ３０２に出力し、セレクタ３３２は、レジスタ３１３の出力を選択してレジスタ３０４に出力し、セレクタ３３３は、レジスタ３１５の出力を選択してレジスタ３０８に出力するよう制御されている。並列化形状を４×２とした場合、すべてのレジスタ３０１〜３０８、３１１〜３１８に格納されたデータが演算に使用される。
【００６８】
図４に示すステップＳ４０１にて、画像処理装置１０１は、演算処理部１０６が有する積和演算器での並列演算（フィルタ演算）のための準備（画素データの用意）を行い、並列演算で使用するレジスタ群に画像データ格納部１０５から画素データを供給する。このステップＳ４０１では、転送制御部１０３は、画像データ格納部１０５から演算対象画像の水平方向に４画素（Ｄ００、Ｄ０１、Ｄ０２、Ｄ０３）の画素データを読み出して、演算処理部１０６に転送するよう指示する（図６の時刻ｔ０〜ｔ３）。転送制御部１０３は、その転送が終了すると、画像データ格納部１０５から演算対象画像の次の行（２行目）から４画素（Ｄ１０、Ｄ１１、Ｄ１２、Ｄ１３）の画素データを読み出して、演算処理部１０６に転送するように指示する（図６の時刻ｔ４〜ｔ７）。
【００６９】
さらに、転送制御部１０３は、画像データ格納部１０５から演算対象画像の次の行（３行目）から４画素（Ｄ２０、Ｄ２１、Ｄ２２、Ｄ２３）の画素データを読み出して、演算処理部１０６に転送するように指示する（図６の時刻ｔ８〜ｔ１１）。また、さらに、転送制御部１０３は、画像データ格納部１０５から演算対象画像の次の行（４行目）から４画素（Ｄ３０、Ｄ３１、Ｄ３２、Ｄ３３）の画素データを読み出して、演算処理部１０６に転送するように指示する（図６の時刻ｔ１２〜ｔ１５）。これにより、この次のサイクル（図６の時刻ｔ１６）では、演算処理部１０６において演算に使用されるレジスタには、演算対象の画素データが格納された状態になり、図６に示す時刻ｔ１６から積和演算器３２１〜３２８による積和演算が実行される。
【００７０】
なお、図６の時刻ｔ１６以降も、転送制御部１０３は、行を順次ずらし、画像データ格納部１０５から演算対象画像の水平方向に４画素ずつ画素データを読み出して、演算処理部１０６に転送するよう指示する。これにより、例えば、図６の時刻ｔ１６〜ｔ１９に示されるように画像データ格納部１０５から５行目の演算対象の画素データ（Ｄ４０、Ｄ４１、Ｄ４２、Ｄ４３）が演算処理部１０６のレジスタに供給される。また、例えば、それに続く、時刻ｔ２０〜ｔ２３に示されるように画像データ格納部１０５から６行目の演算対象の画素データ（Ｄ５０、Ｄ５１、Ｄ５２、Ｄ５３）が演算処理部１０６のレジスタに供給される。
【００７１】
続いてステップＳ４０２で、演算処理部１０６が、フィルタカーネルにおける水平方向の１行目のフィルタ係数（Ｗ００、Ｗ０１、Ｗ０２）と画素データとの積和演算を行う。そのため、転送制御部１０３は、演算処理部１０６内のレジスタに対して、シフト処理を行うように指示する。この転送制御は第１の転送モードである。また、このステップＳ４０２では、転送制御部１０３は、第１の転送モードのタイミングに合わせて、フィルタ係数格納部１０４からフィルタ係数（フィルタカーネルの水平１行分）を読み出して、演算処理部１０６の積和演算器に転送するよう指示する。このようにして、演算処理部１０６では、第１の転送モードで演算対象の画素データの転送が行われ、フィルタカーネルの水平方向１行分の積和演算が実行される（図６の時刻ｔ１６〜ｔ１８）。
【００７２】
続いて、ステップＳ４０３では、転送制御部１０３は、並列演算（フィルタ演算）の終了条件を確認し、並列演算（フィルタ演算）が終了したか否かを判定する。この時点では、フィルタカーネルの水平方向の１行目について積和演算を行っただけであるので、並列演算（フィルタ演算）が終了していないと転送制御部１０３が判定し（ＮＯ）、ステップＳ４０４に進む。
【００７３】
ステップＳ４０４では、ある演算グループに属する積和演算器に供給された画素データが別の演算グループに属する積和演算器に供給されるように、転送制御部１０３は、演算処理部１０６に指示する（図６の時刻ｔ１９）。具体的には、転送制御部１０３は、ある演算グループに属する積和演算器に供給された画素データが別の演算グループに属する積和演算器に供給されるように、演算処理部１０６内のレジスタに対して、シフト処理を行うように指示する。この転送制御は第２の転送モードであり、その転送中の間は、積和演算器は積和演算を行うことを停止する。
【００７４】
この第２の転送モードでの画素データの転送により、次のサイクル（図６の時刻ｔ２０）では、その前に別の異なる演算グループに属する積和演算器に供給されていた画素データが、積和演算器３２１〜３２６に供給可能な状態になる。また、時刻ｔ１６〜ｔ１９における画像データの読み出し及び転送により、次のサイクル（時刻ｔ２０）では、演算グループ（グループＣ４）に属する積和演算器３２７、３２８に５行目の画素データＤ４０〜Ｄ４３が供給可能な状態になる。
【００７５】
その後、再度ステップＳ４０２の処理を行い、演算処理部１０６が、フィルタカーネルにおける水平方向の２行目のフィルタ係数（Ｗ１０、Ｗ１１、Ｗ１２）と画素データとの積和演算を行う（図６の時刻ｔ２０〜ｔ２２）。以降、ステップＳ４０３で、転送制御部１０３が、並列演算（フィルタ演算）の終了と判定するまで、画像処理装置１０１は、ステップＳ４０２及びステップＳ４０４の処理を繰り返し実行する。
【００７６】
フィルタカーネルにおける水平方向の３行目のフィルタ係数（Ｗ２０、Ｗ２１、Ｗ２２）と画素データとの積和演算が行われた後のステップＳ４０３で、転送制御部１０３は、並列演算（フィルタ演算）の終了と判定し（ＹＥＳ）、処理が終了する。並列演算（フィルタ演算）の終了時には、演算処理部１０６内の積和演算器３２１〜３２８からは、次式で表される演算結果が出力される。
【００７７】
【数５】
2020140625.tif 000012
【００７８】
図６の時刻ｔ２４での処理により並列演算（フィルタ演算）が終了した場合には、例えば、積和演算器３２１からはｉ＝０，ｊ＝０としたときの演算結果が出力され、積和演算器３２２からはｉ＝０，ｊ＝１としたときの演算結果が出力される。また、例えば、積和演算器３２３からはｉ＝１，ｊ＝０としたときの演算結果が出力され、積和演算器３２８からはｉ＝３，ｊ＝１としたときの演算結果が出力される。
【００７９】
さらに、図６の時刻ｔ２４以降では、前述した演算処理に並行して、次のフィルタ演算のために、画像データ格納部１０５からの読み出し及びレジスタのシフト処理が、パイプライン的に先行して行われている。前述した動作を、演算対象画像において、演算対象の行を順次ずらし、さらに最終行に達したら１行目に戻って演算対象の列を次の列にずらすようにして、図４に示した動作を繰り返すことにより、演算対象画像全体をフィルタ演算した演算出力画像が得られる。
【００８０】
続いて、図４及び図７を参照して、並列化形状を１×８とした場合の動作について説明する。前述したように、形状制御部１０２による並列化形状の決定は、図４のフローチャートに示す並列演算処理の開始に先だって行われており、演算処理部１０６内のセレクタ３３１〜３３３の接続状態は決定されているものとする。セレクタ３３１は、レジスタ３０３の出力を選択してレジスタ３０２に出力し、セレクタ３３２は、レジスタ３０５の出力を選択してレジスタ３０４に出力し、セレクタ３３３は、レジスタ３０７の出力を選択してレジスタ３０６に出力するよう制御されている。また、前述のように並列化形状を１×８とした場合、レジスタ３１１〜３１６に格納されているデータは演算に使用されない。したがって、図７に示すタイムチャートでは、これらのレジスタ３１１〜３１６の出力欄は空欄としている。
【００８１】
図４に示すステップＳ４０１にて、画像処理装置１０１は、演算処理部１０６が有する積和演算器での並列演算（フィルタ演算）のための準備（画素データの用意）を行い、並列演算で使用するレジスタ群に画像データ格納部１０５から画素データを供給する。このステップＳ４０１では、転送制御部１０３は、画像データ格納部１０５から演算対象画像の水平方向に１０画素（Ｄ００、Ｄ０１、・・・、Ｄ０９）の画素データを読み出して、演算処理部１０６に転送するよう指示する（図７の時刻ｔ０〜ｔ９）。これにより、この次のサイクル（図７の時刻ｔ１０）では、演算処理部１０６において演算に使用されるレジスタには、演算対象の画素データが格納された状態になり、図７に示す時刻ｔ１０から積和演算器３２１〜３２８による積和演算が実行される。
【００８２】
なお、図７の時刻ｔ１０以降も、転送制御部１０３は、行を順次ずらし、画像データ格納部１０５から演算対象画像の水平方向に１０画素ずつ画素データを読み出して、演算処理部１０６に転送するよう指示する。これにより、例えば、図７の時刻ｔ１０〜ｔ１９に示されるように画像データ格納部１０５から２行目の演算対象の画素データ（Ｄ１０、Ｄ１１、・・・、Ｄ１９）が演算処理部１０６のレジスタに供給される。また、例えば、それに続く、時刻ｔ２０〜ｔ２９に示されるように画像データ格納部１０５から３行目の演算対象の画素データ（Ｄ２０、Ｄ２１、・・・、Ｄ２９）が演算処理部１０６のレジスタに供給される。
【００８３】
続いてステップＳ４０２で、演算処理部１０６が、フィルタカーネルにおける水平方向の１行目のフィルタ係数（Ｗ００、Ｗ０１、Ｗ０２）と画素データとの積和演算を行う。そのため、転送制御部１０３は、演算処理部１０６内のレジスタに対して、シフト処理を行うように指示する。この転送制御は第１の転送モードである。また、このステップＳ４０２では、転送制御部１０３は、第１の転送モードのタイミングに合わせて、フィルタ係数格納部１０４からフィルタ係数（フィルタカーネルの水平１行分）を読み出して、演算処理部１０６の積和演算器に転送するよう指示する。このようにして、演算処理部１０６では、第１の転送モードで演算対象の画素データの転送が行われ、フィルタカーネルの水平方向１行分の積和演算が実行される（図７の時刻ｔ１０〜ｔ１２）。
【００８４】
続いて、ステップＳ４０３では、転送制御部１０３は、並列演算（フィルタ演算）の終了条件を確認し、並列演算（フィルタ演算）が終了したか否かを判定する。この時点では、フィルタカーネルの水平方向の１行目について積和演算を行っただけであるので、並列演算（フィルタ演算）が終了していないと転送制御部１０３が判定し（ＮＯ）、ステップＳ４０４に進む。ただし、並列化形状を１×８とした場合、演算グループは１つであるので、ステップＳ４０４では何ら処理を行わずにステップＳ４０２に進む。また、時刻ｔ１０〜ｔ１９における画像データの読み出し及び転送により、次のサイクル（時刻ｔ２０）では、積和演算器３２１〜３２８に２行目の画素データＤ１０〜Ｄ１９が供給可能な状態になる。
【００８５】
そして、再度ステップＳ４０２の処理を行い、演算処理部１０６が、フィルタカーネルにおける水平方向の２行目のフィルタ係数（Ｗ１０、Ｗ１１、Ｗ１２）と画素データとの積和演算を行う（図７の時刻ｔ２０〜ｔ２２）。以降、ステップＳ４０３で、転送制御部１０３が、並列演算（フィルタ演算）の終了と判定するまで、画像処理装置１０１は、ステップＳ４０２及びステップＳ４０４の処理を繰り返し実行する。
【００８６】
フィルタカーネルにおける水平方向の３行目のフィルタ係数（Ｗ２０、Ｗ２１、Ｗ２２）と画素データとの積和演算が行われた後のステップＳ４０３で、転送制御部１０３は、並列演算（フィルタ演算）の終了と判定し（ＹＥＳ）、処理が終了する。並列演算（フィルタ演算）の終了時には、演算処理部１０６内の積和演算器３２１〜３２８からは、次式で表される演算結果が出力される。
【００８７】
【数５】
2020140625.tif 000013
【００８８】
図７の時刻ｔ３２での処理により並列演算（フィルタ演算）が終了した場合には、例えば、積和演算器３２１からはｉ＝０，ｊ＝０としたときの演算結果が出力され、積和演算器３２２からはｉ＝０，ｊ＝１としたときの演算結果が出力される。また、例えば、積和演算器３２８からはｉ＝０，ｊ＝７としたときの演算結果が出力される。前述した動作を、演算対象画像において、演算対象の行を順次ずらし、さらに最終行に達したら１行目に戻って演算対象の列を次の列にずらすようにして、図４に示した動作を繰り返すことにより、演算対象画像全体をフィルタ演算した演算出力画像が得られる。
【００８９】
第１の実施形態によれば、形状制御部１０２により複数の積和演算器を複数の演算グループにグループ化して並列化形状を決定し、演算処理部１０６内にあるレジスタ間の接続を設定する。さらに、転送制御部１０３により、演算対象の画素データの転送制御を行うことで、並列に演算されるフィルタ演算の出力画素が、演算出力画像上で２次元になるように演算することができる。さらには、その２次元形状も制御することが可能である。
【００９０】
これにより、並列度（積和演算器の数）に比較して、小さなサイズの演算対象画像に対しても、フィルタ演算に寄与しない積和演算器が発生することを抑制し、積和演算器を有効に使用してフィルタ演算を行うことが可能となる。したがって、並列度を増加させるほどフィルタ演算を効率的に行うことができ、演算対象画像のサイズにかかわらず、演算効率を低下させることなく、良好な演算効率でのフィルタ演算を実行することが可能となる。
【００９１】
タイムチャート（図５、図６、図７）を用いて示したように、それぞれの並列化形状でフィルタ演算に要する時間が異なる場合がある。このような場合には、形状制御部１０２は、フィルタ演算処理時間が短くなる並列化形状を選択するようにすればよい。例えば、前述した演算対象画像２０１の場合、並列化形状として１×８、２×４、４×２の何れを採用してもフィルタ演算に寄与しない演算器は発生しない。しかしながら、タイムチャート（図５、図６、図７）に示されるように、フィルタ演算の処理時間が短いのは並列化形状が２×４又は４×２の場合であるので、形状制御部１０２は、並列化形状として２×４又は４×２を選択することが望ましい。
【００９２】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。第１の実施形態における画像処理装置では、形状制御信号によって演算処理部１０６内のレジスタ間の接続状態が一旦決定されると、画素データの転送は、決定された接続状態で隣接するレジスタ間でのデータ転送に限定される。このために、第２の転送モードで行われる演算グループ間を跨る画素データの転送を実現するために、隣接するレジスタ間でのデータ転送を複数のクロックサイクルに亘って行う必要があった。
【００９３】
第２の実施形態における画像処理装置では、形状制御信号によるレジスタ間の接続状態の設定とは別に、転送制御信号による転送モードに応じてレジスタ間の接続状態を制御する。これにより、第２の実施形態では、第２の転送モードでの画素データの転送に必要な時間を第１の実施形態よりも大幅に短縮でき、第１の実施形態よりもフィルタ演算を高速に行うことが可能となる。
【００９４】
図８は、第２の実施形態における画像処理装置８０１の構成例を示すブロック図である。図８において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。画像処理装置８０１は、形状制御部１０２、転送制御部８０３、フィルタ係数格納部１０４、画像データ格納部８０５、及び演算処理部８０６を有する。
【００９５】
転送制御部８０３は、図１に示した転送制御部１０３の機能に加えて、転送モードに応じて演算処理部８０６内のレジスタ間の接続状態を制御する機能を有する。画像データ格納部８０５には、図１に示した画像データ格納部１０５と同様に、フィルタ演算の演算対象画像の画素データが格納される。ここで、本実施形態では、画像データ格納部８０５は、フィルタ演算を高速に行うために複数の画素データを１つのクロックサイクルで読み出し可能なメモリ幅を有するとする。演算処理部８０６は、並列して演算を実行可能な複数の演算器を有し、入力されるフィルタ係数Ｓ２と画素データＳ３とを用いてフィルタ演算を行う。
【００９６】
図９は、演算処理部８０６の構成例を示すブロック図である。図９において、図３に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。演算処理部８０６は、レジスタ３０１〜３０８、３１１〜３１８、積和演算器３２１〜３２８、及びセレクタ３３１〜３３３、９４１〜９４６、９５１〜９５６を有する。
【００９７】
セレクタ９４１〜９４６、９５１〜９５６は、接続されている複数の入力から１つを選択して出力する。セレクタ９４１〜９４６、９５１〜９５６には転送制御部８０３からの転送制御信号が接続されており、セレクタ９４１〜９４６、９５１〜９５６は、この転送制御信号により、複数の入力のうちのどの入力を選択して出力するかを設定可能となっている。本実施形態では、転送制御信号により、第１の転送モードが設定されている時と第２の転送モードが設定されている時とで、セレクタ９４１〜９４６、９５１〜９５６の入出力関係を切り替えることが可能である。
【００９８】
本実施形態では、転送制御部８０３は、セレクタ９４１〜９４６、９５１〜９５６に対して、以下の表に示す入出力間の接続になるように転送制御信号を出力する。以下の表では、並列化形状が異なる３つの場合について、セレクタ９４１〜９４６、９５１〜９５６が、転送制御信号に応じてどのような入出力接続状態になるかを示している。なお、形状制御部１０２によって制御されるセレクタ３３１〜３３３の動作は第１の実施形態と同様である。
【００９９】
・並列化形状を１×８とするとき
【表５】
2020140625.tif 000014
【０１００】
この表では、例えば並列化形状を１×８とするときの第１の転送モードでは、セレクタ９４１は、レジスタ３０２の出力を選択して出力することを示している。同様に、セレクタ９４２は、レジスタ３０３の出力を選択して出力することを示している。なお、セレクタ９４２に対して直接的には、並列化形状を１×８とするときにレジスタ３０３の出力を選択し出力するセレクタ３３１が接続されているので、括弧内にセレクタ３３１を記載している。また、斜線は、どの入力を出力としてもよいことを示している。さらに、並列化形状を１×８とするときには演算グループが１つであり第２の転送モードは存在しないので、表中では×としている。
【０１０１】
・並列化形状を２×４とするとき
【表６】
2020140625.tif 000015
【０１０２】
この表で、セレクタ９４５、９４６の出力が画素データ１、２とあるのは、画像データ格納部８０５の出力を選択していることを示す。
【０１０３】
・並列化形状を４×２とするとき
【表７】
2020140625.tif 000016
【０１０４】
次に、演算処理部８０６の動作について説明する。以下に説明する演算処理部８０６の動作は、転送制御部８０３から入力される転送制御信号Ｓ４によって制御される。この動作が行われる前に、第１の実施形態と同様に、演算処理部８０６内におけるレジスタ３０１〜３０８、３１１〜３１８の接続状態は、所望の並列化形状に従って決定されているものとする。
【０１０５】
第２の実施形態においても、第１の実施形態と同様に第１の転送モードでの画素データの転送と第２の転送モードでの画素データの転送とを繰り返すことで、フィルタ演算が実行される。第１の転送モードの時には、レジスタ３０１〜３０８、３１１〜３１８の接続状態は、第１の実施形態と同様であり動作も同じである。つまり、第１の転送モードでは、転送される画素データが演算グループ内の積和演算器での演算にのみ使用されるように、レジスタ間で画素データが転送される。
【０１０６】
第１の実施形態と異なるのは、第２の転送モードの場合である。第１の実施形態においては、第１の転送モードと第２の転送モードとでレジスタ間の接続状態は変更しない。そのため、第２の転送モードで行われる演算グループ間を跨る画素データの転送を実現するために、複数のクロックサイクルに亘って画素データの転送を行う必要があった。それに対して、第２の実施形態では、第１の転送モードと第２の転送モードとでレジスタ間の接続状態を変更することにより、第２の転送モードで行われる画素データの転送時間を短縮する。
【０１０７】
第２の実施形態における一連の動作を、図１０に示すフローチャートと、図１１及び図１２に示すタイムチャートとを参照して説明する。図１０は、第２の実施形態における画像処理装置の演算処理例を示すフローチャートである。図１１は、並列化形状を２×４とした場合のフィルタ演算の演算処理例を示すタイムチャートであり、図１２は、並列化形状を４×２とした場合のフィルタ演算の演算処理例を示すタイムチャートである。
【０１０８】
最初に、図１０及び図１１を参照して、並列化形状を２×４とした場合の動作について説明する。第１の実施形態と同様に、形状制御部１０２による並列化形状の決定は、図１０に示す並列演算処理の開始に先だって行われている。ステップＳ１００１〜Ｓ１００３にて、画像処理装置８０１は、演算処理部８０６が有する積和演算器での並列演算（フィルタ演算）のための準備（画素データの用意）を行い、並列演算で使用するレジスタ群に画像データ格納部８０５から画素データを供給する。
【０１０９】
まずステップＳ１００１では、転送制御部８０３は、第２の転送モードに設定し、画像データ格納部８０５から演算対象画像の水平方向に６画素の画素データを読み出して、演算処理部８０６に転送するよう指示する（図１１の時刻ｔ０）。図１１において、時刻ｔ０での画像データ格納部８０５からは、画素データＤ００〜Ｄ０５がパラレルに出力されている（図１１においてはＤ０＊として表記）。第２の転送モードでのレジスタ間接続状態になっているので、この次のサイクル（図１１の時刻ｔ１）では、演算処理部８０６内のレジスタ３０５〜３０８、３１７、３１８には、演算対象の画素データＤ００〜Ｄ０５が格納された状態になる。
【０１１０】
続いて、ステップＳ１００２では、転送制御部８０３は、演算処理部８０６において並列演算に使用するレジスタ群に演算対象の画素データが格納されているか否か、つまり、フィルタ演算の準備が完了しているか否かを判定する。この時点では、演算処理部８０６内のレジスタ３０１〜３０４、３１３、３１４には画素データが格納されていないので、フィルタ演算の準備が完了していないと転送制御部８０３が判定し（ＮＯ）、ステップＳ１００３に進む。
【０１１１】
ステップＳ１００３では、転送制御部８０３は、演算処理部８０６内のレジスタに対して、第１の転送モードでシフト処理（レジスタ間の画素データ転送）を行うように指示する（図１１の時刻ｔ２〜ｔ３）。
【０１１２】
さらにステップＳ１００１に戻って、転送制御部８０３は、第２の転送モードで、画像データ格納部８０５から読み出された画素データＤ１０〜Ｄ１５をレジスタ３０５〜３０８、３１７、３１８に転送する。また、それと同時に、転送制御部８０３は、演算処理部８０６内のレジスタ間での画素データの転送を行うように指示する（図１１の時刻ｔ４）。これにより、このサイクル（図１１の時刻ｔ４）では、演算処理部８０６において演算に使用されるレジスタには、演算対象の画素データが格納された状態になり、図１１に示す時刻ｔ４から積和演算器３２１〜３２８による積和演算が実行される。
【０１１３】
このとき、ステップＳ１００２において、フィルタ演算の準備が完了したと転送制御部８０３が判定し（ＹＥＳ）、ステップＳ１００４に進む。ステップＳ１００４では、演算処理部８０６が、フィルタカーネルにおける水平方向の１行目のフィルタ係数（Ｗ００、Ｗ０１、Ｗ０２）と画素データとの積和演算を行う（図１１の時刻ｔ４〜ｔ６）。また、積和演算と並行して、第１の転送モードでレジスタ間の画素データ転送が行われる（図１１の時刻ｔ５〜ｔ６）。
【０１１４】
続いて、ステップＳ１００５では、転送制御部８０３は、並列演算（フィルタ演算）の終了条件を確認し、並列演算（フィルタ演算）が終了したか否かを判定する。この時点では、まだフィルタカーネルの水平方向の１行目と画素データとの積和演算を行っただけであるので、並列演算（フィルタ演算）が終了していないと転送制御部８０３が判定し（ＮＯ）、ステップＳ１００６に進む。
【０１１５】
ステップＳ１００６では、転送制御部８０３は、演算処理部８０６に対して第２の転送モードでレジスタ間の画素データ転送を行うように指示する（図１１の時刻ｔ７）。このサイクル（図１１の時刻ｔ７）からフィルタカーネルの２行目について積和演算器３２１〜３２８による積和演算が実行される。
【０１１６】
その後、再度ステップＳ１００４の処理を行い、演算処理部８０６は、フィルタカーネルにおける水平方向の２行目のフィルタ係数（Ｗ１０、Ｗ１１、Ｗ１２）と画素データとの積和演算を行う（図１１の時刻ｔ７〜ｔ９）。また、積和演算と並行して、第１の転送モードでレジスタ間の画素データ転送が行われる（図１１の時刻ｔ８〜ｔ９）。以降、ステップＳ１００５で、転送制御部８０３が、並列演算（フィルタ演算）の終了と判定するまで、画像処理装置８０１は、ステップＳ１００４及びステップＳ１００６の処理を繰り返し実行する。
【０１１７】
フィルタカーネルにおける水平方向の３行目のフィルタ係数（Ｗ２０、Ｗ２１、Ｗ２２）と画素データとの積和演算が行われた後のステップＳ１００５で、転送制御部８０３は、並列演算（フィルタ演算）の終了と判定し（ＹＥＳ）、処理が終了する。並列演算（フィルタ演算）の終了時には、演算処理部８０６内の積和演算器３２１〜３２８からは、第１の実施形態と同様の演算結果が得られる。
【０１１８】
次に、図１０及び図１２を参照して、並列化形状を４×２とした場合の動作について説明する。並列化形状を２×４とした場合と同様に、形状制御部１０２による並列化形状の決定は、図１０のフローチャートに示す並列演算処理の開始に先だって行われている。
【０１１９】
まずステップＳ１００１では、転送制御部８０３は、第２の転送モードに設定し、画像データ格納部８０５から演算対象画像の水平方向に４画素の画素データを読み出して、演算処理部８０６に転送するよう指示する（図１２の時刻ｔ０）。図１２において、時刻ｔ０での画像データ格納部からは、画素データＤ００〜Ｄ０３がパラレルに出力されている（図１２においてはＤ０＊として表記）。これにより、この次のサイクル（図１２の時刻ｔ１）では、演算処理部８０６内のレジスタ３０７、３０８、３１７、３１８には、演算対象の画素データＤ００〜Ｄ０３が格納された状態になる。
【０１２０】
続いて、ステップＳ１００２では、転送制御部８０３は、フィルタ演算の準備が完了しているか否かを判定する。この時点では、演算処理部８０６内のレジスタ３０１〜３０６、３１１〜３１６には画素データが格納されていないので、フィルタ演算の準備が完了していないと転送制御部８０３が判定し（ＮＯ）、ステップＳ１００３に進む。ステップＳ１００３では、転送制御部８０３は、演算処理部８０６内のレジスタに対して、第１の転送モードでシフト処理（レジスタ間の画素データ転送）を行うように指示する（図１２の時刻ｔ２〜ｔ３）。
【０１２１】
ステップＳ１００２で、転送制御部８０３が、フィルタ演算の準備完了と判定するまで、画像処理装置８０１は、ステップＳ１００１及びステップＳ１００３の処理を繰り返し実行する。ステップＳ１００１の処理は、図１２の時刻ｔ４、ｔ７、ｔ１０において実行され、ステップＳ１００３の処理は、図１２の時刻ｔ５〜ｔ６、ｔ８〜ｔ９において実行される。そして、図１２の時刻ｔ１０では、演算処理部８０６において演算に使用されるレジスタには、演算対象の画素データが格納された状態になり、図１２に示す時刻ｔ１０から積和演算器３２１〜３２８による積和演算が実行される。
【０１２２】
ステップＳ１００４では、演算処理部８０６が、フィルタカーネルにおける水平方向の１行目のフィルタ係数（Ｗ００、Ｗ０１、Ｗ０２）と画素データとの積和演算を行う（図１２の時刻ｔ１０〜ｔ１２）。また、積和演算と並行して、第１の転送モードでレジスタ間の画素データ転送が行われる（図１２の時刻ｔ１１〜ｔ１２）。
【０１２３】
続いて、ステップＳ１００５では、転送制御部８０３は、並列演算（フィルタ演算）の終了条件を確認し、並列演算（フィルタ演算）が終了したか否かを判定する。この時点では、まだフィルタカーネルの水平方向の１行目と画素データとの積和演算を行っただけであるので、並列演算（フィルタ演算）が終了していないと転送制御部８０３が判定し（ＮＯ）、ステップＳ１００６に進む。
【０１２４】
ステップＳ１００６では、転送制御部８０３は、演算処理部８０６に対して第２の転送モードでレジスタ間の画素データ転送を行うように指示する（図１２の時刻ｔ１３）。このサイクル（図１２の時刻ｔ１３）からフィルタカーネルの２行目について積和演算器３２１〜３２８による積和演算が実行される。
【０１２５】
その後、再度ステップＳ１００４の処理を行い、演算処理部８０６は、フィルタカーネルにおける水平方向の２行目のフィルタ係数（Ｗ１０、Ｗ１１、Ｗ１２）と画素データとの積和演算を行う（図１２の時刻ｔ１３〜ｔ１５）。また、積和演算と並行して、第１の転送モードでレジスタ間の画素データ転送が行われる（図１２の時刻ｔ１４〜ｔ１５）。以降、ステップＳ１００５で、転送制御部８０３が、並列演算（フィルタ演算）の終了と判定するまで、画像処理装置８０１は、ステップＳ１００４及びステップＳ１００６の処理を繰り返し実行する。
【０１２６】
フィルタカーネルにおける水平方向の３行目のフィルタ係数（Ｗ２０、Ｗ２１、Ｗ２２）と画素データとの積和演算が行われた後のステップＳ１００５で、転送制御部８０３は、並列演算（フィルタ演算）の終了と判定し（ＹＥＳ）、処理が終了する。並列演算（フィルタ演算）の終了時には、演算処理部８０６内の積和演算器３２１〜３２８からは、第１の実施形態と同様の演算結果が得られる。
【０１２７】
第２の実施形態によれば、第１の実施形態と同様に、演算対象画像のサイズにかかわらず、演算効率を低下させることなく、良好な演算効率でのフィルタ演算を実行することが可能となる。また、第２の実施形態では、第１の転送モードと第２の転送モードとでレジスタ間の接続状態を変更することにより、第２の転送モードで行われる画素データの転送時間を短縮することができる。したがって、第２の実施形態における画像処理装置では、第１の実施形態よりもフィルタ演算を高速に行うことが可能になり、フィルタ演算の演算効率を向上させることができる。
【０１２８】
（第３の実施形態）
次に、本発明の第３の実施形態について説明する。第１及び第２の実施形態では、形状制御部１０２によりフィルタ演算の演算対象領域の形状に応じて並列化形状を変更する例を示した。第１の実施形態において示したように、１次元の並列化形状よりも２次元の並列化形状とした方が高速にフィルタ演算処理できる場合がある。このような場合には、並列化形状を変更しなくても、２次元の並列化形状を実現するだけで、１次元の並列化形状とする場合よりも高速にフィルタ演算処理を行うことが可能である。
【０１２９】
第３の実施形態では、本発明を適用して単純に２次元の並列化形状を実現する場合について説明する。つまり、第３の実施形態では、並列化形状を２次元の固定された形状とし、フィルタ演算を行う例を示す。そのため、第３の実施形態における画像処理装置では、複数の並列化形状を切り替えるために必要となる形状制御部は不要である。
【０１３０】
図１３は、第３の実施形態における画像処理装置１３０１の構成例を示すブロック図である。前述したように本実施形態では、並列化形状は固定であるため、画像処理装置１３０１は、複数の並列化形状を切り替えるための形状制御部は有していない。図１３において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。画像処理装置１３０１は、転送制御部１３０３、フィルタ係数格納部１０４、画像データ格納部１０５、及び演算処理部１３０６を有する。
【０１３１】
転送制御部１３０３は、フィルタ係数格納部１０４及び画像データ格納部１０５からフィルタ係数Ｓ２及び画素データＳ３をそれぞれ読み出して演算処理部１３０６に供給する制御を行う。また、転送制御部１３０３は、転送制御信号Ｓ４を演算処理部１３０６に出力することにより、演算処理部１３０６内での画素データの転送の制御を行う。ここで、本実施形態では並列化形状は固定であるので、転送制御部１３０３も、所定の並列化形状に適したデータ転送制御を行う。例えば、並列化形状が２×４であれば、第１又は第２の実施形態において説明した転送制御部１０３又は８０３の動作のうち、並列化形状を２×４とした場合と同様の動作を行う。
【０１３２】
演算処理部１３０６は、並列して演算を実行可能な複数の演算器を有し、入力されるフィルタ係数Ｓ２と画素データＳ３とを用いてフィルタ演算を行う。ここで、本実施形態では並列化形状は固定であるので、演算処理部１３０６も、所定の並列化形状とした場合の動作を行う。したがって、図３や図９に示したセレクタ３３１〜３３３は不要となり、代わりに所定の並列化形状としたときのセレクタの入出力接続を実現するようにレジスタ間を接続すればよい。
【０１３３】
このように画像処理装置１３０１を構成することで、２次元の並列化形状を有するフィルタ演算処理を実現することが可能となる。
【０１３４】
（本発明の他の実施形態）
本発明は、前述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読み出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【０１３５】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【０１３６】
１０１、８０１、１３０１：画像処理装置  １０２：形状制御部  １０３、８０３、１３０３：転送制御部  １０４：フィルタ係数格納部  １０５、８０５：画像データ格納部  １０６、８０６、１３０６：演算処理部  ３０１〜３０８、３１１〜３１８：レジスタ  ３２１〜３２８：積和演算器  ３３１〜３３３：セレクタ  ９４１〜９４６、９５１〜９５６：セレクタ
【図１】
2020140625.tif 000017
【図２】
2020140625.tif 000018
【図３】
2020140625.tif 000019
【図４】
2020140625.tif 000020
【図５】
2020140625.tif 000021
【図６】
2020140625.tif 000022
【図７】
2020140625.tif 000023
【図８】
2020140625.tif 000024
【図９】
2020140625.tif 000025
【図１０】
2020140625.tif 000026
【図１１】
2020140625.tif 000027
【図１２】
2020140625.tif 000028
【図１３】
2020140625.tif 000029
【図１４】
2020140625.tif 000030