(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0014】
<始めに>
実施の形態の説明に先立って、本発明の前提となる画像の拡大縮小処理について説明する。
【0015】
<伝達関数を用いた例>
まず、伝達関数を用いた画像の拡大縮小処理の例として、冗長性を排除したU/D倍任意拡大縮小処理の手順について説明する。
【0016】
図1は、U/D倍任意拡大縮小処理を模式的に示すブロック図であり、入力画像データx(n)がアップサンプラUPに入力され、アップサンプリングされた画像データがローパスフィルタであるデジタルフィルタDFに与えられ、デジタルフィルタDFで帯域制限を受けた画像データd(n)がダウンサンプラDWに与えられ、ダウンサンプリングされた出力画像データy(n)が出力される構成となっている。
【0017】
ここで、アップサンプラUPは、原画像信号の各信号間に画素U−1個分の0値を挿入する処理を行い、ダウンサンプラDWは、画像データからD画素ごとに残し、残りを間引く処理を行う。また、デジタルフィルタDFのインパルス応答はh
UD(n)であり、
図1の処理は畳み込み演算を示す以下の数式(1)で表される。
【0019】
ここで、画像をU倍に拡大する場合の理想的なフィルタのインパルス応答h
U(n)の伝達関数H
U(z)は、z軸(z=exp(jωT))上の表現で
図2のように表され、また、1/D倍に縮小する場合の理想的なフィルタのインパルス応答h
D(n)の伝達関数H
D(z)は
図3のように表される。なお。
図2および
図3において、横軸は正規化角周波数(ω)を表し、縦軸は振幅を表している。
【0020】
これに対し、U/D倍に拡大する場合、すなわちU>Dの場合の理想的なフィルタのインパルス応答h
UD(n)の伝達関数H
UD(z)は
図4のように表される。また、U/D倍に縮小する場合、すなわちU<Dの場合の理想的なフィルタのインパルス応答h
UD(n)の伝達関数H
UD(z)は
図5のように表される。なお、
図4および
図5において、横軸は正規化角周波数(ω)を表し、縦軸は振幅を表している。
【0021】
なお、
図4と
図2に示す画像をU倍に拡大する場合の伝達関数H
U(z)は同じであり、共に遮断角周波数はπ/Uであるので、U倍に拡大する場合のフィルタを、U/D倍に拡大する場合のフィルタとして使用可能である。また、
図5の画像をU/D倍に縮小する場合の伝達関数H
UD(z)の遮断角周波数はπ/Dになる。
【0022】
このように、デジタルフィルタDFをインパルス応答h
UD(n)のフィルタとすることで、画像の拡大用フィルタと縮小用フィルタの2つを備える必要がなくなり、演算量を削減することができる。また、一旦、U倍に拡大する必要がないので、U倍に拡大した画像データを格納するためのメモリも不要となる。
【0023】
ここで、画像を任意の倍数で拡大縮小する場合、フィルタを適切に選ばないと画素周期Uで碁盤目状のひずみ(チェス盤ひずみ(checkerboard distortion))が発生する。
【0024】
これに対しては、以下の数式(2)で表されるように、インパルス応答h
UD(n)を画素U個ごとの区切りとみなして、それぞれの区切りの0番目の総和、1番目の総和〜U−1番目の総和が、それぞれ一定値になるような伝達関数を設定することでチェス盤ひずみを回避することができる。
【0026】
<補間関数を用いた例>
伝達関数を用いて、画像の拡大縮小を行う方法の他に、キュービックコンボリューションや線形補間、3次補間、ラグランジュ補間、スプライン補間、ランツォシュ補間などの補間関数を用いて画像データを内挿(補間)し、画像の拡大縮小を行う方法がある。
【0027】
例えば、特開2001−189850号公報では、キュービックコンボリューションを用いた内挿の例が説明されている。以下、キュービックコンボリューションを用いた内挿について説明する。
【0029】
上記数式(3)はキュービックコンボリューションで用いる補間関数h(t)を表す数式である。
【0030】
数式(3)において、aは補間関数の性質を制御するための変数(−0.5〜−2)であり、tは隣接する画素から内挿点までの距離を表す。
【0031】
また、
図6にはキュービックコンボリューションの内挿点の一例を示している。
図6においては、直列に等間隔で並んだ4点の画素P
i、P
i+1、P
i+2およびP
i+3がある場合に、画素P
i+1と画素P
i+2との間に内挿点Xが内挿される場合を示している。
【0032】
そして、内挿点Xからの画素P
i、P
i+1、P
i+2およびP
i+3までの距離をそれぞれt
i、t
i+1、t
i+2およびt
i+3とし、画素間の距離を1.0として示している。それぞれの画素に対する補間関数h(t
i)、h(t
i+1)、h(t
i+2)およびh(t
i+3)は以下の数式(4)で表される。
【0034】
上記数式(4)で表される補間関数h(t
i)、h(t
i+1)、h(t
i+2)およびh(t
i+3)を画素P
i、P
i+1、P
i+2およびP
i+3の座標にそれぞれ掛け合わせた総和が内挿点Xの位置となる。これを表す数式が、以下に示す数式(5)である。
【0036】
<実施の形態>
図7は本発明に係る実施の形態の画像の拡大縮小処理装置100の基本構成を示すブロック図である。なお、以下においては、拡大縮小処理装置100は、
図1に示したU/D倍任意拡大縮小処理を行うものとして説明する。
【0037】
図7に示されるように、画像の拡大縮小処理装置100は、DMA(Direct Memory Access)バス19を介して主記憶装置30に格納された入力画像データx(n)を直接に読み出すDMA読み取り装置(DMAR)5と、DMAバス19を介して主記憶装置30に出力画像データy(n)を直接に書き込むDMA書き込み装置(DMAW)6とをデータ入出力部として備えている。
【0038】
DMAR5が読み出した1画素分の入力画像データx(n)は、セレクタ1を介してピンポンバッファ10に書き込まれる。ピンポンバッファ10は、セレクタ1の2つの出力と、セレクタ2の2つの入力との間に互いに並列に接続されたバッファ11およびバッファ12を有しており、バッファ11および12は書き込み用と読み取り用に順番に入れ替わるように制御される。なお、ピンポンバッファ10は、デュアルポートSRAMで構成することも可能である。デュアルポートSRAMは、データを入出力するためのポートを2つ有し、一方のポートからデータを読み出すのと同時に他方のポートからデータを書き込むことが可能であり、バッファ11および12を有する場合と同様の動作が可能である。
【0039】
セレクタ1は、バッファ11および12のうち、書き込み可能な方のバッファを選択し、入力画像データx(n)を書き込む。セレクタ2は、バッファ11および12のうち、入力画像データx(n)が書き込み済みのバッファから画像データを読み出す。
【0040】
従って、例えば、バッファ11に入力画像データx(n)が書き込まれているタイミングでは、バッファ12から、既に書き込まれた入力画像データx(n)が読み出だされていることとなる。
【0041】
なお、セレクタ1による書き込み可能なバッファの選択は制御装置7によりセレクタ1が制御されることで実行され、セレクタ2による書き込み済みのバッファの選択は制御装置7によりセレクタ2が制御されることで実行される。
【0042】
セレクタ2を介してピンポンバッファ10から読み出された入力画像データx(n)は、乗算器8に入力され、また、デジタルフィルタDF(
図1)のインパルス応答h
UD(n)を補間係数として格納する係数テーブル20からは、セレクタ3を介して補間係数が読み出され、乗算器8に入力される。
【0043】
なお、係数テーブル20としては、拡大、縮小の倍率にそれぞれ対応したもの、例えば、2倍、3倍、あるいは1/2倍、3/4倍などに対応した補間係数のテーブルが準備されており、拡大、縮小の倍率に応じたテーブルを、制御装置7がセレクタ3を制御して選択し、選択したテーブルから補間係数が読み出される。
【0044】
乗算器8では、入力画像データx(n)と補間係数h
UD(n)の乗算を行い、乗算済みデータが加算器9に与えられる。加算器9には、フリップフロップ13内に格納されている加算済みデータがセレクタ4を介して与えられ、加算器9で、乗算器8から与えられる乗算済みデータと加算される。
【0045】
乗算済みデータが加算された加算済みデータは、フリップフロップ13に格納されることでフリップフロップ13のデータを更新する。なお、フリップフロップ13の初期値は0であり、1画素分の画像データに対して最初に加算器
9で乗算済みデータに加算されるのは初期値0である。
【0046】
加算器9での加算は数式(1)で表されるh
UD(Dn−Uk)とx(k)の積の累積算である。なお、乗算器8と加算器9とをそれぞれ複数備えることで、演算の並列性が高まり処理速度を高速化することが可能である。
【0047】
セレクタ4は、予め設定された選択範囲の画素数分の画像データに対して数式(1)の累積算が終了するまでは加算器3に対してフリップフロップ13に格納されたデータを与えるが、予め設定された選択範囲の画素数分の画像データに対する累積算が終了した後はフリップフロップ13に格納されたデータをシフト回路14に与え、フリップフロップ13が0に初期化される。なお、セレクタ4の選択動作は制御装置7により制御される。
【0048】
シフト回路14は、シフトレジスタなどで構成され、セレクタ4より出力された累積演算結果のデータをシフト演算することで、出力画像データのビット数を入力画像データのビット数と一致させクリップ回路15に与える。なお、シフト回路14は、出力画像データのビット数は入力画像データのビット数と一致させる場合や演算精度を高くするために出力画像データのビット数が入力画像より大きい場合や演算精度を低くするために出力画像データのビット数が入力画像より小さい場合がある。
【0049】
クリップ回路15は、シフト回路14より出力され、ビット数が調整された演算結果のデータを、予め設定される最小値と最大値の範囲にデータを切り取り、出力画像データy(n)を生成する。出力画像データy(n)はDMAW6からDMAバス19を介して、主記憶装置30に直接に書き込まれる。
【0050】
このようにして得られた出力画像データy(n)は、予め設定された画素数分の入力画像データに基づいて作成された1画素分の画像データであり、同じ処理を異なる選択範囲の予め設定された画素数分の画素に対して行い、次の出力画像データy(n)を得る。
【0051】
これを、1画像の全ての画素に対して繰り返し実行することで、数式(1)に基づいて拡大あるいは縮小された画像が得られる。
【0052】
図7に示す拡大縮小処理装置100においては、伝達関数からインパルス応答h
UD(n)を算出し、補間係数として係数テーブル20に格納した構成を採っている。そして、当該補間係数の算出においては、整数化処理を行うことで、拡大縮小処理装置100に割り算器や浮動小数点演算器を用いることなしに、乗算と加減算とデータのシフトのみで、画像の拡大縮小を実現できる。以下、本発明に係る係数テーブルの作成方法について説明する。
【0053】
<係数テーブルの作成方法>
図8は、本発明に係る係数テーブルの作成方法を示すフローチャートである。係数テーブルの作成においては、まず、伝達関数H
UD(z)のフィルタ特性を持つフィルタを設計する(ステップS1)。
【0054】
次に、設計したフィルタの補間係数の整数化を行い(ステップS2)、ステップS3では、補間係数の整列処理を行って、補間係数を演算しやすいように並べ変えることで、係数テーブルの作成を終了する。なお、上記ステップS1〜S3の詳細については以下に説明する。
【0055】
<伝達関数H
UD(z)のフィルタ設計>
図9は、
図8におけるステップS1の伝達関数H
UD(z)のフィルタ設計を説明するフローチャートである。フィルタ設計においては、まず、フィルタ特性の決定を行う(ステップS11)。フィルタ特性の決定では、フィルタの周波数特性、タップ数およびフィルタの振幅特性を決定する。
【0056】
次に、ステップS11で決定されたフィルタ特性に基づいて、フィルタ設計処理を行う(ステップS12)。
【0057】
フィルタ設計処理は、例えば、米国のMathWorks社が開発している数値解析ソフトウェアMATLAB(マトラボ)などの数値解析ツールを使用することで、最小二乗線形位相FIR(有限インパルス応答フィルタ)の設計や周波数サンプリングベースのFIRフィルタの設計など、所望の周波数特性およびタップ数のフィルタを、容易に設計することができる。以下、MATLABを用いてフィルタ設計を行う例について説明する。
【0058】
<フィルタ特性の決定>
まず、ステップS11のフィルタ特性の決定について説明する。ここでは、
図4および
図5に示したような、U/D倍に対応する伝達関数H
UD(z)のフィルタ特性を決定するものとして説明する。
【0059】
遮断周波数をfns、周波数0での振幅をflsとした場合、ナイキスト周波数を1として、fnsおよびflsを決定する数式を以下に数式(6)として示す。なお、数式(6)は、MATLABで使用されるプログラミング言語で書かれたプログラムを表している。
【0061】
また、フィルタのタップ数をkn、周波数特性のベクトルをfn、振幅特性のベクトルをlnとすると、それぞれは以下の数式(7)で表される。
【0063】
なお、上記数式(7)においてTAPは挿入点を決定するための基準となる画素の個数(基準点数)を表す。
【0064】
そして、周波数特性のベクトルfnと振幅特性のベクトルlnの関係は
図10で表される。
【0065】
ここで、
図6を用いて説明したキュービックコンボリューションのように、周辺の4画素を基準点として、補間係数を乗算して内挿点を求めるフィルタを設計する例について説明する。
【0066】
U=3、D=2として、3/2倍のフィルタを設計する場合、周辺の4画素を基準点とする場合、TAP=4となるので、数式(7)へ適用すると、タップ数kn、周波数特性のベクトルfn、振幅特性のベクトルlnは以下の数式(8)で表され、タップ数、フィルタの周波数特性およびフィルタの振幅特性を決定することができる。
【0068】
<フィルタ設計処理>
次に、ステップS12のフィルタ設計処理について説明する。ステップS11で決定したフィルタのタップ数kn、周波数特性のベクトルfn、振幅特性のベクトルlnからフィルタを設計する。
【0069】
例えば、FIRフィルタの場合は、インパルス応答を求める。これをMATLABのfirls関数を使用して説明する。なお、bnをインパルス応答のベクトルとする。
【0070】
MATLABのfirls関数では、線形位相FIRフィルタを設計する。これは、一連の周波数帯域で、理想的な区分的線形関数とフィルタの振幅応答との間の重み付き積分二乗誤差を最小にするフィルタである。
【0071】
b=firls(n,f,a)では、ベクトルfとaで表される周波数−振幅特性を近似するn次FIRフィルタのn+1個の係数を含んだ行ベクトルbが出力される。bに出力されるフィルタ係数、すなわち「タップ」は、対称な関係を有している。
【0072】
ここでは、bn=firls(kn−1,fn,ln)となり、例えば、U=3、D=2の3/2倍のフィルタの場合、インパルス応答のベクトルbnは次のようになり、インパルス応答は
図11で表される。
【0073】
bn=[−0.0868,−0.2122,−0.1364,0.1910,0.6366,0.9549,0.9549,0.6366,0.1910,−0.1364,−0.2122,−0.0868]
【0074】
<補間係数の整数化>
図12は、
図8におけるステップS2の補間係数の整数化を説明するフローチャートである。補間係数の整数化は、乗算と加減算とデータのシフトのみで小数点の演算が行えるようにするための処理である。
【0075】
図12に示すように、まず、整数化処理を行い(ステップS21)、その後、数式(2)に基づいてU個に分解した係数の和が一定になるように調整する(ステップS22)。
【0076】
<整数化処理>
ステップS21の整数化処理では、まず、2の累乗2
n(nは係数の精度を表し、正の整数)を係数bnに乗算し、四捨五入もしくは切り捨て、切り上げを行って整数化を行う。ここで、bn、bcおよびbrはベクトルとし、MATLABの四捨五入もしくは切り捨て、切り上げを行う演算式をroundとすると、bcおよびbrを以下のように定義する。
【0077】
bc=2
n*bn
br=round(2
n*bn)
【0078】
すなわちbcは2
n(nは正の整数)を係数bnに乗算した結果であり、brはbcに対して四捨五入もしくは切り捨て、切り上げを行って整数化した結果である。なお、具体例については後に説明する。
【0079】
<係数の和を一定とする処理>
ステップS22の係数の和を一定とする処理では、数式(2)に基づいてU個に分解した係数の和が一定になるように以下の手順で調整する。
【0080】
まず、係数bnに2
nを乗算した結果bcを四捨五入した係数brを数式(2)と同様にU個に分解し、分解した係数のそれぞれの和を求める。この処理は以下の数式(9)で表される。
【0082】
次に、分解した係数のそれぞれの和と2
nとの差を求める。この処理は以下の数式(10)で表される。
【0084】
次に、上記処理を行った各組について、bnに2
nを乗算した係数bcと係数brとの差を求める。この処理は以下の数式(11)で表される。
【0086】
そして、数式(10)での各係数の和が2
nより大きい場合、すなわち以下の数式(12)の関係を満たすか否かを確認する。
【0088】
そして、数式(12)の関係を満たす場合は、数式(11)で表される係数brと係数bcとの差の大きい係数の組から順に、係数brの和が2
nになるまで係数brから1ずつ減算する。
【0089】
また、数式(10)での各係数の和が2
nより小さい場合、すなわち以下の数式(13)の関係を満たすか否かを確認する。
【0091】
そして、数式(13)の関係を満たす場合は、数式(11)で表される係数brと係数bcとの差の大きい係数の組から順に、係数brの和が2
nになるまで係数brに1ずつ加算する。
【0092】
ここで、係数の整数化について具体例を挙げて説明する。U=3、D=2として、3/2倍のフィルタを設計する場合、係数データの精度が10ビットであればn=10となり、2
10=1024となる。そして、インパルス応答のベクトルbnには
図11に対応するものを使用することで、係数bcは以下のようになる。
【0093】
bc=2
10*bn=[−88.8953,−217.2995,−139.6926,195.5696,651.8986,977.8480,977.8480,651.8986,195.5696,−139.6926,−217.2995,−88.8953]
【0094】
ここで係数bcを倍率(U)の数字に合わせて3つに分解すると、以下のように表される。
【0095】
bc(−3k)=[−139.6926,977.8480,195.5696,−88.8953]
bc(1−3k)=[−217.2995,651.8986,651.8986,−217.2995]
bc(2−3k)=[−88.8953,195.5696,977.8480,−139.6926]
【0096】
また、round演算を四捨五入の演算として上記bcに適用することで、係数brは以下のようになる。
【0097】
br=round(2
10*bn)=[−89,−217,−140,196,652,978,978,652,196,−140,−217,−89]
【0098】
そして、数式(11)で表される係数bcと係数brとの差は以下のようになる。
【0099】
br−bc=[−0.1047,0.2995,−0.3074,0.4304,0.1014,0.1520,0.1520,0.1014,0.4304,−0.3074,0.2995,−0.1047]
【0100】
ここで係数brを倍率(U)の数字に合わせて3つに分解すると、以下のように表される。
【0101】
br(−3k)=[−140,978,196,−89]
br(1−3k)=[−217,652,652,−217]
br(2−3k)=[−89,196,978,−140]
【0102】
上記係数brのそれぞれの総和は、以下の数式(14)で表される。
【0104】
上記数式(14)から、0番目の総和は945、1番目の総和は870、2番目の総和は945となり、何れも2
10(=1024)よりも小さいので、1024にまるまで、br(−3k)、br(1−3k)およびbr(2−3k)のそれぞれに1ずつ加算する。ここで、加算する順番は、br−bcで得られた差の値が小さい順とする。
【0105】
すなわち、br(−3k)−bc(−3k)=[−0.3074,0.1520,0.4304,−0.1047]となるので、係数br(−3k)については、1番目の成分、4番目の成分、2番目の成分、3番目の成分の順に加算することとなる。
【0106】
すなわち、br(−3k)=[−140,978,196,−89]となるので、1番目の成分、4番目の成分、2番目の成分、3番目の成分の順に、br(−3k)の総和が1024になるまで79回に渡って1ずつ加算する。
【0107】
同様に、br(1−3k)−bc(1−3k)=[0.2995,0.1014,0.1014,0.2995]となるので、係数br(1−3k)については、2番目の成分、3番目の成分、1番目の成分、4番目の成分の順に加算することとなる。
【0108】
すなわち、br(1−3k)=[−217,652,652,(−217)]となるので、2番目の成分、3番目の成分、1番目の成分、4番目の成分の順に、br(1−3k)の総和が1024になるまで154回に渡って1ずつ加算する。
【0109】
また、br(2−3k)−bc(2−3k)=[−0.1047,0.4304,0.1520,−0.3074]となるので、係数br(2−3k)については、4番目の成分、1番目の成分、3番目の成分、2番目の成分の順に加算することとなる。
【0110】
すなわち、br(2−3k)=[−89,196,978,(−140)]となるので、br(1−3k)の総和が1024になるまで79回に渡って1ずつ加算する。
【0111】
係数br(−3k)、br(1−3k)およびbr(2−3k)に対する加算処理の結果を、それぞれ係数br(−3k)’、br(1−3k)’およびbr(2−3k)’とすると、以下のように表される。
【0112】
br(−3k)’=[−120,978,196,−89]
br(1−3k)’=[−179,691,691,−179]
br(2−3k)’=[−69,215,998,−120]
【0113】
従って、伝達関数H
UD(z)のインパルス応答は、h
UD=[−69,−179,−120,215,691,998,998,691,215,−120,−179,−69]となる。
【0114】
<補間係数の整列>
補間係数の整列処理は、伝達関数H
UD(z)のインパルス応答h
UDを、数式(1)の畳み込み演算の実行に合わせて、並べ替えて係数テーブル20(
図7)に格納する処理である。
【0115】
この場合、入力された画像に対し、出力される画像の位置がずれないように、0位相のフィルタ作成するようにh
UDの並べ替えを行う。
【0116】
図13は、
図8におけるステップS3の補間係数の整列処理を説明するフローチャートである。
【0117】
<拡大縮小処理演算式を出力ごとに分解>
まず、ステップS31に示すように、数式(1)で示される拡大縮小処理演算式を出力ごとに分解する。この処理は以下の数式(15)で表される。
【0119】
上記数式(15)において、mおよびkは整数であり、kの値を調整してインパルス応答h
UDとの演算を行う。
【0120】
ここで、拡大縮小処理演算式の出力を具体例を挙げて説明する。U=3、D=2として、3/2倍のフィルタを設計する場合、数式(15)は以下の数式(16)で表される。
【0122】
ここで、先に説明した3/2倍のフィルタにおける伝達関数H
UD(z)の整数化後のインパルス応答h
UDを例に採ると、h
UDは−6〜5の範囲であり、h
UD(−6,5)=[−69,−179,−120,215,691,998,998,691,215,−120,−179,−69]と表すことができる。
【0123】
<総和範囲の決定>
次に、
図13のステップS32に示すように、数式(16)で示されるそれぞれの出力について総和を取る範囲を決定する。
【0124】
すなわち、上記数式(16)において、m=0で、h
UDが−6〜5の範囲の値を取る場合、数式(16)は以下の数式(17)で表される。
【0126】
上記数式(17)においては、y(0)、y(1)では、総和(Σ)を取る範囲(kの最小値と最大値の範囲)は−1〜2であり、y(2)では0〜3、y(3)では1〜4となっている。このkの最小値と最大値の範囲の決定方法については後に説明する。
【0127】
<係数の並び替え>
kの最小値と最大値の範囲を決定した後は、
図13のステップS33に示すように、伝達関数H
UD(z)のインパルス応答h
UDの並べ替えを行う。
【0128】
上記数式(17)におけるy(0)の計算結果は
図14のように表すことができる。
図14においては、入力画像の画素データx(−1)、x(0)、x(1)およびx(2)に基づいて内挿点となる出力画像データy(0)を作成する(補間する)動作を模式的に表しており、画素データx(−1)、x(0)、x(1)およびx(2)に、それぞれ補間係数−120、998、215および−69を乗算している。なお、補間係数−120、998、215および−69は、先に説明した係数br(−3k)’に対応する。
【0129】
なお、画素データx(−1)は、画像でいうと左端の画素のない領域の画素データであり、画像を折り返して使用する対称拡張法により画素データが生成されている。
【0130】
また、数式(17)におけるy(1)の計算結果は
図15のように表すことができる。
図15においては、入力画像の画素データx(−1)、x(0)、x(1)およびx(2)に基づいて内挿点となる出力画像データy(1)を補間する動作を模式的に表しており、画素データx(−1)、x(0)、x(1)およびx(2)に、それぞれ補間係数−69、215、998および−120を乗算している。なお、補間係数−69、215、998、−120は、先に説明した係数br(2−3k)’に対応する。
【0131】
また、数式(17)におけるy(2)の計算結果は
図16のように表すことができる。
図16においては、画素データの選択範囲を右に1画素分ずらし(スキップし)、入力画像の画素データx(0)、x(1)、x(2)およびx(3)に基づいて内挿点となる出力画像データy(1)を補間する動作を模式的に表しており、画素データx(0)、x(1)、x(2)およびx(3)に、それぞれ補間係数−179、691、691および−179を乗算している。なお、補間係数−179、691、691、−179は、先に説明した係数br(1−3k)’に対応する。
【0132】
また、数式(17)におけるy(3)の計算結果は
図17のように表すことができる。
図17においては、画素データの選択範囲を右に1画素分スキップし、入力画像の画素データx(1)、x(2)、x(3)およびx(4)に基づいて内挿点となる出力画像データy(3)を補間する動作を模式的に表しており、画素データx(1)、x(2)、x(3)およびx(4)に、それぞれ補間係数−120、998、215および−69を乗算している。なお、補間係数−120、998、215および−69は、先に説明した係数br(−3k)’に対応する。なお、y(4)の計算に際しては画素データの選択範囲はスキップせず、画素データx(1)、x(2)、x(3)およびx(4)に係数br(2−3k)’を乗算する。
【0133】
このように、補間対象となる入力画像の画素データの選択範囲を、画像の左端から1画素ずつ右にスキップさせたり、あるいはスキップさせずに、係数br(−3k)’、br(1−3k)’およびbr(2−3k)’を繰り返して積算することで出力画像データを補間する。
【0134】
このような係数br(−3k)’、br(1−3k)’およびbr(2−3k)’と、当該係数を乗算する演算の繰り返し順番と、画素データのスキップ数のデータが、テーブルとして係数テーブル20(
図7)に格納されている。
【0135】
図18には、
図14〜
図16を用いて説明した数式(17)の計算結果に対応する係数テーブルの一例を示す。
【0136】
図18においては、係数br(−3k)’、br(2−3k)’およびbr(1−3k)’に対する演算の繰り返し順番が、それぞれ0番目、1番目および2番目として示され、また、各係数に対応するスキップ数が、それぞれ1回、0回および1回として示されている。
【0137】
このように、例えばh
UD(−6,5)=[−69,−179,−120,215,691,998,998,691,215,−120,−179,−69]と表される伝達関数H
UD(z)のインパルス応答を
図18に示すような配列に並べ替えることで係数テーブルが規定され、補間係数の整列処理が終了する。
【0138】
なお、演算の繰り返し順番の数は、倍率(U)の数で規定され、補間係数の個数は、数式(7)にTAPとして示される、挿入点を決定するための基準となる画素の個数(基準点数)で規定され、4画素を基準点とする場合、TAP=4となるので、補間係数の個数は4個となる。
【0139】
上述したように入力画像の画素データの選択範囲のスキップ数は、予め決められて係数テーブル20に格納されているが、スキップ数は、数式(15)において変数が決まると決定できるが、これについては後に説明する。
【0140】
また、補間係数の読み出しや、画素データの選択範囲のスキップは制御装置(
図7)で行うが、この制御では、最初のy(0)の演算(0番目の演算)についてはスキップ数は無視し、スキップは行わずに画像の一番左端の画素データを含むように選択範囲を設定し、以後、1番目、2番目、0番目の順で演算を繰り返し、1画像分の全ての画素データについて補間を行う。
【0141】
なお、補間係数の乗算と、乗算済みデータの累積算(総和)を行うことで得られた出力y(n)は、セレクタ4(
図7)を介して出力されるが、出力y(n)は、セレクタ4からシフト回路14(
図7)に与えられ、係数の整数化で使用した2の累乗2
nのnに対応するビット数分(ここでは10ビット)だけシフトしてクリップ回路15に与える。これは10ビットの画素データに10ビットの係数を掛けて20ビットとなったデータを右に10ビットシフトすることで10ビットで割り、10ビットのデータに戻す処理である。
【0142】
クリップ回路15では、シフト回路14より出力された演算結果のデータを、予め設定される最小値と最大値の範囲にデータを切り取り、出力画像データy(n)とする。
【0143】
<補間係数の整列処理の一般化>
上述した補間係数の整列処理については、3/2倍のフィルタを設計する場合に限定しての説明であったが、以下においては、U/D倍のフィルタを設計する場合として、一般化して説明する。
【0144】
U/D倍のフィルタを設計する際に、先に説明したように、挿入点を決定するための基準となるTAP個の画素P
i、P
i+1、・・・、P
i+TAP−1のそれぞれに補間係数を乗算して内挿点を求める方法を採る場合、インパルス応答h
UDの補間係数の個数はU×TAP個となり、伝達関数H
UD(z)のインパルス応答h
UDは、以下の数式(18)で表される。
【0146】
上記数式(18)において、“U×TAP/2”を囲む記号はfloor(フロア)関数を表しており、実数をより小さい整数に関連付ける関数である。例えば、−2.5はフロア関数では−3となり、2.5はフロア関数では2となる。
【0147】
また、インパルス応答h
UDは、先に説明した整数化および分解係数の和を一定とする処理を行うことでベクトルbr’として与えられる。
【0148】
数式(1)で示される拡大縮小処理演算式を出力ごとに分解した数式(15)を以下に示す数式(19)のように変形して、総和を取る範囲、MAX
Um〜MAX
Um+U−1、MIN
Um〜MIN
Um+U−1を求める。
【0150】
MAX
Um〜MAX
Um+U−1、MIN
Um〜MIN
Um+U−1は、何れか1つが求まると、残り全てが決定されるので、一例として、まず、最初にMAX
Umを求める場合について説明する。
【0151】
数式(19)におけるy(Um)の右辺のDUm−Ukを初期値Initとし、以下に示す数式(20)のように変形して係数kを求め、それをMAX
Umとする。
【0153】
ただし、初期値Initは、以下に示す数式(21)の範囲内にあるものとする。
【0155】
なお、上記数式(20)で求まるkは、数式(19)におけるy(Um)で使用されるkである。
【0156】
MAX
Umを決定すると、以下に示す数式(22)のようにMIN
Umが決定される。
【0158】
次に、MAX
Um+1について決定する。数式(21)から初期値Initを以下に示す数式(23)のように定義する。
【0160】
そして、数式(19)におけるy(Um+1)の右辺のD(Um+1)−Ukを以下に示す数式(24)のように定義する。なお、下記数式(24)において%は剰余演算子である。
【0162】
上記数式(24)を以下に示す数式(25)のように変形してkを求め、それをMAX
Um+1とする。
【0163】
なお、上記数式(24)で求まるkは、数式(19)におけるy(Um+1)で使用されるkである。
【0165】
そして、MAX
Um+1が決まると、MIN
Um+1が以下に示す数式(26)のように決定される。
【0167】
次に、MAX
Um+U−1について決定する。まず、数式(19)におけるy(Um+U−1)の右辺のD(Um+U−1)−Ukを以下に示す数式(27)のように定義する。
【0169】
上記数式(27)を以下に示す数式(28)のように変形してkを求め、それをMAX
Um+U−1とする。
【0171】
なお、上記数式(28)で求まるkは、数式(19)におけるy(Um+U−1)で使用されるkである。
【0172】
そして、MAX
Um+U−1が決まると、MIN
Um+U−1が以下に示す数式(29)のように決定される。
【0174】
次に、MAX
Um〜MAX
Um+U−1、MIN
Um〜MIN
Um+U−1を求めるために、数式(20)、数式(22)、数式(25)、数式(26)、数式(28)および数式(29)を、n=0,・・・,U−1とし、MAX
Um+n、MIN
Um+nで一般化すると、以下に示す数式(30)のように表される。
【0176】
次に、一例として、U=3、D=2の3/2倍のフィルタを設計する場合に、m=0,1、n=0,1,2、TAP=4、して数式(30)からMAX
0、MAX
1、MAX
2、MAX
3、・・・、MIN
0、MIN
1、MIN
2、MIN
3、・・・を求めた結果を以下の数式(31)に示す。
【0178】
先に説明した数式(17)は、数式(19)に数式(31)を適用することで得られたものである。
【0179】
以上説明したように、U/D倍のフィルタとして、TAP個の画素に係数を乗算して内挿点を求めるフィルタを設計する場合、一般化された数式(19)を使用でき、数式(30)により総和を取る範囲を決定することができる。これは、
図13に示したフローチャートのステップS32に対応する。
【0180】
次に、先に説明した数式(15)に基づいてスッキプ数を決定する方法について説明する。
【0181】
数式(15)を変形した数式(19)の第1式から最終式(第U式)までの右辺のインパルス応答h
UDは、それぞれ以下に示す数式(32)のように、係数列0〜U−1を表す。
【0183】
すなわち、係数列0は、h
UD(DUm−Uk)において、kがMIN
0〜MAX
0の場合の係数列であり、係数列1は、h
UD(D(Um+1)−Uk)において、kがMIN
1〜MAX
1の場合の係数列であり、係数列U−1は、h
UD(D(Um+U−1)−Uk)において、kがMIN
U−1〜MAX
U−1の場合の係数列である。
【0184】
また、スキップ数は出力画素y(n)の入力範囲が、1つ前の出力画素y(n−1)の入力範囲に対して何画素スキップするかで定義されるので、以下に示す数式(33)で表される。
【0186】
そして、上記数式(33)は、数式(30)に基づいて係数列nのスキップ数skipnの数式として、以下に示す数式(34)で一般化できる。
【0188】
上記数式(34)において、例えば、m=0、U=3、D=2、n=0〜2として、スキップ数を求めると、skip0=1、skip1=0、skip2=1となり、
図18の係数テーブルと一致する。
【0189】
<補間関数を用いた場合の係数テーブルの作成>
先に説明したように、画像の拡大縮小を行うために補間関数を用いる場合でも係数テーブルを作成することは可能である。
【0190】
例えば、キュービックコンボリューションを用いた内挿法を説明する数式(4)を、整数の乗算と加減算とデータのシフトのみで実現できるように下記の数式(35)のように変形する。
【0192】
数式(35)においては、補間関数h(t
i)に2
nを乗算してround演算した値をh(t
i)’とし、補間関数h(t
i+1)に2
nを乗算してround演算した値をh(t
i+1)’とし、補間関数h(t
i+2)に2
nを乗算してround演算した値をh(t
i+2)’とし、2
nからh(t
i)’、h(t
i+1)’およびh(t
i+2)’を差し引いた値をh(t
i+3)’としている。
【0193】
そして、
図6に示される内挿点Xを出力y(0)とし、その座標をb
0とし、出力y(j)の座標をb
jとすると、座標b
jと座標b
0の関係は以下の数式(36)の第1式のように表され、また、t
i、t
i+1、t
i+2およびt
i+3は、第2式〜第
5式のように表される。
【0195】
なお、上記数式(36)の第3式のINT(b
j)は、座標b
jから小数点以下を切り捨てる演算を表し、また、座標b
jの値は前の座標b
j−1の整数部より桁上がりした値で規定される。
【0196】
そして、数式(4)、数式(35)および数式(36)に基づいてh(t
i)’、h(t
i+1)’、h(t
i+2)’およびh(t
i+3)’を求めることで係数テーブルを作成することができる。
【0197】
ここで、U=3、D=2の3/2倍のフィルタを設計する場合を例に採ると、座標b
0=1/6、n=10、a=1.2とすると、得られる係数テーブルは
図19のようになる。
【0198】
この係数テーブルに格納された補間係数と、対応する画像データとを数式(5)のように乗算し、乗算結果を加算することで、内挿点を得ることができる。
【0199】
このように、画像の拡大縮小を行うために補間関数を用いる場合でも係数テーブルを作成することできる。
【0200】
<変形例>
なお、上記の説明では、数式(35)に示されるように、h(t
i)’、h(t
i+1)’およびh(t
i+2)’を個々に求めた後、2
nからh(t
i)’、h(t
i+1)’およびh(t
i+2)’を差し引いた値をh(t
i+3)’としていたが、これに限定されるものではない。
【0201】
例えば、以下に示す数式(37)のように、h(t
i+1)’、h(t
i+2)’、h(t
i+3)’を個々に求めた後、2
nからh(t
i+1)’、h(t
i+2)’、h(t
i+3)’を差し引くことでh(t
i)’を求めても良い。
【0203】
また、以下に示す数式(38)のように、h(t
i)’、h(t
i+2)’、h(t
i+3)’を個々に求めた後、2
nからh(t
i)’、h(t
i+2)’、h(t
i+3)’を差し引くことでh(t
i+1)’を求めても良い。
【0205】
また、以下に示す数式(39)のように、h(t
i)’、h(t
i+1)’、h(t
i+3)’を個々に求めた後、2
nからh(t
i)’、h(t
i+1)’、h(t
i+3)’を差し引くことでh(t
i+2)’を求めても良い。
【0207】
なお、以上の説明では、画像を拡大する場合を例に採って説明したが、画像を縮小する場合も同様に本発明を適用できることは言うまでもない。