(57)【要約】【課題】割り算器や浮動小数点演算器を用いることなしに画像を任意の倍数で拡大縮小できる方法を提供する。【解決手段】補間係数を格納した係数テーブルと、入力画像データを構成する画素データのそれぞれと係数テーブルに格納された補間係数とを乗算する乗算器と、乗算器から出力される乗算済みデータの加算を繰り返し、画素データの所定個数分について乗算済みデータの総和を取る加算器と、画素データの所定個数分について乗算済みデータの総和が得られるタイミングで乗算済みデータの総和を出力するセレクタと、セレクタの出力をシフト演算することで、出力画像データのビット数を入力画像データのビット数を調整するシフト回路とを備えている。【選択図】図７
2015012415.tif 000002
【特許請求の範囲】
【請求項１】
入力画像データをＵ／Ｄ倍（Ｕ、Ｄは自然数）に変換して出力画像データとする画像の拡大縮小処理で使用される補間係数を格納した係数テーブルの作成方法であって、
（ａ）Ｕ倍と１／Ｄ倍の変換を同時に行う伝達関数のフィルタを設計するステップと、
（ｂ）前記フィルタのインパルス応答で規定される補間係数を整数化して整数化済み補間係数を算出するステップと、
（ｃ）前記整数化済み補間係数を前記Ｕ／Ｄ倍の変換処理での使用順に整列させて前記係数テーブルに格納するステップと、を備え、
前記ステップ（ｂ）は、
（ｂ−１）前記補間係数に所定数の２の累乗を乗算した後、四捨五入、切り捨て、および切り上げの何れかを行って前記補間係数を整数化するステップと、
（ｂ−２）前記入力画像データを構成する複数の画素データのうち予め定めた画素数と同じ個数ずつに前記整数化済み補間係数を区分し、区分された前記整数化済み補間係数の総和が、前記所定数の２の累乗と同じとなるように、区分された前記整数化済み補間係数に１ずつ加算、または１ずつ減算するステップと、を有し、
前記ステップ（ｃ）は、
（ｃ−１）前記複数の画素データに対し、前記予め定めた画素数分ずつ前記整数化済み補間係数がそれぞれ乗算されるように前記整数化済み補間係数を区分するステップと、
（ｃ−２）前記区分された前記整数化済み補間係数が、予め定めた順番で繰り返し前記複数の画素データに対して乗算されるように、前記予め定めた順番に前記区分された前記整数化済み補間係数を前記係数テーブルに格納するステップと、
（ｃ−３）前記複数の画素データに対し、前記区分された前記整数化済み補間係数を所定画素数分スキップさせて乗算するか、またはスキップさせずに乗算するかを規定するスキップ数を、前記区分された前記整数化済み補間係数に対応付けて前記係数テーブルに格納するステップと、を有する、係数テーブルの作成方法。
【請求項２】
入力画像データをＵ／Ｄ倍（Ｕ、Ｄは自然数）に変換して出力画像データとする画像の拡大縮小処理で使用される補間係数を格納した係数テーブルの作成方法であって、
（ａ）Ｕ／Ｄ倍の変換を行う補間関数によるフィルタを設計するステップと、
（ｂ）前記補間関数で規定される補間係数を整数化して整数化済み補間係数を算出するステップと、
（ｃ）前記整数化済み補間係数を前記Ｕ／Ｄ倍の変換処理での使用順に整列させて前記係数テーブルに格納するステップと、を備え、
前記ステップ（ｂ）は、
（ｂ−１）前記補間係数に所定数の２の累乗を乗算した後、四捨五入、切り捨て、および切り上げの何れかを行って前記補間係数を整数化すると共に、当該整数化された補間係数を前記所定数の２の累乗から差し引いて前記補間係数を整数化するステップと、
（ｂ−２）前記入力画像データを構成する複数の画素データのうち予め定めた画素数と同じ個数ずつに前記整数化済み補間係数を区分し、区分された前記整数化済み補間係数の総和が、前記所定数の２の累乗と同じとなるように、区分された前記整数化済み補間係数に１ずつ加算、または１ずつ減算するステップと、を有し、
前記ステップ（ｃ）は、
（ｃ−１）前記複数の画素データに対し、前記予め定めた画素数分ずつ前記整数化済み補間係数がそれぞれ乗算されるように前記整数化済み補間係数を区分するステップと、
（ｃ−２）前記区分された前記整数化済み補間係数が、予め定めた順番で繰り返し前記複数の画素データに対して乗算されるように、前記予め定めた順番に前記区分された前記整数化済み補間係数を前記係数テーブルに格納するステップと、
（ｃ−３）前記複数の画素データに対し、前記区分された前記整数化済み補間係数を所定画素数分スキップさせて乗算するか、またはスキップさせずに乗算するかを規定するスキップ数を、前記区分された前記整数化済み補間係数に対応付けて前記係数テーブルに格納するステップと、を有する、係数テーブルの作成方法。
【請求項３】
前記ステップ（ｃ−２）は、
前記区分された前記整数化済み補間係数の前記予め定めた順番での繰り返し乗算は、前記Ｕ倍に相当する周期で繰り返される、請求項１または請求項２記載の係数テーブルの作成方法。
【請求項４】
前記ステップ（ｂ−１）は、
２に累乗される前記所定数を、前記画素データのビット数で規定する、請求項１または請求項２記載の係数テーブルの作成方法。
【請求項５】
入力画像データをＵ／Ｄ倍（Ｕ、Ｄは自然数）に変換して出力画像データとする画像の拡大縮小処理装置であって、
請求項１または請求項２に記載の係数テーブルの作成方法で作成された補間係数を格納した係数テーブルと、
前記入力画像データを構成する画素データのそれぞれと前記係数テーブルに格納された前記補間係数とを乗算する乗算器と、
前記乗算器から出力される乗算済みデータの加算を繰り返し、前記画素データの所定個数分について前記乗算済みデータの総和を取る加算器と、
前記画素データの所定個数分について前記乗算済みデータの総和が得られるタイミングで前記乗算済みデータの総和を出力するセレクタと、
前記セレクタの出力をシフト演算することで、前記出力画像データのビット数を前記入力画像データのビット数を調整するシフト回路と、を備える、画像の拡大縮小処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は補間係数テーブル作成方法および当該係数テーブル作成方法に基づいて作成された係数テーブルを有した画像の拡大縮小演算装置に関する。
【背景技術】
【０００２】
一般的な画像の拡大縮小処理装置としては、例えば特許文献１に開示されるように、まず、原画像をＵ倍に拡大した後、１／Ｄ倍に縮小するという手順で、整数倍だけでなく有理数倍も含めたＵ／Ｄ倍任意拡大縮小処理を実現している。しかしながら、この方法では、原画像をＵ倍に拡大するための演算が必要であると共に、Ｕ倍に拡大した画像データを格納するためのメモリが必要となり、演算およびメモリが冗長性を含むこととなる。
【０００３】
一方、特許文献２には、原画像から中間画像（Ｕ倍画像）を求めずにいきなり最終画像（Ｕ／Ｄ倍画像）を求める技術が開示されており、冗長性が解消されているが、補間処理については従来的な手法を用いており、割り算器や浮動小数点演算器を用いる必要があると考えられる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−６３８２６号公報
【特許文献２】特開２０００−１６５６６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
以上説明したように、従来の画像の拡大縮小処理においては、割り算器や浮動小数点演算器を用いる必要があり、装置構成が複雑になるという問題があった。
【０００６】
本発明は上記のような問題点を解消するためになされたもので、割り算器や浮動小数点演算器を用いることなしに画像を任意の倍数で拡大縮小できる方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明に係る係数テーブルの作成方法の第１の態様は、入力画像データをＵ／Ｄ倍（Ｕ、Ｄは自然数）に変換して出力画像データとする画像の拡大縮小処理で使用される補間係数を格納した係数テーブルの作成方法であって、Ｕ倍と１／Ｄ倍の変換を同時に行う伝達関数のフィルタを設計するステップ（ａ）と、前記フィルタのインパルス応答で規定される補間係数を整数化して整数化済み補間係数を算出するステップ（ｂ）と、前記整数化済み補間係数を前記Ｕ／Ｄ倍の変換処理での使用順に整列させて前記係数テーブルに格納するステップ（ｃ）とを備え、前記ステップ（ｂ）は、前記補間係数に所定数の２の累乗を乗算した後、四捨五入、切り捨て、および切り上げの何れかを行って前記補間係数を整数化するステップ（ｂ−１）と、前記入力画像データを構成する複数の画素データのうち予め定めた画素数と同じ個数ずつに前記整数化済み補間係数を区分し、区分された前記整数化済み補間係数の総和が、前記所定数の２の累乗と同じとなるように、区分された前記整数化済み補間係数に１ずつ加算、または１ずつ減算するステップ（ｂ−２）とを有し、前記ステップ（ｃ）は、前記複数の画素データに対し、前記予め定めた画素数分ずつ前記整数化済み補間係数がそれぞれ乗算されるように前記整数化済み補間係数を区分するステップ（ｃ−１）と、前記区分された前記整数化済み補間係数が、予め定めた順番で繰り返し前記複数の画素データに対して乗算されるように、前記予め定めた順番に前記区分された前記整数化済み補間係数を前記係数テーブルに格納するステップ（ｃ−２）と、前記複数の画素データに対し、前記区分された前記整数化済み補間係数を所定画素数分スキップさせて乗算するか、またはスキップさせずに乗算するかを規定するスキップ数を、前記区分された前記整数化済み補間係数に対応付けて前記係数テーブルに格納するステップ（ｃ−３）とを有している。
【０００８】
本発明に係る係数テーブルの作成方法の第２の態様は、入力画像データをＵ／Ｄ倍（Ｕ、Ｄは自然数）に変換して出力画像データとする画像の拡大縮小処理で使用される補間係数を格納した係数テーブルの作成方法であって、Ｕ／Ｄ倍の変換を行う補間関数によるフィルタを設計するステップ（ａ）と、前記補間関数で規定される補間係数を整数化して整数化済み補間係数を算出するステップ（ｂ）と、前記整数化済み補間係数を前記Ｕ／Ｄ倍の変換処理での使用順に整列させて前記係数テーブルに格納するステップ（ｃ）とを備え、前記ステップ（ｂ）は、前記補間係数に所定数の２の累乗を乗算した後、四捨五入、切り捨て、および切り上げの何れかを行って前記補間係数を整数化すると共に、当該整数化された補間係数を前記所定数の２の累乗から差し引いて前記補間係数を整数化するステップ（ｂ−１）と、前記入力画像データを構成する複数の画素データのうち予め定めた画素数と同じ個数ずつに前記整数化済み補間係数を区分し、区分された前記整数化済み補間係数の総和が、前記所定数の２の累乗と同じとなるように、区分された前記整数化済み補間係数に１ずつ加算、または１ずつ減算するステップ（ｂ−２）とを有し、前記ステップ（ｃ）は、前記複数の画素データに対し、前記予め定めた画素数分ずつ前記整数化済み補間係数がそれぞれ乗算されるように前記整数化済み補間係数を区分するステップ（ｃ−１）と、前記区分された前記整数化済み補間係数が、予め定めた順番で繰り返し前記複数の画素データに対して乗算されるように、前記予め定めた順番に前記区分された前記整数化済み補間係数を前記係数テーブルに格納するステップ（ｃ−２）と、前記複数の画素データに対し、前記区分された前記整数化済み補間係数を所定画素数分スキップさせて乗算するか、またはスキップさせずに乗算するかを規定するスキップ数を、前記区分された前記整数化済み補間係数に対応付けて前記係数テーブルに格納するステップ（ｃ−３）とを有している。
【０００９】
本発明に係る係数テーブルの作成方法の第３の態様は、前記ステップ（ｃ−２）が、前記区分された前記整数化済み補間係数の前記予め定めた順番での繰り返し乗算は、前記Ｕ倍に相当する周期で繰り返される。
【００１０】
本発明に係る係数テーブルの作成方法の第４の態様は、前記ステップ（ｂ−１）が、２に累乗される前記所定数を、前記画素データのビット数で規定する。
【００１１】
本発明に係る画像の拡大縮小処理装置の態様は、入力画像データをＵ／Ｄ倍（Ｕ、Ｄは自然数）に変換して出力画像データとする画像の拡大縮小処理装置であって、係数テーブルの作成方法の第１または第２の態様に記載の係数テーブルの作成方法で作成された補間係数を格納した係数テーブルと、前記入力画像データを構成する画素データのそれぞれと前記係数テーブルに格納された前記補間係数とを乗算する乗算器と、前記乗算器から出力される乗算済みデータの加算を繰り返し、前記画素データの所定個数分について前記乗算済みデータの総和を取る加算器と、前記画素データの所定個数分について前記乗算済みデータの総和が得られるタイミングで前記乗算済みデータの総和を出力するセレクタと、前記セレクタの出力をシフト演算することで、前記出力画像データのビット数を前記入力画像データのビット数を調整するシフト回路とを備えている。
【発明の効果】
【００１２】
本発明によれば、割り算器や浮動小数点演算器を用いることなしに画像を任意の倍数で拡大縮小処理を行うことができる。
【図面の簡単な説明】
【００１３】
【図１】Ｕ／Ｄ倍任意拡大縮小処理を模式的に示すブロック図である。
【図２】画像をＵ倍に拡大する場合の伝達関数を示す図である。
【図３】画像を１／Ｄ倍に縮小する場合の伝達関数を示す図である。
【図４】画像をＵ／Ｄ倍に拡大する場合の伝達関数を示す図である。
【図５】画像をＵ／Ｄ倍に縮小する場合の伝達関数を示す図である。
【図６】キュービックコンボリューションによる補間を説明する図である。
【図７】本発明に係る実施の形態の画像の拡大縮小処理装置の基本構成を示すブロック図である。
【図８】本発明に係る係数テーブルの作成方法を示すフローチャートである。
【図９】伝達関数ＨＵＤ（ｚ）のフィルタ設計を説明するフローチャートである。
【図１０】周波数特性のベクトルｆｎと振幅特性のベクトルｌｎの関係を示す図である。
【図１１】インパルス応答の一例を示す図である。
【図１２】補間係数の整数化を説明するフローチャートである。
【図１３】補間係数の整列処理を説明するフローチャートである。
【図１４】ｙ（０）の計算結果を示す図である。
【図１５】ｙ（１）の計算結果を示す図である。
【図１６】ｙ（２）の計算結果を示す図である。
【図１７】ｙ（３）の計算結果を示す図である。
【図１８】係数テーブルの一例を示す図である。
【図１９】係数テーブルの一例を示す図である。
【発明を実施するための形態】
【００１４】
＜始めに＞
実施の形態の説明に先立って、本発明の前提となる画像の拡大縮小処理について説明する。
【００１５】
＜伝達関数を用いた例＞
まず、伝達関数を用いた画像の拡大縮小処理の例として、冗長性を排除したＵ／Ｄ倍任意拡大縮小処理の手順について説明する。
【００１６】
図１は、Ｕ／Ｄ倍任意拡大縮小処理を模式的に示すブロック図であり、入力画像データｘ（ｎ）がアップサンプラＵＰに入力され、アップサンプリングされた画像データがローパスフィルタであるデジタルフィルタＤＦに与えられ、デジタルフィルタＤＦで帯域制限を受けた画像データｄ（ｎ）がダウンサンプラＤＷに与えられ、ダウンサンプリングされた出力画像データｙ（ｎ）が出力される構成となっている。
【００１７】
ここで、アップサンプラＵＰは、原画像信号の各信号間に画素Ｕ−１個分の０値を挿入する処理を行い、ダウンサンプラＤＷは、画像データからＤ画素ごとに残し、残りを間引く処理を行う。また、デジタルフィルタＤＦのインパルス応答はｈＵＤ（ｎ）であり、図１の処理は畳み込み演算を示す以下の数式（１）で表される。
【００１８】
【数１】
2015012415.tif 000003
【００１９】
ここで、画像をＵ倍に拡大する場合の理想的なフィルタのインパルス応答ｈＵ（ｎ）の伝達関数ＨＵ（ｚ）は、ｚ軸（ｚ＝ｅｘｐ（ｊωＴ））上の表現で図２のように表され、また、１／Ｄ倍に縮小する場合の理想的なフィルタのインパルス応答ｈＤ（ｎ）の伝達関数ＨＤ（ｚ）は図３のように表される。なお。図２および図３において、横軸は正規化角周波数（ω）を表し、縦軸は振幅を表している。
【００２０】
これに対し、Ｕ／Ｄ倍に拡大する場合、すなわちＵ＞Ｄの場合の理想的なフィルタのインパルス応答ｈＵＤ（ｎ）の伝達関数ＨＵＤ（ｚ）は図４のように表される。また、Ｕ／Ｄ倍に縮小する場合、すなわちＵ＜Ｄの場合の理想的なフィルタのインパルス応答ｈＵＤ（ｎ）の伝達関数ＨＵＤ（ｚ）は図５のように表される。なお、図４および図５において、横軸は正規化角周波数（ω）を表し、縦軸は振幅を表している。
【００２１】
なお、図４と図２に示す画像をＵ倍に拡大する場合の伝達関数ＨＵ（ｚ）は同じであり、共に遮断角周波数はπ／Ｕであるので、Ｕ倍に拡大する場合のフィルタを、Ｕ／Ｄ倍に拡大する場合のフィルタとして使用可能である。また、図５の画像をＵ／Ｄ倍に縮小する場合の伝達関数ＨＵＤ（ｚ）の遮断角周波数はπ／Ｄになる。
【００２２】
このように、デジタルフィルタＤＦをインパルス応答ｈＵＤ（ｎ）のフィルタとすることで、画像の拡大用フィルタと縮小用フィルタの２つを備える必要がなくなり、演算量を削減することができる。また、一旦、Ｕ倍に拡大する必要がないので、Ｕ倍に拡大した画像データを格納するためのメモリも不要となる。
【００２３】
ここで、画像を任意の倍数で拡大縮小する場合、フィルタを適切に選ばないと画素周期Ｕで碁盤目状のひずみ（チェス盤ひずみ（checkerboard distortion））が発生する。
【００２４】
これに対しては、以下の数式（２）で表されるように、インパルス応答ｈＵＤ（ｎ）を画素Ｕ個ごとの区切りとみなして、それぞれの区切りの０番目の総和、１番目の総和〜Ｕ−１番目の総和が、それぞれ一定値になるような伝達関数を設定することでチェス盤ひずみを回避することができる。
【００２５】
【数２】
2015012415.tif 000004
【００２６】
＜補間関数を用いた例＞
伝達関数を用いて、画像の拡大縮小を行う方法の他に、キュービックコンボリューションや線形補間、３次補間、ラグランジュ補間、スプライン補間、ランツォシュ補間などの補間関数を用いて画像データを内挿（補間）し、画像の拡大縮小を行う方法がある。
【００２７】
例えば、特開２００１−１８９８５０号公報では、キュービックコンボリューションを用いた内挿の例が説明されている。以下、キュービックコンボリューションを用いた内挿について説明する。
【００２８】
【数３】
2015012415.tif 000005
【００２９】
上記数式（３）はキュービックコンボリューションで用いる補間関数ｈ（ｔ）を表す数式である。
【００３０】
数式（３）において、ａは補間関数の性質を制御するための変数（−０．５〜−２）であり、ｔは隣接する画素から内挿点までの距離を表す。
【００３１】
また、図６にはキュービックコンボリューションの内挿点の一例を示している。図６においては、直列に等間隔で並んだ４点の画素Ｐｉ、Ｐｉ＋１、Ｐｉ＋２およびＰｉ＋３がある場合に、画素Ｐｉ＋１と画素Ｐｉ＋２との間に内挿点Ｘが内挿される場合を示している。
【００３２】
そして、内挿点Ｘからの画素Ｐｉ、Ｐｉ＋１、Ｐｉ＋２およびＰｉ＋３までの距離をそれぞれｔｉ、ｔｉ＋１、ｔｉ＋２およびｔｉ＋３とし、画素間の距離を１．０として示している。それぞれの画素に対する補間関数ｈ（ｔｉ）、ｈ（ｔｉ＋１）、ｈ（ｔｉ＋２）およびｈ（ｔｉ＋３）は以下の数式（４）で表される。
【００３３】
【数４】
2015012415.tif 000006
【００３４】
上記数式（４）で表される補間関数ｈ（ｔｉ）、ｈ（ｔｉ＋１）、ｈ（ｔｉ＋２）およびｈ（ｔｉ＋３）を画素Ｐｉ、Ｐｉ＋１、Ｐｉ＋２およびＰｉ＋３の座標にそれぞれ掛け合わせた総和が内挿点Ｘの位置となる。これを表す数式が、以下に示す数式（５）である。
【００３５】
【数５】
2015012415.tif 000007
【００３６】
＜実施の形態＞
図７は本発明に係る実施の形態の画像の拡大縮小処理装置１００の基本構成を示すブロック図である。なお、以下においては、拡大縮小処理装置１００は、図１に示したＵ／Ｄ倍任意拡大縮小処理を行うものとして説明する。
【００３７】
図７に示されるように、画像の拡大縮小処理装置１００は、ＤＭＡ（Direct Memory Access）バス１９を介して主記憶装置３０に格納された入力画像データｘ（ｎ）を直接に読み出すＤＭＡ読み取り装置（ＤＭＡＲ）５と、ＤＭＡバス１９を介して主記憶装置３０に出力画像データｙ（ｎ）を直接に書き込むＤＭＡ書き込み装置（ＤＭＡＷ）６とをデータ入出力部として備えている。
【００３８】
ＤＭＡＲ５が読み出した１画素分の入力画像データｘ（ｎ）は、セレクタ１を介してピンポンバッファ１０に書き込まれる。ピンポンバッファ１０は、セレクタ１の２つの出力と、セレクタ２の２つの入力との間に互いに並列に接続されたバッファ１１およびバッファ１２を有しており、バッファ１１および１２は書き込み用と読み取り用に順番に入れ替わるように制御される。なお、ピンポンバッファ１０は、デュアルポートＳＲＡＭで構成することも可能である。デュアルポートＳＲＡＭは、データを入出力するためのポートを２つ有し、一方のポートからデータを読み出すのと同時に他方のポートからデータを書き込むことが可能であり、バッファ１１および１２を有する場合と同様の動作が可能である。
【００３９】
セレクタ１は、バッファ１１および１２のうち、書き込み可能な方のバッファを選択し、入力画像データｘ（ｎ）を書き込む。セレクタ２は、バッファ１１および１２のうち、入力画像データｘ（ｎ）が書き込み済みのバッファから画像データを読み出す。
【００４０】
従って、例えば、バッファ１１に入力画像データｘ（ｎ）が書き込まれているタイミングでは、バッファ１２から、既に書き込まれた入力画像データｘ（ｎ）が読み出だされていることとなる。
【００４１】
なお、セレクタ１による書き込み可能なバッファの選択は制御装置７によりセレクタ１が制御されることで実行され、セレクタ２による書き込み済みのバッファの選択は制御装置７によりセレクタ２が制御されることで実行される。
【００４２】
セレクタ２を介してピンポンバッファ１０から読み出された入力画像データｘ（ｎ）は、乗算器８に入力され、また、デジタルフィルタＤＦ（図１）のインパルス応答ｈＵＤ（ｎ）を補間係数として格納する係数テーブル２０からは、セレクタ３を介して補間係数が読み出され、乗算器８に入力される。
【００４３】
なお、係数テーブル２０としては、拡大、縮小の倍率にそれぞれ対応したもの、例えば、２倍、３倍、あるいは１／２倍、３／４倍などに対応した補間係数のテーブルが準備されており、拡大、縮小の倍率に応じたテーブルを、制御装置７がセレクタ３を制御して選択し、選択したテーブルから補間係数が読み出される。
【００４４】
乗算器８では、入力画像データｘ（ｎ）と補間係数ｈＵＤ（ｎ）の乗算を行い、乗算済みデータが加算器９に与えられる。加算器９には、フリップフロップ１３内に格納されている加算済みデータがセレクタ４を介して与えられ、加算器９で、乗算器８から与えられる乗算済みデータと加算される。
【００４５】
乗算済みデータが加算された加算済みデータは、フリップフロップ１３に格納されることでフリップフロップ１３のデータを更新する。なお、フリップフロップ１３の初期値は０であり、１画素分の画像データに対して最初に加算器３で乗算済みデータに加算されるのは初期値０である。
【００４６】
加算器９での加算は数式（１）で表されるｈＵＤ（Ｄｎ−Ｕｋ）とｘ（ｋ）の積の累積算である。なお、乗算器８と加算器９とをそれぞれ複数備えることで、演算の並列性が高まり処理速度を高速化することが可能である。
【００４７】
セレクタ４は、予め設定された選択範囲の画素数分の画像データに対して数式（１）の累積算が終了するまでは加算器３に対してフリップフロップ１３に格納されたデータを与えるが、予め設定された選択範囲の画素数分の画像データに対する累積算が終了した後はフリップフロップ１３に格納されたデータをシフト回路１４に与え、フリップフロップ１３が０に初期化される。なお、セレクタ４の選択動作は制御装置７により制御される。
【００４８】
シフト回路１４は、シフトレジスタなどで構成され、セレクタ４より出力された累積演算結果のデータをシフト演算することで、出力画像データのビット数を入力画像データのビット数と一致させクリップ回路１５に与える。なお、シフト回路１４は、出力画像データのビット数は入力画像データのビット数と一致させる場合や演算精度を高くするために出力画像データのビット数が入力画像より大きい場合や演算精度を低くするために出力画像データのビット数が入力画像より小さい場合がある。
【００４９】
クリップ回路１５は、シフト回路１４より出力され、ビット数が調整された演算結果のデータを、予め設定される最小値と最大値の範囲にデータを切り取り、出力画像データｙ（ｎ）を生成する。出力画像データｙ（ｎ）はＤＭＡＷ６からＤＭＡバス１９を介して、主記憶装置３０に直接に書き込まれる。
【００５０】
このようにして得られた出力画像データｙ（ｎ）は、予め設定された画素数分の入力画像データに基づいて作成された１画素分の画像データであり、同じ処理を異なる選択範囲の予め設定された画素数分の画素に対して行い、次の出力画像データｙ（ｎ）を得る。
【００５１】
これを、１画像の全ての画素に対して繰り返し実行することで、数式（１）に基づいて拡大あるいは縮小された画像が得られる。
【００５２】
図７に示す拡大縮小処理装置１００においては、伝達関数からインパルス応答ｈＵＤ（ｎ）を算出し、補間係数として係数テーブル２０に格納した構成を採っている。そして、当該補間係数の算出においては、整数化処理を行うことで、拡大縮小処理装置１００に割り算器や浮動小数点演算器を用いることなしに、乗算と加減算とデータのシフトのみで、画像の拡大縮小を実現できる。以下、本発明に係る係数テーブルの作成方法について説明する。
【００５３】
＜係数テーブルの作成方法＞
図８は、本発明に係る係数テーブルの作成方法を示すフローチャートである。係数テーブルの作成においては、まず、伝達関数ＨＵＤ（ｚ）のフィルタ特性を持つフィルタを設計する（ステップＳ１）。
【００５４】
次に、設計したフィルタの補間係数の整数化を行い（ステップＳ２）、ステップＳ３では、補間係数の整列処理を行って、補間係数を演算しやすいように並べ変えることで、係数テーブルの作成を終了する。なお、上記ステップＳ１〜Ｓ３の詳細については以下に説明する。
【００５５】
＜伝達関数ＨＵＤ（ｚ）のフィルタ設計＞
図９は、図８におけるステップＳ１の伝達関数ＨＵＤ（ｚ）のフィルタ設計を説明するフローチャートである。フィルタ設計においては、まず、フィルタ特性の決定を行う（ステップＳ１１）。フィルタ特性の決定では、フィルタの周波数特性、タップ数およびフィルタの振幅特性を決定する。
【００５６】
次に、ステップＳ１１で決定されたフィルタ特性に基づいて、フィルタ設計処理を行う（ステップＳ１２）。
【００５７】
フィルタ設計処理は、例えば、米国のMathWorks社が開発している数値解析ソフトウェアＭＡＴＬＡＢ（マトラボ）などの数値解析ツールを使用することで、最小二乗線形位相ＦＩＲ（有限インパルス応答フィルタ）の設計や周波数サンプリングベースのＦＩＲフィルタの設計など、所望の周波数特性およびタップ数のフィルタを、容易に設計することができる。以下、ＭＡＴＬＡＢを用いてフィルタ設計を行う例について説明する。
【００５８】
＜フィルタ特性の決定＞
まず、ステップＳ１１のフィルタ特性の決定について説明する。ここでは、図４および図５に示したような、Ｕ／Ｄ倍に対応する伝達関数ＨＵＤ（ｚ）のフィルタ特性を決定するものとして説明する。
【００５９】
遮断周波数をｆｎｓ、周波数０での振幅をｆｌｓとした場合、ナイキスト周波数を１として、ｆｎｓおよびｆｌｓを決定する数式を以下に数式（６）として示す。なお、数式（６）は、ＭＡＴＬＡＢで使用されるプログラミング言語で書かれたプログラムを表している。
【００６０】
【数６】
2015012415.tif 000008
【００６１】
また、フィルタのタップ数をｋｎ、周波数特性のベクトルをｆｎ、振幅特性のベクトルをｌｎとすると、それぞれは以下の数式（７）で表される。
【００６２】
【数７】
2015012415.tif 000009
【００６３】
なお、上記数式（７）においてＴＡＰは挿入点を決定するための基準となる画素の個数（基準点数）を表す。
【００６４】
そして、周波数特性のベクトルｆｎと振幅特性のベクトルｌｎの関係は図１０で表される。
【００６５】
ここで、図６を用いて説明したキュービックコンボリューションのように、周辺の４画素を基準点として、補間係数を乗算して内挿点を求めるフィルタを設計する例について説明する。
【００６６】
Ｕ＝３、Ｄ＝２として、３／２倍のフィルタを設計する場合、周辺の４画素を基準点とする場合、ＴＡＰ＝４となるので、数式（７）へ適用すると、タップ数ｋｎ、周波数特性のベクトルｆｎ、振幅特性のベクトルｌｎは以下の数式（８）で表され、タップ数、フィルタの周波数特性およびフィルタの振幅特性を決定することができる。
【００６７】
【数８】
2015012415.tif 000010
【００６８】
＜フィルタ設計処理＞
次に、ステップＳ１２のフィルタ設計処理について説明する。ステップＳ１１で決定したフィルタのタップ数ｋｎ、周波数特性のベクトルｆｎ、振幅特性のベクトルｌｎからフィルタを設計する。
【００６９】
例えば、ＦＩＲフィルタの場合は、インパルス応答を求める。これをＭＡＴＬＡＢのｆｉｒｌｓ関数を使用して説明する。なお、ｂｎをインパルス応答のベクトルとする。
【００７０】
ＭＡＴＬＡＢのｆｉｒｌｓ関数では、線形位相ＦＩＲフィルタを設計する。これは、一連の周波数帯域で、理想的な区分的線形関数とフィルタの振幅応答との間の重み付き積分二乗誤差を最小にするフィルタである。
【００７１】
ｂ＝ｆｉｒｌｓ（ｎ，ｆ，ａ）では、ベクトルｆとａで表される周波数−振幅特性を近似するｎ次ＦＩＲフィルタのｎ＋１個の係数を含んだ行ベクトルｂが出力される。ｂに出力されるフィルタ係数、すなわち「タップ」は、対称な関係を有している。
【００７２】
ここでは、ｂｎ＝ｆｉｒｌｓ（ｋｎ−１，ｆｎ，ｌｎ）となり、例えば、Ｕ＝３、Ｄ＝２の３／２倍のフィルタの場合、インパルス応答のベクトルｂｎは次のようになり、インパルス応答は図１１で表される。
【００７３】
ｂｎ＝［−０．０８６８，−０．２１２２，−０．１３６４，０．１９１０，０．６３６６，０．９５４９，０．９５４９，０．６３６６，０．１９１０，−０．１３６４，−０．２１２２，−０．０８６８］
【００７４】
＜補間係数の整数化＞
図１２は、図８におけるステップＳ２の補間係数の整数化を説明するフローチャートである。補間係数の整数化は、乗算と加減算とデータのシフトのみで小数点の演算が行えるようにするための処理である。
【００７５】
図１２に示すように、まず、整数化処理を行い（ステップＳ２１）、その後、数式（２）に基づいてＵ個に分解した係数の和が一定になるように調整する（ステップＳ２２）。
【００７６】
＜整数化処理＞
ステップＳ２１の整数化処理では、まず、２の累乗２ｎ（ｎは係数の精度を表し、正の整数）を係数ｂｎに乗算し、四捨五入もしくは切り捨て、切り上げを行って整数化を行う。ここで、ｂｎ、ｂｃおよびｂｒはベクトルとし、ＭＡＴＬＡＢの四捨五入もしくは切り捨て、切り上げを行う演算式をｒｏｕｎｄとすると、ｂｃおよびｂｒを以下のように定義する。
【００７７】
ｂｃ＝２ｎ＊ｂｎ
ｂｒ＝ｒｏｕｎｄ（２ｎ＊ｂｎ）
【００７８】
すなわちｂｃは２ｎ（ｎは正の整数）を係数ｂｎに乗算した結果であり、ｂｒはｂｃに対して四捨五入もしくは切り捨て、切り上げを行って整数化した結果である。なお、具体例については後に説明する。
【００７９】
＜係数の和を一定とする処理＞
ステップＳ２２の係数の和を一定とする処理では、数式（２）に基づいてＵ個に分解した係数の和が一定になるように以下の手順で調整する。
【００８０】
まず、係数ｂｎに２ｎを乗算した結果ｂｃを四捨五入した係数ｂｒを数式（２）と同様にＵ個に分解し、分解した係数のそれぞれの和を求める。この処理は以下の数式（９）で表される。
【００８１】
【数９】
2015012415.tif 000011
【００８２】
次に、分解した係数のそれぞれの和と２ｎとの差を求める。この処理は以下の数式（１０）で表される。
【００８３】
【数１０】
2015012415.tif 000012
【００８４】
次に、上記処理を行った各組について、ｂｎに２ｎを乗算した係数ｂｃと係数ｂｒとの差を求める。この処理は以下の数式（１１）で表される。
【００８５】
【数１１】
2015012415.tif 000013
【００８６】
そして、数式（１０）での各係数の和が２ｎより大きい場合、すなわち以下の数式（１２）の関係を満たすか否かを確認する。
【００８７】
【数１２】
2015012415.tif 000014
【００８８】
そして、数式（１２）の関係を満たす場合は、数式（１１）で表される係数ｂｒと係数ｂｃとの差の大きい係数の組から順に、係数ｂｒの和が２ｎになるまで係数ｂｒから１ずつ減算する。
【００８９】
また、数式（１０）での各係数の和が２ｎより小さい場合、すなわち以下の数式（１３）の関係を満たすか否かを確認する。
【００９０】
【数１３】
2015012415.tif 000015
【００９１】
そして、数式（１３）の関係を満たす場合は、数式（１１）で表される係数ｂｒと係数ｂｃとの差の大きい係数の組から順に、係数ｂｒの和が２ｎになるまで係数ｂｒに１ずつ加算する。
【００９２】
ここで、係数の整数化について具体例を挙げて説明する。Ｕ＝３、Ｄ＝２として、３／２倍のフィルタを設計する場合、係数データの精度が１０ビットであればｎ＝１０となり、２１０＝１０２４となる。そして、インパルス応答のベクトルｂｎには図１１に対応するものを使用することで、係数ｂｃは以下のようになる。
【００９３】
ｂｃ＝２１０＊ｂｎ＝［−８８．８９５３，−２１７．２９９５，−１３９．６９２６，１９５．５６９６，６５１．８９８６，９７７．８４８０，９７７．８４８０，６５１．８９８６，１９５．５６９６，−１３９．６９２６，−２１７．２９９５，−８８．８９５３］
【００９４】
ここで係数ｂｃを倍率（Ｕ）の数字に合わせて３つに分解すると、以下のように表される。
【００９５】
ｂｃ（−３ｋ）＝［−１３９．６９２６，９７７．８４８０，１９５．５６９６，−８８．８９５３］
ｂｃ（１−３ｋ）＝［−２１７．２９９５，６５１．８９８６，６５１．８９８６，−２１７．２９９５］
ｂｃ（２−３ｋ）＝［−８８．８９５３，１９５．５６９６，９７７．８４８０，−１３９．６９２６］
【００９６】
また、ｒｏｕｎｄ演算を四捨五入の演算として上記ｂｃに適用することで、係数ｂｒは以下のようになる。
【００９７】
ｂｒ＝ｒｏｕｎｄ（２１０＊ｂｎ）＝［−８９，−２１７，−１４０，１９６，６５２，９７８，９７８，６５２，１９６，−１４０，−２１７，−８９］
【００９８】
そして、数式（１１）で表される係数ｂｃと係数ｂｒとの差は以下のようになる。
【００９９】
ｂｒ−ｂｃ＝［−０．１０４７，０．２９９５，−０．３０７４，０．４３０４，０．１０１４，０．１５２０，０．１５２０，０．１０１４，０．４３０４，−０．３０７４，０．２９９５，−０．１０４７］
【０１００】
ここで係数ｂｒを倍率（Ｕ）の数字に合わせて３つに分解すると、以下のように表される。
【０１０１】
ｂｒ（−３ｋ）＝［−１４０，９７８，１９６，−８９］
ｂｒ（１−３ｋ）＝［−２１７，６５２，６５２，−２１７］
ｂｒ（２−３ｋ）＝［−８９，１９６，９７８，−１４０］
【０１０２】
上記係数ｂｒのそれぞれの総和は、以下の数式（１４）で表される。
【０１０３】
【数１４】
2015012415.tif 000016
【０１０４】
上記数式（１４）から、０番目の総和は９４５、１番目の総和は８７０、２番目の総和は９４５となり、何れも２１０（＝１０２４）よりも小さいので、１０２４にまるまで、ｂｒ（−３ｋ）、ｂｒ（１−３ｋ）およびｂｒ（２−３ｋ）のそれぞれに１ずつ加算する。ここで、加算する順番は、ｂｒ−ｂｃで得られた差の値が小さい順とする。
【０１０５】
すなわち、ｂｒ（−３ｋ）−ｂｃ（−３ｋ）＝［−０．３０７４，０．１５２０，０．４３０４，−０．１０４７］となるので、係数ｂｒ（−３ｋ）については、１番目の成分、４番目の成分、２番目の成分、３番目の成分の順に加算することとなる。
【０１０６】
すなわち、ｂｒ（−３ｋ）＝［−１４０，９７８，１９６，−８９］となるので、１番目の成分、４番目の成分、２番目の成分、３番目の成分の順に、ｂｒ（−３ｋ）の総和が１０２４になるまで７９回に渡って１ずつ加算する。
【０１０７】
同様に、ｂｒ（１−３ｋ）−ｂｃ（１−３ｋ）＝［０．２９９５，０．１０１４，０．１０１４，０．２９９５］となるので、係数ｂｒ（１−３ｋ）については、２番目の成分、３番目の成分、１番目の成分、４番目の成分の順に加算することとなる。
【０１０８】
すなわち、ｂｒ（１−３ｋ）＝［−２１７，６５２，６５２，（−２１７）］となるので、２番目の成分、３番目の成分、１番目の成分、４番目の成分の順に、ｂｒ（１−３ｋ）の総和が１０２４になるまで１５４回に渡って１ずつ加算する。
【０１０９】
また、ｂｒ（２−３ｋ）−ｂｃ（２−３ｋ）＝［−０．１０４７，０．４３０４，０．１５２０，−０．３０７４］となるので、係数ｂｒ（２−３ｋ）については、４番目の成分、１番目の成分、３番目の成分、２番目の成分の順に加算することとなる。
【０１１０】
すなわち、ｂｒ（２−３ｋ）＝［−８９，１９６，９７８，（−１４０）］となるので、ｂｒ（１−３ｋ）の総和が１０２４になるまで７９回に渡って１ずつ加算する。
【０１１１】
係数ｂｒ（−３ｋ）、ｂｒ（１−３ｋ）およびｂｒ（２−３ｋ）に対する加算処理の結果を、それぞれ係数ｂｒ（−３ｋ）’、ｂｒ（１−３ｋ）’およびｂｒ（２−３ｋ）’とすると、以下のように表される。
【０１１２】
ｂｒ（−３ｋ）’＝［−１２０，９７８，１９６，−８９］
ｂｒ（１−３ｋ）’＝［−１７９，６９１，６９１，−１７９］
ｂｒ（２−３ｋ）’＝［−６９，２１５，９９８，−１２０］
【０１１３】
従って、伝達関数ＨＵＤ（ｚ）のインパルス応答は、ｈＵＤ＝［−６９，−１７９，−１２０，２１５，６９１，９９８，９９８，６９１，２１５，−１２０，−１７９，−６９］となる。
【０１１４】
＜補間係数の整列＞
補間係数の整列処理は、伝達関数ＨＵＤ（ｚ）のインパルス応答ｈＵＤを、数式（１）の畳み込み演算の実行に合わせて、並べ替えて係数テーブル２０（図７）に格納する処理である。
【０１１５】
この場合、入力された画像に対し、出力される画像の位置がずれないように、０位相のフィルタ作成するようにｈＵＤの並べ替えを行う。
【０１１６】
図１３は、図８におけるステップＳ３の補間係数の整列処理を説明するフローチャートである。
【０１１７】
＜拡大縮小処理演算式を出力ごとに分解＞
まず、ステップＳ３１に示すように、数式（１）で示される拡大縮小処理演算式を出力ごとに分解する。この処理は以下の数式（１５）で表される。
【０１１８】
【数１５】
2015012415.tif 000017
【０１１９】
上記数式（１５）において、ｍおよびｋは整数であり、ｋの値を調整してインパルス応答ｈＵＤとの演算を行う。
【０１２０】
ここで、拡大縮小処理演算式の出力を具体例を挙げて説明する。Ｕ＝３、Ｄ＝２として、３／２倍のフィルタを設計する場合、数式（１５）は以下の数式（１６）で表される。
【０１２１】
【数１６】
2015012415.tif 000018
【０１２２】
ここで、先に説明した３／２倍のフィルタにおける伝達関数ＨＵＤ（ｚ）の整数化後のインパルス応答ｈＵＤを例に採ると、ｈＵＤは−６〜５の範囲であり、ｈＵＤ（−６，５）＝［−６９，−１７９，−１２０，２１５，６９１，９９８，９９８，６９１，２１５，−１２０，−１７９，−６９］と表すことができる。
【０１２３】
＜総和範囲の決定＞
次に、図１３のステップＳ３２に示すように、数式（１６）で示されるそれぞれの出力について総和を取る範囲を決定する。
【０１２４】
すなわち、上記数式（１６）において、ｍ＝０で、ｈＵＤが−６〜５の範囲の値を取る場合、数式（１６）は以下の数式（１７）で表される。
【０１２５】
【数１７】
2015012415.tif 000019
【０１２６】
上記数式（１７）においては、ｙ（０）、ｙ（１）では、総和（Σ）を取る範囲（ｋの最小値と最大値の範囲）は−１〜２であり、ｙ（２）では０〜３、ｙ（３）では１〜４となっている。このｋの最小値と最大値の範囲の決定方法については後に説明する。
【０１２７】
＜係数の並び替え＞
ｋの最小値と最大値の範囲を決定した後は、図１３のステップＳ３３に示すように、伝達関数ＨＵＤ（ｚ）のインパルス応答ｈＵＤの並べ替えを行う。
【０１２８】
上記数式（１７）におけるｙ（０）の計算結果は図１４のように表すことができる。図１４においては、入力画像の画素データｘ（−１）、ｘ（０）、ｘ（１）およびｘ（２）に基づいて内挿点となる出力画像データｙ（０）を作成する（補間する）動作を模式的に表しており、画素データｘ（−１）、ｘ（０）、ｘ（１）およびｘ（２）に、それぞれ補間係数−１２０、９９８、２１５および−６９を乗算している。なお、補間係数−１２０、９９８、２１５および−６９は、先に説明した係数ｂｒ（−３ｋ）’に対応する。
【０１２９】
なお、画素データｘ（−１）は、画像でいうと左端の画素のない領域の画素データであり、画像を折り返して使用する対称拡張法により画素データが生成されている。
【０１３０】
また、数式（１７）におけるｙ（１）の計算結果は図１５のように表すことができる。図１５においては、入力画像の画素データｘ（−１）、ｘ（０）、ｘ（１）およびｘ（２）に基づいて内挿点となる出力画像データｙ（１）を補間する動作を模式的に表しており、画素データｘ（−１）、ｘ（０）、ｘ（１）およびｘ（２）に、それぞれ補間係数−６９、２１５、９９８および−１２０を乗算している。なお、補間係数−６９、２１５、９９８、−１２０は、先に説明した係数ｂｒ（２−３ｋ）’に対応する。
【０１３１】
また、数式（１７）におけるｙ（２）の計算結果は図１６のように表すことができる。図１６においては、画素データの選択範囲を右に１画素分ずらし（スキップし）、入力画像の画素データｘ（０）、ｘ（１）、ｘ（２）およびｘ（３）に基づいて内挿点となる出力画像データｙ（１）を補間する動作を模式的に表しており、画素データｘ（０）、ｘ（１）、ｘ（２）およびｘ（３）に、それぞれ補間係数−１７９、６９１、６９１および−１７９を乗算している。なお、補間係数−１７９、６９１、６９１、−１７９は、先に説明した係数ｂｒ（１−３ｋ）’に対応する。
【０１３２】
また、数式（１７）におけるｙ（３）の計算結果は図１７のように表すことができる。図１７においては、画素データの選択範囲を右に１画素分スキップし、入力画像の画素データｘ（１）、ｘ（２）、ｘ（３）およびｘ（４）に基づいて内挿点となる出力画像データｙ（３）を補間する動作を模式的に表しており、画素データｘ（１）、ｘ（２）、ｘ（３）およびｘ（４）に、それぞれ補間係数−１２０、９９８、２１５および−６９を乗算している。なお、補間係数−１２０、９９８、２１５および−６９は、先に説明した係数ｂｒ（−３ｋ）’に対応する。なお、ｙ（４）の計算に際しては画素データの選択範囲はスキップせず、画素データｘ（１）、ｘ（２）、ｘ（３）およびｘ（４）に係数ｂｒ（２−３ｋ）’を乗算する。
【０１３３】
このように、補間対象となる入力画像の画素データの選択範囲を、画像の左端から１画素ずつ右にスキップさせたり、あるいはスキップさせずに、係数ｂｒ（−３ｋ）’、ｂｒ（１−３ｋ）’およびｂｒ（２−３ｋ）’を繰り返して積算することで出力画像データを補間する。
【０１３４】
このような係数ｂｒ（−３ｋ）’、ｂｒ（１−３ｋ）’およびｂｒ（２−３ｋ）’と、当該係数を乗算する演算の繰り返し順番と、画素データのスキップ数のデータが、テーブルとして係数テーブル２０（図７）に格納されている。
【０１３５】
図１８には、図１４〜図１６を用いて説明した数式（１７）の計算結果に対応する係数テーブルの一例を示す。
【０１３６】
図１８においては、係数ｂｒ（−３ｋ）’、ｂｒ（２−３ｋ）’およびｂｒ（１−３ｋ）’に対する演算の繰り返し順番が、それぞれ０番目、１番目および２番目として示され、また、各係数に対応するスキップ数が、それぞれ１回、０回および１回として示されている。
【０１３７】
このように、例えばｈＵＤ（−６，５）＝［−６９，−１７９，−１２０，２１５，６９１，９９８，９９８，６９１，２１５，−１２０，−１７９，−６９］と表される伝達関数ＨＵＤ（ｚ）のインパルス応答を図１８に示すような配列に並べ替えることで係数テーブルが規定され、補間係数の整列処理が終了する。
【０１３８】
なお、演算の繰り返し順番の数は、倍率（Ｕ）の数で規定され、補間係数の個数は、数式（７）にＴＡＰとして示される、挿入点を決定するための基準となる画素の個数（基準点数）で規定され、４画素を基準点とする場合、ＴＡＰ＝４となるので、補間係数の個数は４個となる。
【０１３９】
上述したように入力画像の画素データの選択範囲のスキップ数は、予め決められて係数テーブル２０に格納されているが、スキップ数は、数式（１５）において変数が決まると決定できるが、これについては後に説明する。
【０１４０】
また、補間係数の読み出しや、画素データの選択範囲のスキップは制御装置（図７）で行うが、この制御では、最初のｙ（０）の演算（０番目の演算）についてはスキップ数は無視し、スキップは行わずに画像の一番左端の画素データを含むように選択範囲を設定し、以後、１番目、２番目、０番目の順で演算を繰り返し、１画像分の全ての画素データについて補間を行う。
【０１４１】
なお、補間係数の乗算と、乗算済みデータの累積算（総和）を行うことで得られた出力ｙ（ｎ）は、セレクタ４（図７）を介して出力されるが、出力ｙ（ｎ）は、セレクタ４からシフト回路１４（図７）に与えられ、係数の整数化で使用した２の累乗２ｎのｎに対応するビット数分（ここでは１０ビット）だけシフトしてクリップ回路１５に与える。これは１０ビットの画素データに１０ビットの係数を掛けて２０ビットとなったデータを右に１０ビットシフトすることで１０ビットで割り、１０ビットのデータに戻す処理である。
【０１４２】
クリップ回路１５では、シフト回路１４より出力された演算結果のデータを、予め設定される最小値と最大値の範囲にデータを切り取り、出力画像データｙ（ｎ）とする。
【０１４３】
＜補間係数の整列処理の一般化＞
上述した補間係数の整列処理については、３／２倍のフィルタを設計する場合に限定しての説明であったが、以下においては、Ｕ／Ｄ倍のフィルタを設計する場合として、一般化して説明する。
【０１４４】
Ｕ／Ｄ倍のフィルタを設計する際に、先に説明したように、挿入点を決定するための基準となるＴＡＰ個の画素Ｐｉ、Ｐｉ＋１、・・・、Ｐｉ＋ＴＡＰ−１のそれぞれに補間係数を乗算して内挿点を求める方法を採る場合、インパルス応答ｈＵＤの補間係数の個数はＵ×ＴＡＰ個となり、伝達関数ＨＵＤ（ｚ）のインパルス応答ｈＵＤは、以下の数式（１８）で表される。
【０１４５】
【数１８】
2015012415.tif 000020
【０１４６】
上記数式（１８）において、“Ｕ×ＴＡＰ／２”を囲む記号はｆｌｏｏｒ（フロア）関数を表しており、実数をより小さい整数に関連付ける関数である。例えば、−２．５はフロア関数では−３となり、２．５はフロア関数では２となる。
【０１４７】
また、インパルス応答ｈＵＤは、先に説明した整数化および分解係数の和を一定とする処理を行うことでベクトルｂｒ’として与えられる。
【０１４８】
数式（１）で示される拡大縮小処理演算式を出力ごとに分解した数式（１５）を以下に示す数式（１９）のように変形して、総和を取る範囲、ＭＡＸＵｍ〜ＭＡＸＵｍ＋Ｕ−１、ＭＩＮＵｍ〜ＭＩＮＵｍ＋Ｕ−１を求める。
【０１４９】
【数１９】
2015012415.tif 000021
【０１５０】
ＭＡＸＵｍ〜ＭＡＸＵｍ＋Ｕ−１、ＭＩＮＵｍ〜ＭＩＮＵｍ＋Ｕ−１は、何れか１つが求まると、残り全てが決定されるので、一例として、まず、最初にＭＡＸＵｍを求める場合について説明する。
【０１５１】
数式（１９）におけるｙ（Ｕｍ）の右辺のＤＵｍ−Ｕｋを初期値Ｉｎｉｔとし、以下に示す数式（２０）のように変形して係数ｋを求め、それをＭＡＸＵｍとする。
【０１５２】
【数２０】
2015012415.tif 000022
【０１５３】
ただし、初期値Ｉｎｉｔは、以下に示す数式（２１）の範囲内にあるものとする。
【０１５４】
【数２１】
2015012415.tif 000023
【０１５５】
なお、上記数式（２０）で求まるｋは、数式（１９）におけるｙ（Ｕｍ）で使用されるｋである。
【０１５６】
ＭＡＸＵｍを決定すると、以下に示す数式（２２）のようにＭＩＮＵｍが決定される。
【０１５７】
【数２２】
2015012415.tif 000024
【０１５８】
次に、ＭＡＸＵｍ＋１について決定する。数式（２１）から初期値Ｉｎｉｔを以下に示す数式（２３）のように定義する。
【０１５９】
【数２３】
2015012415.tif 000025
【０１６０】
そして、数式（１９）におけるｙ（Ｕｍ＋１）の右辺のＤ（Ｕｍ＋１）−Ｕｋを以下に示す数式（２４）のように定義する。なお、下記数式（２４）において％は剰余演算子である。
【０１６１】
【数２４】
2015012415.tif 000026
【０１６２】
上記数式（２４）を以下に示す数式（２５）のように変形してｋを求め、それをＭＡＸＵｍ＋１とする。
【０１６３】
なお、上記数式（２４）で求まるｋは、数式（１９）におけるｙ（Ｕｍ＋１）で使用されるｋである。
【０１６４】
【数２５】
2015012415.tif 000027
【０１６５】
そして、ＭＡＸＵｍ＋１が決まると、ＭＩＮＵｍ＋１が以下に示す数式（２６）のように決定される。
【０１６６】
【数２６】
2015012415.tif 000028
【０１６７】
次に、ＭＡＸＵｍ＋Ｕ−１について決定する。まず、数式（１９）におけるｙ（Ｕｍ＋Ｕ−１）の右辺のＤ（Ｕｍ＋Ｕ−１）−Ｕｋを以下に示す数式（２７）のように定義する。
【０１６８】
【数２７】
2015012415.tif 000029
【０１６９】
上記数式（２７）を以下に示す数式（２８）のように変形してｋを求め、それをＭＡＸＵｍ＋Ｕ−１とする。
【０１７０】
【数２８】
2015012415.tif 000030
【０１７１】
なお、上記数式（２８）で求まるｋは、数式（１９）におけるｙ（Ｕｍ＋Ｕ−１）で使用されるｋである。
【０１７２】
そして、ＭＡＸＵｍ＋Ｕ−１が決まると、ＭＩＮＵｍ＋Ｕ−１が以下に示す数式（２９）のように決定される。
【０１７３】
【数２９】
2015012415.tif 000031
【０１７４】
次に、ＭＡＸＵｍ〜ＭＡＸＵｍ＋Ｕ−１、ＭＩＮＵｍ〜ＭＩＮＵｍ＋Ｕ−１を求めるために、数式（２０）、数式（２２）、数式（２５）、数式（２６）、数式（２８）および数式（２９）を、ｎ＝０，・・・，Ｕ−１とし、ＭＡＸＵｍ＋ｎ、ＭＩＮＵｍ＋ｎで一般化すると、以下に示す数式（３０）のように表される。
【０１７５】
【数３０】
2015012415.tif 000032
【０１７６】
次に、一例として、Ｕ＝３、Ｄ＝２の３／２倍のフィルタを設計する場合に、ｍ＝０，１、ｎ＝０，１，２、ＴＡＰ＝４、して数式（３０）からＭＡＸ０、ＭＡＸ１、ＭＡＸ２、ＭＡＸ３、・・・、ＭＩＮ０、ＭＩＮ１、ＭＩＮ２、ＭＩＮ３、・・・を求めた結果を以下の数式（３１）に示す。
【０１７７】
【数３１】
2015012415.tif 000033
【０１７８】
先に説明した数式（１７）は、数式（１９）に数式（３１）を適用することで得られたものである。
【０１７９】
以上説明したように、Ｕ／Ｄ倍のフィルタとして、ＴＡＰ個の画素に係数を乗算して内挿点を求めるフィルタを設計する場合、一般化された数式（１９）を使用でき、数式（３０）により総和を取る範囲を決定することができる。これは、図１３に示したフローチャートのステップＳ３２に対応する。
【０１８０】
次に、先に説明した数式（１５）に基づいてスッキプ数を決定する方法について説明する。
【０１８１】
数式（１５）を変形した数式（１９）の第１式から最終式（第Ｕ式）までの右辺のインパルス応答ｈＵＤは、それぞれ以下に示す数式（３２）のように、係数列０〜Ｕ−１を表す。
【０１８２】
【数３２】
2015012415.tif 000034
【０１８３】
すなわち、係数列０は、ｈＵＤ（ＤＵｍ−Ｕｋ）において、ｋがＭＩＮ０〜ＭＡＸ０の場合の係数列であり、係数列１は、ｈＵＤ（Ｄ（Ｕｍ＋１）−Ｕｋ）において、ｋがＭＩＮ１〜ＭＡＸ１の場合の係数列であり、係数列Ｕ−１は、ｈＵＤ（Ｄ（Ｕｍ＋Ｕ−１）−Ｕｋ）において、ｋがＭＩＮＵ−１〜ＭＡＸＵ−１の場合の係数列である。
【０１８４】
また、スキップ数は出力画素ｙ（ｎ）の入力範囲が、１つ前の出力画素ｙ（ｎ−１）の入力範囲に対して何画素スキップするかで定義されるので、以下に示す数式（３３）で表される。
【０１８５】
【数３３】
2015012415.tif 000035
【０１８６】
そして、上記数式（３３）は、数式（３０）に基づいて係数列ｎのスキップ数ｓｋｉｐｎの数式として、以下に示す数式（３４）で一般化できる。
【０１８７】
【数３４】
2015012415.tif 000036
【０１８８】
上記数式（３４）において、例えば、ｍ＝０、Ｕ＝３、Ｄ＝２、ｎ＝０〜２として、スキップ数を求めると、ｓｋｉｐ０＝１、ｓｋｉｐ１＝０、ｓｋｉｐ２＝１となり、図１８の係数テーブルと一致する。
【０１８９】
＜補間関数を用いた場合の係数テーブルの作成＞
先に説明したように、画像の拡大縮小を行うために補間関数を用いる場合でも係数テーブルを作成することは可能である。
【０１９０】
例えば、キュービックコンボリューションを用いた内挿法を説明する数式（４）を、整数の乗算と加減算とデータのシフトのみで実現できるように下記の数式（３５）のように変形する。
【０１９１】
【数３５】
2015012415.tif 000037
【０１９２】
数式（３５）においては、補間関数ｈ（ｔｉ）に２ｎを乗算してｒｏｕｎｄ演算した値をｈ（ｔｉ）’とし、補間関数ｈ（ｔｉ＋１）に２ｎを乗算してｒｏｕｎｄ演算した値をｈ（ｔｉ＋１）’とし、補間関数ｈ（ｔｉ＋２）に２ｎを乗算してｒｏｕｎｄ演算した値をｈ（ｔｉ＋２）’とし、２ｎからｈ（ｔｉ）’、ｈ（ｔｉ＋１）’およびｈ（ｔｉ＋２）’を差し引いた値をｈ（ｔｉ＋３）’としている。
【０１９３】
そして、図６に示される内挿点Ｘを出力ｙ（０）とし、その座標をｂ０とし、出力ｙ（ｊ）の座標をｂｊとすると、座標ｂｊと座標ｂ０の関係は以下の数式（３６）の第１式のように表され、また、ｔｉ、ｔｉ＋１、ｔｉ＋２およびｔｉ＋３は、第２式〜第４式のように表される。
【０１９４】
【数３６】
2015012415.tif 000038
【０１９５】
なお、上記数式（３６）の第３式のＩＮＴ（ｂｊ）は、座標ｂｊから小数点以下を切り捨てる演算を表し、また、座標ｂｊの値は前の座標ｂｊ−１の整数部より桁上がりした値で規定される。
【０１９６】
そして、数式（４）、数式（３５）および数式（３６）に基づいてｈ（ｔｉ）’、ｈ（ｔｉ＋１）’、ｈ（ｔｉ＋２）’およびｈ（ｔｉ＋３）’を求めることで係数テーブルを作成することができる。
【０１９７】
ここで、Ｕ＝３、Ｄ＝２の３／２倍のフィルタを設計する場合を例に採ると、座標ｂ０＝１／６、ｎ＝１０、ａ＝１．２とすると、得られる係数テーブルは図１９のようになる。
【０１９８】
この係数テーブルに格納された補間係数と、対応する画像データとを数式（５）のように乗算し、乗算結果を加算することで、内挿点を得ることができる。
【０１９９】
このように、画像の拡大縮小を行うために補間関数を用いる場合でも係数テーブルを作成することできる。
【０２００】
＜変形例＞
なお、上記の説明では、数式（３５）に示されるように、ｈ（ｔｉ）’、ｈ（ｔｉ＋１）’およびｈ（ｔｉ＋２）’を個々に求めた後、２ｎからｈ（ｔｉ）’、ｈ（ｔｉ＋１）’およびｈ（ｔｉ＋２）’を差し引いた値をｈ（ｔｉ＋３）’としていたが、これに限定されるものではない。
【０２０１】
例えば、以下に示す数式（３７）のように、ｈ（ｔｉ＋１）’、ｈ（ｔｉ＋２）’、ｈ（ｔｉ＋３）’を個々に求めた後、２ｎからｈ（ｔｉ＋１）’、ｈ（ｔｉ＋２）’、ｈ（ｔｉ＋３）’を差し引くことでｈ（ｔｉ）’を求めても良い。
【０２０２】
【数３７】
2015012415.tif 000039
【０２０３】
また、以下に示す数式（３８）のように、ｈ（ｔｉ）’、ｈ（ｔｉ＋２）’、ｈ（ｔｉ＋３）’を個々に求めた後、２ｎからｈ（ｔｉ）’、ｈ（ｔｉ＋２）’、ｈ（ｔｉ＋３）’を差し引くことでｈ（ｔｉ＋１）’を求めても良い。
【０２０４】
【数３８】
2015012415.tif 000040
【０２０５】
また、以下に示す数式（３９）のように、ｈ（ｔｉ）’、ｈ（ｔｉ＋１）’、ｈ（ｔｉ＋３）’を個々に求めた後、２ｎからｈ（ｔｉ）’、ｈ（ｔｉ＋１）’、ｈ（ｔｉ＋３）’を差し引くことでｈ（ｔｉ＋２）’を求めても良い。
【０２０６】
【数３９】
2015012415.tif 000041
【０２０７】
なお、以上の説明では、画像を拡大する場合を例に採って説明したが、画像を縮小する場合も同様に本発明を適用できることは言うまでもない。
【符号の説明】
【０２０８】
８  乗算器
９  加算器
１４  シフト回路
２０  係数テーブル
【図１】
2015012415.tif 000042
【図２】
2015012415.tif 000043
【図３】
2015012415.tif 000044
【図４】
2015012415.tif 000045
【図５】
2015012415.tif 000046
【図６】
2015012415.tif 000047
【図７】
2015012415.tif 000048
【図８】
2015012415.tif 000049
【図９】
2015012415.tif 000050
【図１０】
2015012415.tif 000051
【図１１】
2015012415.tif 000052
【図１２】
2015012415.tif 000053
【図１３】
2015012415.tif 000054
【図１４】
2015012415.tif 000055
【図１５】
2015012415.tif 000056
【図１６】
2015012415.tif 000057
【図１７】
2015012415.tif 000058
【図１８】
2015012415.tif 000059
【図１９】
2015012415.tif 000060