JPWO2007102244A1 - 画像拡大縮小装置 - Google Patents
画像拡大縮小装置 Download PDFInfo
- Publication number
- JPWO2007102244A1 JPWO2007102244A1 JP2008503741A JP2008503741A JPWO2007102244A1 JP WO2007102244 A1 JPWO2007102244 A1 JP WO2007102244A1 JP 2008503741 A JP2008503741 A JP 2008503741A JP 2008503741 A JP2008503741 A JP 2008503741A JP WO2007102244 A1 JPWO2007102244 A1 JP WO2007102244A1
- Authority
- JP
- Japan
- Prior art keywords
- coefficient
- clock
- pixel
- interpolation
- original image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T3/00—Geometric image transformation in the plane of the image
- G06T3/40—Scaling the whole image or part thereof
- G06T3/4007—Interpolation-based scaling, e.g. bilinear interpolation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/387—Composing, repositioning or otherwise geometrically modifying originals
- H04N1/393—Enlarging or reducing
- H04N1/3935—Enlarging or reducing with modification of image resolution, i.e. determining the values of picture elements at new relative positions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N7/00—Television systems
- H04N7/01—Conversion of standards, e.g. involving analogue television standards or digital television standards processed at pixel level
- H04N7/0135—Conversion of standards, e.g. involving analogue television standards or digital television standards processed at pixel level involving interpolation processes
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Image Processing (AREA)
- Editing Of Facsimile Originals (AREA)
Abstract
拡大/縮小率sに応じて設定されるそれぞれの補間位置毎に、原画像の各画素の画素値に対する係数を求めて係数RAM4に格納する係数演算部2と、クロック生成部1により生成される第2の処理クロックcs2に従ってマトリクス分解部5により抽出される原画像の各画素の画素値と、第1の処理クロックcs1に従って係数メモリ4から読み出される係数とを乗加算することによって補間位置における各画素の画素値を求める係数乗算部6とを備え、実際の補間演算の際には必要な係数を係数RAM4から読み出すだけで使用することができるようにして、補間演算の際に係数を算出する必要をなくすとともに、補間演算を行うために大きな画像メモリを用いる必要もなくす。
Description
本発明は画像拡大縮小装置に関し、特に、デジタル画像の拡大および縮小を行う装置に用いて好適なものである。
従来、画像の拡大あるいは縮小を簡単な処理によって行う方法として、所定間隔で同じ画素を繰り返したり間引いたりする手法が知られている。例えば、X方向およびY方向のそれぞれについて、5画素毎にこの5画素目と同じ画素値を有する画素を挿入することにより、簡易的に1.2倍の拡大画像を得ることができる。反対に、5画素毎に1画素を削除することにより、簡易的に0.8倍の縮小画像を得ることができる。
しかし、このように一定間隔で画素を挿入したり、間引いたりした場合には、拡大後あるいは縮小後の画像が歪むという欠点がある。そのため、画像の拡大や縮小を高精度に行う場合には、このような欠点のない補間処理を用いた手法が汎用されている(例えば、特許文献1参照)。その中には、リサンプリング処理と補間処理との組み合わせから成る画像の拡大縮小方式も存在する(例えば、特許文献2参照)。
特開平11−353473号公報
特開平9−259265号公報
しかし、このように一定間隔で画素を挿入したり、間引いたりした場合には、拡大後あるいは縮小後の画像が歪むという欠点がある。そのため、画像の拡大や縮小を高精度に行う場合には、このような欠点のない補間処理を用いた手法が汎用されている(例えば、特許文献1参照)。その中には、リサンプリング処理と補間処理との組み合わせから成る画像の拡大縮小方式も存在する(例えば、特許文献2参照)。
上記特許文献2に記載の技術では、例えば画像をs倍に拡大(または縮小)する処理の場合、まずは原画像の画素間隔に対して1/s倍の間隔でリサンプリングを行う。これにより、リサンプル点の数は原画像の画素数に比して、縦横ともにs倍となる。次に、リサンプル点の近傍にある原画像の画素値を用いて、リサンプル点の画素値を補間演算により求める。そして、求めたリサンプル点の画素値を原画像と同じ元の画素間隔で描くことにより、拡大画像(または縮小画像)を得る。
特許文献2の発明では、補間処理においては計算速度と画質の両者の性能を良くするのが困難であるという理由から、画質を維持しながら高速に拡大縮小処理を行うために、リサンプリング処理を改良して高速化を図っている。すなわち、リサンプリング座標を求めるプロセスを経ず、直接、補間処理で参照すべき近傍画素のアドレスとビット番号を求める手段を用いることにより、リサンプル点の近傍画素の画素値が格納されているメモリ上の位置を高速に算出できるようにしている。
特許文献2の発明では、補間処理においては計算速度と画質の両者の性能を良くするのが困難であるという理由から、画質を維持しながら高速に拡大縮小処理を行うために、リサンプリング処理を改良して高速化を図っている。すなわち、リサンプリング座標を求めるプロセスを経ず、直接、補間処理で参照すべき近傍画素のアドレスとビット番号を求める手段を用いることにより、リサンプル点の近傍画素の画素値が格納されているメモリ上の位置を高速に算出できるようにしている。
しかしながら、上記特許文献2に記載の従来技術では、補間処理に用いる原画像の画素値読み出しを高速化しているものの、補間処理自体の高速化は図られておらず、補間処理には依然として多くの時間がかかってしまうという問題があった。また、補間処理を行うに当たっては処理部の入力側と出力側にそれぞれ大きな画像メモリを必要とし、回路規模が大きくなってしまうという問題もあった。
本発明は、このような問題を解決するために成されたものであり、回路規模を小さくすることができるようにするとともに、拡大縮小処理の全体として動作を高速化できるようにすることを目的とする。
上記した課題を解決するために、本発明では、所定の倍率に応じて設定されるそれぞれの補間位置毎に、所定の補間関数に基づいて、補間位置の周囲にある原画像の各画素の画素値に対する係数をそれぞれ求めて係数メモリにあらかじめ格納しておく。そして、画像処理の際に、補間位置の周囲にある原画像の各画素の画素値と係数メモリから読み出される係数とを乗加算することによって補間位置における各画素の画素値を求めることにより、画像の拡大/縮小処理を行うようにしている。
上記のように構成した本発明によれば、補間演算によって補間位置の画素値を求めるのに必要な係数があらかじめ係数メモリに格納されていて、実際の補間演算の際にはそれを係数メモリから読み出すだけで使用することができるので、補間演算の際に係数を算出する必要がなく、画像の拡大/縮小処理の動作を高速化することができる。また、補間処理を行うために大きな画像メモリを用いる必要もなくなり、装置の回路規模を小さくすることができる。
本発明は、このような問題を解決するために成されたものであり、回路規模を小さくすることができるようにするとともに、拡大縮小処理の全体として動作を高速化できるようにすることを目的とする。
上記した課題を解決するために、本発明では、所定の倍率に応じて設定されるそれぞれの補間位置毎に、所定の補間関数に基づいて、補間位置の周囲にある原画像の各画素の画素値に対する係数をそれぞれ求めて係数メモリにあらかじめ格納しておく。そして、画像処理の際に、補間位置の周囲にある原画像の各画素の画素値と係数メモリから読み出される係数とを乗加算することによって補間位置における各画素の画素値を求めることにより、画像の拡大/縮小処理を行うようにしている。
上記のように構成した本発明によれば、補間演算によって補間位置の画素値を求めるのに必要な係数があらかじめ係数メモリに格納されていて、実際の補間演算の際にはそれを係数メモリから読み出すだけで使用することができるので、補間演算の際に係数を算出する必要がなく、画像の拡大/縮小処理の動作を高速化することができる。また、補間処理を行うために大きな画像メモリを用いる必要もなくなり、装置の回路規模を小さくすることができる。
図1は、第1の実施形態による画像拡大縮小装置の構成例を示す図である。
図2は、第1〜第4の実施形態において用いるユニットマトリクスとデータ生成エリアについて説明するための図である。
図3は、第1〜第4の実施形態において用いるクロックサイクルについて説明するための図である。
図4は、第1〜第4の実施形態において用いる補間関数の例を示す図である。
図5は、第2の実施形態による画像拡大縮小装置の構成例を示す図である。
図6は、第2の実施形態によるクロック生成部、マトリクス分解部およびD型フリップフロップの詳細な構成例を示す図である。
図7は、第2の実施形態における画像信号の取り込みタイミングを示す図である。
図8は、第3の実施形態による画像拡大縮小装置の構成例を示す図である。
図9は、第3の実施形態による係数乗算部で用いる各クロックを示すタイミングチャートである。
図10は、第3の実施形態で用いる係数乗算部の構成例を示す図である。
図11は、第4の実施形態による画像拡大縮小装置の構成例を示す図である。
図12は、第4の実施形態で用いる垂直方向係数乗算部の構成例を示す図である。
図13は、第4の実施形態による係数乗算部で用いる各クロックを示すタイミングチャートである。
図14は、第4の実施形態で用いる水平方向係数乗算部の構成例を示す図である。
図2は、第1〜第4の実施形態において用いるユニットマトリクスとデータ生成エリアについて説明するための図である。
図3は、第1〜第4の実施形態において用いるクロックサイクルについて説明するための図である。
図4は、第1〜第4の実施形態において用いる補間関数の例を示す図である。
図5は、第2の実施形態による画像拡大縮小装置の構成例を示す図である。
図6は、第2の実施形態によるクロック生成部、マトリクス分解部およびD型フリップフロップの詳細な構成例を示す図である。
図7は、第2の実施形態における画像信号の取り込みタイミングを示す図である。
図8は、第3の実施形態による画像拡大縮小装置の構成例を示す図である。
図9は、第3の実施形態による係数乗算部で用いる各クロックを示すタイミングチャートである。
図10は、第3の実施形態で用いる係数乗算部の構成例を示す図である。
図11は、第4の実施形態による画像拡大縮小装置の構成例を示す図である。
図12は、第4の実施形態で用いる垂直方向係数乗算部の構成例を示す図である。
図13は、第4の実施形態による係数乗算部で用いる各クロックを示すタイミングチャートである。
図14は、第4の実施形態で用いる水平方向係数乗算部の構成例を示す図である。
(第1の実施形態)
以下、本発明の一実施形態を図面に基づいて説明する。図1は、第1の実施形態による画像拡大縮小装置の構成例を示す図である。図2は、本実施形態において用いるユニットマトリクスとデータ生成エリアについて説明するための図である。図3は、本実施形態において用いるクロックサイクルについて説明するための図である。図4は、本実施形態において用いる補間関数の例を示す図である。
ユニットマトリクスは、画像の拡大縮小処理を行う最小画素ブロックであり、図2にその構成の一例を示している。図2において、四角で示したa〜pの16個(縦4個×横4個)の画素がユニットマトリクスの構成画素である。水平方向の隣接画素のクロック間隔はck0であり、垂直方向の隣接画素のクロック間隔は1水平クロックである。データ生成エリアは、ユニットマトリクスの中央部における正方形エリア(4つの互いに隣接する画素f,g,j,kで囲まれるエリア)であり、補間データはこのデータ生成エリア内で生成する。
補間データの生成方法は、以下の通りである。すなわち、画像の拡大/縮小率sに応じてデータ生成エリア内に補間位置を設定し、その設定した補間位置と16個の画素a〜pの位置との空間距離をそれぞれ算出する。そして、その空間距離に応じた係数値を所定の補間関数から求める。さらに、各画素a〜pの画素値と、画素a〜p毎に求めた係数値とをそれぞれ乗算して、それらの乗算結果を全て加算することにより、補間データを生成する。
補間データを求める際に使用する補間関数として、例えば図4のような関数を用いる。図4に示す補間関数は、補間位置と元の画素位置との空間距離が0のときは係数値が1、当該空間距離が1(基準クロックck0の1つ分)のときは係数値が0、当該空間距離が2以上のときは係数値が0となるもので、当該空間距離が0より大きく1より小さいときは係数値が正の値、当該空間距離が1より大きく2より小さいときは係数値が負の値となるように設定されている。
上述のように、ユニットマトリクスは縦横4画素の領域に設定しており、データ生成エリアはそのユニットマトリクスの中央部に縦横2画素の範囲で設定している。そのため、データ生成エリア内に設定された補間位置と、ユニットマトリクスの外部にある画素の位置との空間距離は、必ず2以上となる。そして、図4に示すような補間関数を用いた場合、空間距離が2以上であれば、係数値は必ず0となる。したがって、ユニットマトリクスの外部にある画素の画素値は、補間データに全く影響を与えない。つまり、ユニットマトリクス内の画素値だけで全ての補間演算が完結する。
なお、ここではユニットマトリクスの例として縦4個×横4個のマトリクスを挙げているが、これに限定されない。例えば、縦3個×横3個あるいは縦2個×横2個のマトリクスであっても良い。後者の場合、ユニットマトリクスとデータ生成エリアとが一致する。このようにユニットマトリクスの設定範囲を変える場合、それに合わせて補間関数も変えるのが好ましい。
次に、クロックサイクルについて説明する。クロックサイクルは、水平方向に対するクロックサイクルccxと垂直方向に対するクロックサイクルccyとがある。図3は、このクロックサイクルccx,ccyを示したものである。図3において、●印は原画像の画素を示し、×印は画像を水平方向にsH倍、垂直方向にsV倍した場合(sH,sVは任意の正数である。図3はsH≠sV,1<sH<2,1<sV<2の例)の補間画像の画素を示す。また、原画像の4つの画素で囲まれる点線の矩形領域の1つ1つがデータ生成エリアを示している。
水平方向に画像をsH倍するということは、原画像の水平方向の画素間隔に対して1/sH倍の間隔で補間位置を設定し、その補間位置の画素値を補間演算により求めて、求めた補間位置の画素値を原画像と同じ元の画素間隔で描くことに相当する。1/sH倍の間隔で設定した補間位置の補間データを求めるというのは、言い換えると、基準クロックck0に対してsH倍周波数のクロックck1(=sH・ck0)の間隔でリサンプリングし、そのリサンプル点の補間データを求めることに相当する。
この場合、データ生成エリア内でのリサンプル点の水平方向の位置は、図3に示すように1クロックck1毎に1/sHの間隔でずれていく。そして、ck1の数クロック後には元の画素位置と一致する。図3の例の場合、データ生成エリア内でのリサンプル点の水平方向の位置は、補間画素が5つ離れたところ(原画像の画素では4つ離れたところ)で元の画素位置と一致する。
また、垂直方向に画像をsV倍するということは、原画像の垂直方向の画素間隔に対して1/sV倍の間隔で補間位置を設定し、その補間位置の画素値を補間演算により求めて、求めた補間位置の画素値を原画像と同じ元の画素間隔で描くことに相当する。1/sV倍の間隔で設定した補間位置の補間データを求めるというのは、言い換えると、基準クロックck0に対してsV倍周波数のクロックck1’(=sV・ck0)の間隔でリサンプリングし、そのリサンプル点の補間データを求めることに相当する。
この場合、データ生成エリア内でのリサンプル点の垂直方向の位置は、図3に示すように1クロックck1’毎に1/sVの間隔でずれていく。そして、ck1’の数クロック後には元の画素位置と一致する。図3の例の場合、データ生成エリア内でのリサンプル点の垂直方向の位置は、補間画素が5つ離れたところ(原画像の画素では3つ離れたところ)で元の画素位置と一致する。
データ生成エリア内でのリサンプル点の位置が元の画素位置と一致するまでの一巡のサイクル中に含まれるクロックck1,ck1’の数を、クロックサイクルと呼ぶ。図3の例の場合、水平方向に対するクロックサイクルccxも垂直方向に対するクロックサイクルccyも同じで、ccx=ccy=5である。なお、以下では説明の簡略化のため、水平方向の拡大/縮小率sHと、垂直方向の拡大/縮小率sVとが等しい(sH=sV=s、ck1=ck1’)ものとして説明する。
次に、第1の実施形態による画像拡大縮小装置の構成について説明する。図1に示すように、第1の実施形態による画像拡大縮小装置は、クロック生成部1、係数演算部2、関数ROM3、係数RAM4、マトリクス分解部5および係数乗算部6を備えて構成されている。
クロック生成部1は、基準クロックck0を入力するとともに、拡大/縮小後の水平画素数および垂直画素数のデータを入力して、s倍周波数のクロックck1を生成する。以下では、ck1をデータクロックと呼ぶ。拡大/縮小率sは、入力画像の元々の水平/垂直画素数と、クロック生成部1に入力される拡大/縮小後の水平/垂直画素数との比率で決まる。拡大/縮小率sそのものの情報をクロック生成部1に入力するようにしても良いが、拡大/縮小率sの値によっては、拡大/縮小後の水平/垂直画素数に半端が生じてその処理が複雑になる。よって、拡大/縮小後の水平/垂直画素数をクロック生成部1に入力し、それを拡大/縮小率sに換算するのが好ましい。
また、クロック生成部1は、2つの処理クロックcs1,cs2を生成する。第1の処理クロックcs1は、係数RAM4の読み出しアドレスに相当するクロックであり、第2の処理クロックcs2は、入力画像信号のディレイ量を制御するためのクロックである。これらの処理クロックcs1,cs2の詳細については後述する。
係数演算部2は、クロック生成部1により生成された拡大/縮小率sのデータおよびデータクロックck1と、関数ROM3に格納されている図4のような補間関数のデータとに基づいて、拡大/縮小率sに応じて設定されたそれぞれの補間位置毎に、各画素a〜pの画素値に対する16個の係数をそれぞれ算出する。ここで、係数演算部2は、原画像の領域全体について係数を算出する必要はなく、1つの水平方向クロックサイクルccxと1つの垂直方向クロックサイクルccyとで囲まれる1つの領域(以下、これをクロックサイクルエリアと呼ぶ)内においてのみ係数を求めれば良い。
すなわち、係数演算部2は、まず、クロックサイクルエリア内に存在する複数の補間位置を求める。そして、その求めた複数の補間位置毎に、ユニットマトリクスを構成する16個の画素a〜pの位置との空間距離をそれぞれ算出する。さらに、係数演算部2は関数ROM3を参照して、複数の補間位置毎に、各画素a〜pの位置との空間距離に応じた16個の係数値をそれぞれ求める。
関数ROM3は、図4のような補間関数のデータをあらかじめ格納しておくものである。補間関数のデータは、例えば、空間距離と係数値とを対応付けて記憶したテーブル情報により構成される。なお、ここでは係数演算部2が空間距離をもとに関数ROM3のテーブル情報を参照することにより、当該空間距離に対応付けられた係数値を読み出す構成としているが、これに限定されない。例えば、テーブル情報を有する関数ROM3を設けるのではなく、図4のような補間関数を表す式に空間距離をパラメータとして代入することにより、係数値を演算により求めるようにしても良い。
係数RAM4は、係数演算部2により求められた係数を格納するものである。画像の拡大/縮小率sの値をいくつか設定して係数演算部2により係数を求めることにより、様々な拡大/縮小率sの値に応じた係数をあらかじめ係数RAM4に格納しておくことが可能である。係数RAM4の容量は、処理画像1系統につき、水平方向のクロックサイクルccxと垂直方向のクロックサイクルccyとの積×16×2[ワード]となる。
例えば、拡大/縮小率sを0.5倍〜4倍までとし、その間を0.1倍刻みで設定すると、水平・垂直共にクロックサイクルの最大値が39となるので、R色・G色・B色の3系統の画像を拡大/縮小するために必要な係数RAM4の容量は、最大で392×16×6≒146キロワードとなる。また、拡大/縮小率sを0.2倍刻みで設定すると、水平・垂直共にクロックサイクルの最大値が19となるので、係数RAM4の容量は最大で192×16×6≒35キロワードとなる。また、拡大/縮小率sを0.5倍刻みで設定すると、水平・垂直共にクロックサイクルの最大値が7となるので、係数RAM4の容量は最大で72×16×6≒5キロワードとなる。何れにしても、容量は極めて小さくて済む。
なお、上述のように、係数演算部2は、1つの補間位置に対して、ユニットマトリクスを構成する16個の画素a〜pの位置との空間距離に応じた16個の係数値を求めて係数RAM4に格納するようにしたが、これに限定されない。16個の画素a〜pの中には、1つの補間位置から見た空間距離が同じものが複数存在することがある。補間位置との空間距離が同じどうしの画素に関しては、代表して1つのみ係数値を求めて係数RAM4に格納するようにしても良い。このようにすれば、係数RAM4の容量を更に小さくすることができる。
マトリクス分解部5は、入力画像信号からユニットマトリクスを構成する16個の画素a〜pの画素値を抽出する。このときマトリクス分解部5は、クロック生成部1から供給される第2の処理クロックcs2に基づいて、入力画像信号のディレイ量(データ生成エリアの移動量)を制御する。第2の処理クロックcs2は、基準クロックck0、画像の拡大/縮小率sおよびクロックサイクルccx,ccyを使用してクロック生成部1により生成される。
図3にて説明したように、1つのクロックサイクル内に含まれる補間位置の数は、画像の拡大/縮小率sに応じて異なる。また、拡大/縮小率sによっては、クロックサイクル内に含まれるデータ生成エリア毎に、その中に含まれる補間位置の数が異なることもある。図3に示した例では、水平方向のクロックサイクルccx内に含まれる4つのデータ生成エリアのうち、1つ目と4つ目のデータ生成エリアでは水平方向の補間位置が2つであるが、2つ目と3つ目のデータ生成エリアでは水平方向の補間位置が1つのみとなっている。
そこで、後述するように係数乗算部6において補間データを求める際に、1つ目と4つ目のデータ生成エリアでは補間データを2つずつ求め、2つ目と3つ目のデータ生成エリアでは補間データを1つずつ求める必要がある。すなわち、1つ目と4つ目のデータ生成エリアはデータクロックck1を2つカウントしたタイミングで水平方向に移動させ、2つ目と3つ目のデータ生成エリアはデータクロックck1を1つカウントしたタイミングで水平方向に移動させる必要がある。このようなデータ生成エリアの移動を制御するためのクロックが第2の処理クロックcs2である。
係数乗算部6は、マトリクス分解部5より出力されるユニットマトリクス内の各画素a〜pの画素値と、係数RAM4から読み出される係数値(各画素a〜pの各々に対する係数値)とをそれぞれ乗算し、それらの乗算結果を全て加算することによって1つの補間位置における補間データを生成する。この処理を、マトリクス分解部5によりユニットマトリクスを順次移動させながら、原画像に対する全ての補間位置について行う。本実施形態では、原画像の最上位ラインから最下位ラインに向けて1水平ラインずつ順番に補間データを求めていく。
ここで、係数RAM4からの係数値の読み出しは、クロック生成部1より出力される第1の処理クロックcs1に従って制御される。具体的には、1つの水平ラインについて処理が終わるまでの間は、水平方向クロックサイクルccxの周期で同じ係数を繰り返し係数RAM4から読み出す。すなわち、図3に示す水平方向クロックサイクルccx中に含まれる左から5つ分の補間位置に対する5組の係数(1組は16個の画素a〜pに対する係数値から成る)を係数RAM4から順に読み出した後は、再び同じ5組の係数を係数RAM4から順に読み出す。
1つの水平ライン分について処理が終わったら、補間ラインを垂直方向に1/sだけ移動させて、次の水平ラインに対する5組の係数を係数RAM4から順に読み出す。このときも、1つの水平ラインの処理が終わるまでの間は、水平方向クロックサイクルccxの周期で同じ5組の係数を繰り返し読み出す。以下同様に処理を繰り返していき、垂直方向クロックサイクルccyも一巡した段階で、係数RAM4に格納されている係数が一度全て読み出されたことになる。その後は、再び係数RAM4の先頭に戻って係数が同じように読み出されていく。
係数乗算部6は、以上のように係数RAM4から順次読み出される係数値と、マトリクス分解部5により移動量を制御しながら出力されるユニットマトリクス内の各画素a〜pの画素値とをそれぞれ乗加算することにより、各補間位置における補間データを生成する。そして、生成した複数の補間データを、原画像と同じ元の基準クロックck0の間隔で出力していく。
次に、上記のように構成した本実施形態による画像拡大縮小装置の動作を説明する。本実施形態の画像拡大縮小装置は、係数の生成・保存段階と、画像の拡大/縮小段階との2段階で動作する。係数の生成・保存段階では、クロック生成部1、係数演算部2、関数ROM3および係数RAM4を使用する。画像の拡大/縮小段階では、クロック生成部1、係数RAM4、マトリクス分解部5および係数乗算部6を使用する。
係数の生成・保存段階において、クロック生成部1は、基準クロックck0および拡大/縮小率sに基づいてデータクロックck1(=s・ck0)を生成して、係数演算部2に供給する。係数演算部2は、拡大/縮小率sと、データクロックck1と、関数ROM3に格納されている図4のような補間関数のデータとに基づいて、拡大/縮小率sに応じて設定されたそれぞれの補間位置毎に、各画素a〜pの画素値に対する複数の係数をそれぞれ算出する。そして、算出した複数の係数を係数RAM4に記憶して保存する。
このとき、まず原画像の最も左上の位置にユニットマトリクスを設定し、そのユニットマトリクスの中央に位置するデータ生成エリア内に複数の補間位置を求める。そして、その補間位置のそれぞれについて、当該ユニットマトリクスを構成する各画素a〜pの画素値に対する16個の係数をそれぞれ算出する。
次に、ユニットマトリクスを水平方向に1画素分移動させ、移動後のユニットマトリクス内のデータ生成エリアについても同様に係数を算出する。以下同様にしてユニットマトリクスを水平方向に1画素ずつ移動して係数を算出していく。そして、1つの水平方向クロックサイクルccx分の処理が終わったら、ユニットマトリクスを次の水平ラインの最も左に設定する。
次の水平ラインについても、最初の水平ラインと同様の処理を行う。以下同様にしてこのような処理を繰り返し行い、1つの垂直方向クロックサイクルccy分まで処理が終わったら、係数の生成が完了する。係数演算部2は、以上のような処理の過程で得られた複数の係数を順次係数RAM4に格納していく。
また、画像の拡大/縮小段階において、クロック生成部1は、基準クロックck0および拡大/縮小率sに基づいて処理クロックcs1,cs2を生成し、第1の処理クロックcs1を係数RAM4に、第2の処理クロックcs2をマトリクス分解部5に供給する。
マトリクス分解部5は、入力画像信号からユニットマトリクスを構成する16個の画素a〜pの画素値を抽出する。このときマトリクス分解部5は、原画像の最も左上の位置から最も右下の位置に向かって、ユニットマトリクスを1水平ラインずつ順に設定していく。このときマトリクス分解部5は、第2の処理クロックcs2に従って、ユニットマトリクスの水平方向および垂直方向の移動量を適切に制御する。
係数乗算部6は、マトリクス分解部5により設定されたユニットマトリクス内のデータ生成エリアに存在する1以上の補間位置における補間データを順次求める。1つの補間位置における補間データは、ユニットマトリクスを構成する16個の画素a〜pの画素値と、それらの各画素a〜pに対して係数RAM4から読み出される16個の係数値とをそれぞれ乗算し、それらの乗算結果を全て加算することによって生成する。
マトリクス分解部5および係数乗算部6の動作をもう少し具体的に説明する。まず、マトリクス分解部5は、原画像の最も左上の位置にユニットマトリクスを設定し、各画素a〜pの画素値を抽出する。また、係数乗算部6は、そのユニットマトリクスのデータ生成エリア内に補間位置を求める。そして、その補間位置について、当該補間位置に対する係数を係数RAM4から読み出して、この読み出した係数値とユニットマトリクスの各画素a〜pの画素値とを積和演算することにより、補間データを生成する。
次に、ユニットマトリクスを水平方向に1画素分移動させ、同様に補間データを求める。このように係数乗算部6は、1番目の補間ラインに関する複数の補間データを順次生成する。このときマトリクス分解部5は、第2の処理クロックcs2に従って、ユニットマトリクスの水平方向に対する移動量を適切に制御する。また、係数乗算部6は、各補間位置に対応する係数を、第1の処理クロックcs1に従って水平方向クロックサイクルccxの周期で係数RAM4から繰り返し読み出す。
1水平ライン分の処理が終了したら、マトリクス分解部5は、ユニットマトリクスの位置を水平ライン上の先頭(最も左の位置)に戻す。このとき、マトリクス分解部5は、第2の処理クロックcs2に従って、ユニットマトリクスの垂直方向に対する移動量を適切に制御する。例えば図3の例の場合、2番目の補間ラインは、1番目の補間ラインと同じデータ生成エリア内に存在するので、ユニットマトリクスは垂直方向に移動させない。つまり、1番目の補間ラインを処理したときと同じデータ生成エリアを2番目の補間ラインでも使用する。
ここで、1水平ライン分の処理の終了とは、例えば、原画像の最も右の位置にユニットマトリクスを設定して補間データの生成が終わったタイミングとすることができる。また、原画像の左上の位置を基準として画像の拡大/縮小を行うのであれば、画像を拡大するときには、原画像の水平方向の画素数と同じ数の補間データを求めた段階で、1水平ライン分の処理の終了としても良い。後者の場合は、原画像の最も右の位置までユニットマトリクスを設定することなく、1水平ライン分の処理が終了する。
そして、係数乗算部6は、今度は2番目の補間ラインの補間位置に対する係数を係数RAM4から順に読み出して、この読み出した係数値とユニットマトリクスの各画素a〜pの画素値とを積和演算することにより、2番目の補間ラインに関する複数の補間データを生成する。このときもマトリクス分解部5は、第2の処理クロックcs2に従って、ユニットマトリクスの水平方向に対する移動量を適切に制御する。また、係数乗算部6は、各補間位置に対応する係数を、第1の処理クロックcs1に従って水平方向クロックサイクルccxの周期で係数RAM4から繰り返し読み出す。
以下、3番目以降の補間ラインについても同様にして処理を進めていく。このとき係数乗算部6は、各補間位置に対応する係数を、第1の処理クロックcs1に従って、水平方向には水平方向クロックサイクルccxの周期で係数RAM4から繰り返し読み出し、垂直方向には垂直方向クロックサイクルccyの周期で係数RAM4から繰り返し読み出す。
そして、例えば原画像の最も右下の位置にユニットマトリクスを設定して補間データの生成が終わったタイミングで、全ての補間データの生成が終了する。また、原画像の左上の位置を基準として画像の拡大/縮小を行うのであれば、画像を拡大するときには、原画像の垂直方向の画素数と同じ数の補間データを垂直方向に求めた段階で補間データの生成を終了としても良い。後者の場合は、原画像の最も下の位置までユニットマトリクスを設定することなく、処理が終了する。
なお、原画像の全体を対象として拡大/縮小画像を求める前者の方法の場合は、拡大画像であれば、拡大画像中の任意の位置を切り出して画面上に出力することが可能となる。ただし、この場合には、拡大された画像データを格納するための出力バッファが必要になる。一方、原画像の画素数と同じ数の補間データのみを求める後者の方法の場合は、画面上に出力されない無駄な画素位置の補間データは求めなくて済むので、拡大/縮小処理をより高速化することができる。また、出力バッファも不要である。
係数乗算部6は、以上のようにして求めた複数の補間データを、原画像と同じ元の基準クロックck0の間隔で出力する。このとき、原画像の全領域について補間データを求めて出力バッファに格納し、任意の領域を切り出して出力する方法を採用するときは、切り出し領域内の補間データを基準クロックck0の間隔で順次出力する。一方、原画像の左上の位置を基準として原画像の画素数と同じ数の補間データのみを求めて出力する方法を採用するときは、係数乗算部6により生成される補間データをその順番のまま基準クロックck0の間隔で出力していけば良い。
以上詳しく説明したように、第1の実施形態によれば、補間演算によって補間データを求めるのに必要な係数をあらかじめ係数RAM4に格納しておき、実際の補間演算の際にはそれを係数RAM4から読み出すだけで使用することができるので、補間演算の際に係数を算出する必要がなく、補間処理を高速化することができる。また、補間処理を行うために大きな画像メモリを用いる必要をなくすことができる。特に、原画像の画素数と同じ数だけ補間データを求める方法を採用する場合には、係数乗算部6により生成される補間データをその順番のまま基準クロックck0の間隔で出力していけば良いので、リアルタイム処理が可能であり、出力バッファも不要である。
なお、上記実施形態では、画像の拡大/縮小段階において、原画像の上端から下端に向かって水平方向の1ラインずつ順番に補間データを求めていく例について説明したが、これに限定されない。例えば、原画像の左端から右端に向かって垂直方向の1ラインずつ順番に補間データを求めていくようにしても良い。また、個々のデータ生成エリア毎に水平方向および垂直方向の補間データを順番に求めていくようにしても良い。
(第2の実施形態)
次に、本発明の第2の実施形態を図面に基づいて説明する。図5は、第2の実施形態による画像拡大縮小装置の構成例を示す図である。なお、この図5において、図1に示した符号と同一の符号を付したものは同一の機能を有するものであるので、ここでは重複する説明を省略する。図5に示すように、第2の実施形態による画像拡大縮小装置は、クロック生成部11、マトリクス分解部12、D型フリップフロップ13,14、係数演算部2、関数ROM3、係数RAM4および係数乗算部6を備えて構成されている。
クロック生成部11は、基準クロックck0を入力するとともに、拡大/縮小後の水平/垂直画素数のデータを入力して、s倍周波数のデータクロックck1と、その立ち上りタイミングを微調整した調整データクロックck1dと、データクロックck1の位相を反転した反転データクロックck1バーとを生成する。なお、ここでも説明の簡略化のため、水平方向の拡大/縮小率sHおよび垂直方向の拡大/縮小率sVは等しく共にsであるとする。
マトリクス分解部12は、入力画像信号からユニットマトリクスを構成する16個の画素a〜pの画素値を抽出する。このときマトリクス分解部12は、クロック生成部11から供給される基準クロックck0に基づいて、当該基準クロックck0のタイミングに従って各画素a〜pの画素値を出力する。第2の実施形態によるマトリクス分解部12は、第1の実施形態のように第2の処理クロックcs2によりデータ生成エリアの移動が不規則に制御されることはなく、基準クロックck0の周期で設定したユニットマトリクスを構成する各画素a〜pの画素値をそのまま出力する単純な構成となっている。
1段目のD型フリップフロップ13は、マトリクス分解部12より出力される各画素a〜pの画素値を、クロック生成部11より供給される調整データクロックck1dに従っていったん保持し、当該調整データクロックck1dのタイミングに従って出力する。また、2段目のD型フリップフロップ14は、1段目のD型フリップフロップ13より出力される各画素a〜pの画素値を、クロック生成部11より供給される反転データクロックck1バーに従っていったん保持し、当該反転データクロックck1バーのタイミングに従って出力する。
図6は、上記クロック生成部11、マトリクス分解部12およびD型フリップフロップ13,14の詳細な構成例を示す図である。図6に示すように、クロック生成部11は、バッファ11a,11b、PLL(Phase Locked Loop)回路11c、調整回路11dおよびANDゲート11e,11f,11gを備えている。
クロック生成部11は、外部より入力される基準クロックck0を、2つのバッファ11a,11bを通してマトリクス分解部12に出力する。PLL回路11cは、1つ目のバッファ11aより出力される基準クロックck0と拡大/縮小率sのデータとを入力し、基準クロックck0からs倍周波数のデータクロックck1を生成する。生成されたデータクロックck1は、調整回路11dに供給される。調整回路11dは、3つのANDゲート11e〜11gと協働して、データクロックck1のタイミングを微調整した調整データクロックck1dと、データクロックck1の位相を反転した反転データクロックck1バーとを生成する。その詳細については後述する。
マトリクス分解部12は、13個のディレイ用のD型フリップフロップ12a−1〜12a−13と、原画像の1水平ライン分より4画素分だけ容量の小さいディレイ用の3個のラインメモリ12b−1〜12b−3とを備えて構成されている。ディレイ用のD型フリップフロップ12a−1〜12a−13およびラインメモリ12b−1〜12b−3は、入力される画像信号を基準クロックck0に従って順次遅延させ、各々の出力タップから各画素a〜pの画素値を取り出して、1段目のバッファリング用D型フリップフロップ13に供給する。
1段目のバッファリング用D型フリップフロップ13は、4組(1組は4個)のD型フリップフロップ13−1〜13−4を備えて構成されている。そして、マトリクス分解部12より出力される各画素a〜pの画素値を調整データクロックck1dに従っていったん保持し、当該調整データクロックck1dのタイミングに従って2段目のバッファリング用D型フリップフロップ14に出力する。
また、2段目のバッファリング用D型フリップフロップ14は、4組のD型フリップフロップ14−1〜14−4を備えて構成されている。これらのD型フリップフロップ14−1〜14−4は、その前段にある4組のD型フリップフロップ13−1〜13−4より出力される各画素a〜pの画素値を反転データクロックck1バーに従っていったん保持し、当該反転データクロックck1バーのタイミングに従って係数乗算部6に出力する。
図7は、上述した各データクロックck1d,ck1バーに基づく画像信号の取り込みタイミングを示す図である。なお、図7(a)は画像を拡大する場合の例を示し、図7(b)は画像を縮小する場合の例を示している。
上述のように、マトリクス分解部12のディレイ用のD型フリップフロップ12a−1〜12a−13およびラインメモリ12b−1〜12b−3は、基準クロックck0に従って元信号の画素値を保持する。これに対して、バッファリング用のD型フリップフロップ13−1〜13−4では、s倍周波数のクロックに従って画素値をオーバーサンプリングする。ただし、単純にs倍周波数のデータクロックck1に従って画素値を保持した場合、そのデータクロックck1の立ち上りタイミングが基準クロックck0の切り替わりタイミングの近傍にあると、元信号が切り替わっている最中であり、データをうまくサンプリングできない可能性がある。
そこで、調整回路11dおよびANDゲート11e〜11gを用いて、基準クロックck0の切り替わり(立ち上り)のタイミングでは絶対に立ち上がることのない調整データクロックck1dをデータクロックck1から生成することにより、データを確実にサンプリングできるようにする。
すなわち、調整回路11dは、データクロックck1に対して位相が所定量Δだけ進んだクロックck11および位相が所定量Δだけ遅れたクロックck12を発生する。ここで、所定量Δとしては、少なくとも基準クロックck0の立ち上りに要する時間が必要で、かつそれに近い時間であることが好ましい。
また、調整回路11dは、データクロックck1の立ち上りタイミングが、基準クロックck0の立ち上りから立ち下りの間のちょうど真中のタイミング(以下、中央タイミングと呼ぶ)に比べて位相が進んでいるか遅れているかを判定し、その判定結果に応じて位相進み信号Φ+または位相遅れ信号Φ−を出力する。
第1のANDゲート11eは、データクロックck1に対して位相が所定量Δだけ進んだクロックck11と位相遅れ信号Φ−との論理積をとって出力する。また、第2のANDゲート11fは、データクロックck1に対して位相が所定量Δだけ遅れたクロックck12と位相進み信号Φ+との論理積をとって出力する。また、第3のANDゲート11gは、第1のANDゲート11eの出力と第2のANDゲート11fの出力との論理積をとって出力する。
これにより、データクロックck1の位相が基準クロックck0の中央タイミングより進んでいるときは、当該データクロックck1の立ち上りタイミングより所定量Δだけ遅れたクロックが第3のANDゲート11gより出力される。逆に、データクロックck1の位相が基準クロックck0の中央タイミングより遅れているときは、当該データクロックck1の立ち上りタイミングより所定量Δだけ進んだクロックが第3のANDゲート11gより出力される。これが調整データクロックck1dである。
また、調整回路11dは、PLL回路11cより供給されるデータクロックck1を用いて、当該データクロックck1と周期が同じで、データクロックck1に対して位相が半周期ずれた反転データクロックck1バーを生成する。上述のように、調整データクロックck1dは、データクロックck1に対して位相がΔだけ進んでいるところと遅れているところが存在し、その周期は一定でない。したがって、このような調整データクロックck1dに従ってD型フリップフロップ13−1〜13−4にバッファリングされた画素値をそのままのタイミングで係数乗算部6に供給することはできない。
そこで、D型フリップフロップ13−1〜13−4の後段に更にバッファリング用のD型フリップフロップ14−1〜14−4を設け、一定周期の反転データクロックck1バーに従って各画素a〜pの画素値をサンプリングし直して係数乗算部6に供給する。なお、ここでは反転データクロックck1バーを用いているが、これに限定されない。すなわち、一定周期で、調整データクロックck1dの切り替わりと異なるタイミングで立ち上がるクロックであれば良い。
以上詳しく説明したように、第2の実施形態によれば、入力画像信号がマトリクス分解部12およびD型フリップフロップ13,14を通過することにより、ユニットマトリクスを構成する各画素a〜pの画素値が、拡大/縮小率sに応じたs倍周波数の反転データクロックck1バーに従ってs倍にオーバーサンプリングされて出力される。
これにより、第1の実施形態のように第2の処理クロックcs2によって入力画像信号(データ生成エリア)の移動量を複雑に制御する必要がなくなる。また、移動量制御のためにマトリクス分解部12の入力側にバッファ用の画像メモリを用意する必要がなく、回路規模をより小さくすることができる。さらに、移動量制御のためのバッファリングが不要なので、拡大/縮小処理の動作をより高速化することができる。
(第3の実施形態)
次に、本発明による第3の実施形態を図面に基づいて説明する。第3の実施形態は、上記第2の実施形態による画像拡大縮小装置をNTSC−ハイビジョン方式変換(NTSC方式の画像をハイビジョン方式にアップサンプリングする装置)に応用した場合の例を示すものである。
図8は、第3の実施形態による画像拡大縮小装置の構成例を示す図である。ここでは、NTSCとハイビジョンは共にインターレース走査でフィールド周波数が同じ場合を考える。一般的には、インターレース走査を順次走査に変換してから方式変換を行い、インターレース走査に戻す。図8に示す構成は、順次走査入力を順次走査出力に変換する回路である。なお、図8において、図5および図6に示した構成要素と同一の機能を有する構成要素には同一の符号を付している。
ここで、NTSCとハイビジョンの有効走査線数の比は480:1080、有効画素数の比は720:1920である。なお、ハイビジョンの画面で変換した水平振幅を100%とすると、垂直幅の上下端は表示外となる。この場合、有効画素数の比は720:1440となる。また、NTSCの場合は画素が正方画素でなく1.125:1なので、有効画素数の比は720:1620になる。したがって、NTSC方式からハイビジョン方式への拡大率は、水平拡大率sH=1620/720=2.25、垂直拡大率sV=1080/480=2.25となる。
図8において、3Hディレイライン12,12’,12”は、それぞれ図6に示した13個のディレイ用のD型フリップフロップ12a−1〜12a−13および3個のラインメモリ12b−1〜12b−3に相当する。また、D型フリップフロップ13,13’,13”は、それぞれ図6に示した4組のD型フリップフロップ13−1〜13−4に相当する。また、D型フリップフロップ14,14’,14”は、それぞれ図6に示した4組のD型フリップフロップ14−1〜14−4に相当する。また、係数乗算部6,6’,6”は、それぞれ図5に示した係数乗算部6に相当する。
クロック生成部11’は、図6に示したクロック生成部11と同様にデータクロックck1、調整データクロックck1dおよび反転データクロックck1バーを生成するが、これに加えて、互いに位相が所定量ずつ遅れた複数(例えば4個)のパイプライン用クロックcp1〜cp4も生成する。図9は、このパイプライン用クロックcp1〜cp4のタイミングを示す図である。図9に示すように、これら4個のパイプライン用クロックcp1〜cp4によってパイプライン処理の1サイクルが形成される。
図10は、図8に示した係数乗算部6の構成例を示す図である。図10において、四角で示したブロックはディレイ用のD型フリップフロップ、丸囲みの×印で示したブロックは係数器、丸囲みの+印で示したブロックは加算器である。CTRはカウンタ、台形で示したブロックはセレクタである。図10の構成では、入力される各画素a〜pの画素値と係数RAM4から読み出される係数値ha〜hpとの積和演算をパイプライン処理で行うことで、より高速なリアルタイム動作を実現している。
なお、画像拡大縮小装置を図8のように構成し、その中の係数乗算部6を図10のように構成した場合、拡大/縮小率sが1.5以下の範囲では折り返しノイズの影響が出てくる。この場合は、与えられた拡大/縮小率sをn倍にして画像の拡大/縮小処理を行い、最後に1/n間引き処理を行うことによって1.5倍以下の範囲へ変換すると良い。例えば、拡大/縮小率sが1.2倍の場合、この2倍の拡大率(s=2.4)で画像を拡大し、その拡大画像を1/2倍に間引き処理すれば良い。このようにすれば、折り返しノイズの影響を軽減することができる。
ここで、n=2とすると、拡大/縮小率sが0.75以下の場合には対応できない。これに対して、nの値を大きくすると、動作クロックとして要求されるクロック周波数が非常に大きなものとなってしまう。また、水平方向の拡大/縮小率sHおよび垂直方向の拡大/縮小率sVを共にn倍すれば効果的であるが、水平方向および垂直方向の両方とも間引き処理を行う必要があるので、間引き回路が複雑になってしまう。
これらの問題を回避するために、次のようにするのが好ましい。すなわち、水平方向の拡大/縮小率sHのみをn倍するようにし、その倍率nを、拡大/縮小率sHの値に応じて最適化する。倍率nの値を2のべき乗にすれば処理が簡単になるので、n=2,4,8,16のようにするのが好ましい。例えば、sH<0.4のときはn=16、0.5≦sH<0.6のときはn=8、0.7≦sH<0.9のときはn=4、sH≧1.0のときはn=2とする。
なお、垂直方向ではなく、水平方向の拡大/縮小率sHを10倍にして画像の拡大/縮小処理を行い、最後に水平方向の1/10間引き処理を行うのは、垂直方向の間引き処理に比べて、水平方向の間引き処理の方が、処理が簡単だからである。垂直方向の拡大/縮小率sHを10倍にして画像の拡大/縮小処理を行い、その後で垂直方向の1/10間引き処理を行うことも可能ではある。
(第4の実施形態)
次に、本発明による第4の実施形態を図面に基づいて説明する。第4の実施形態は、上記第2の実施形態による画像拡大縮小装置を動画の拡大/縮小に応用した場合の例を示すものである。動画の拡大/縮小処理の場合、スペクトルの重なりにより折り返しノイズが発生する可能性がある。この折り返しノイズの発生を抑止するため、動画の拡大/縮小処理に関しては、以下に述べるような工夫を加える。
工夫1:拡大/縮小率を小数点以下1桁とする。拡大/縮小処理を行うときは、与えられた拡大/縮小率を10倍にして画像の拡大/縮小処理を行い、最終出力信号に対して1/10間引き処理を行う。ただし、このようにすると、使用するクロック周波数は非常に大きなものが要求されることになる。例えば、拡大/縮小率の最大値を4.0とすると、入力画像信号のサンプリング周波数が13.5MHzのときは所要クロック周波数がGHz帯となり(4×13.5M×102=5.4GHz)、現実的でない。この解決策として、次の工夫2を加える。
工夫2:拡大/縮小処理を、垂直方向の拡大/縮小と水平方向の拡大/縮小との2段階に分けて行う。このとき、垂直方向→水平方向の順に処理する。そして、垂直方向および水平方向の各処理の中で、拡大/縮小率sV,sHを各々10倍にして画像の拡大/縮小処理を行い、その後で1/10間引き処理を行う。この場合、所要クロック周波数は、水平方向の拡大/縮小率sHまたは垂直方向の拡大/縮小率sVの10倍で済む。拡大/縮小率の最大値が4.0の場合、所要クロック周波数は4×13.5M×10=540MHzで良い。
図11は、上述の工夫1および工夫2を加えた動画用の画像拡大縮小装置の構成例を示す図である。図11において、符号でハイフン(−)の後にVの文字が付けられた構成要素は垂直方向の拡大/縮小処理のためのものであり、符号でハイフン(−)の後にHの文字が付けられた構成要素は水平方向の拡大/縮小処理のためのものである。
マトリクス分解部12−V,12−Hは、図6のマトリクス分解部12と同様に構成されている。なお、ここでは図示していないが、マトリクス分解部12−V,12−Hの後段に、図6に示したバッファリング用のD型フリップフロップ13,14を設けるのが好ましい。ローパスフィルタ(LPF)21−V,22−V,23−H,24−Hは、折り返しノイズの抑止効果を高めるために挿入されているものである。
垂直方向のオーバーサンプル回路25−Vは、ユニットマトリクスを構成する16個の画素a〜pの画素値を10倍にオーバーサンプリングするものである。すなわち、オーバーサンプル回路25−VはD型フリップフロップで構成されている。そして、マトリクス分解部12−Vにより抽出されLPF21−Vを通過した各画素a〜pの画素値が、垂直方向の拡大/縮小率sVに応じて生成されたデータクロックck2(=ck0・sV・10=10ck1’)に従ってD型フリップフロップにいったん保持され、当該10倍周波数のデータクロックck2のタイミングに従って出力される。
水平方向のオーバーサンプル回路26−Hは、ユニットマトリクスを構成する16個の画素a〜pの画素値を10倍にオーバーサンプリングするものである。すなわち、オーバーサンプル回路26−HはD型フリップフロップで構成されている。そして、マトリクス分解部12−Hにより抽出されLPF23−Hを通過した各画素a〜pの画素値が、水平方向の拡大/縮小率sHに応じて生成されたデータクロックck3(=ck1’・sH・10)に従ってD型フリップフロップにいったん保持され、当該10倍周波数のデータクロックck3のタイミングに従って出力される。
拡大/縮小率sH,sVが小数点以下1桁の値に制限される場合、これを10倍すれば整数となる。したがって、オーバーサンプル回路25−V,26−Hによるオーバーサンプリングは、オーバーサンプルのデータクロックck2,ck3の位相をわずかに遅らせるだけで正確に行うことができる。また、オーバーサンプル回路25−V,26−Hの構成は、上述のように、入力される各画素a〜pの画素値をデータクロックck2,ck3に従ってD型フリップフロップにて保持するだけの構成で良い。
垂直方向用の係数RAM4−Vは、垂直方向の拡大/縮小を行うのに必要な係数値を記憶している。また、水平方向用の係数RAM4−Hは、垂直方向の拡大/縮小を行うのに必要な係数値を記憶している。これら2つの係数RAM4−V,4−Hに記憶されている係数値を合わせると、図5の係数RAM4に記憶されている係数値と同様となる。
垂直方向係数乗算部6−Vは、垂直方向オーバーサンプル回路25−Vより出力される各画素a〜pの画素値と、垂直方向係数RAM4−Vから読み出される係数値とをそれぞれ乗算し、それらの乗算結果を全て加算することによって垂直方向の1つの補間位置における補間データを生成する。この補間データの生成処理に、3種類のデータクロックck1’,ck2,ck5を使用する。
また、水平方向係数乗算部6−Hは、水平方向オーバーサンプル回路26−Hより出力される各画素a〜pの画素値と、水平方向係数RAM4−Hから読み出される係数値とをそれぞれ乗算し、それらの乗算結果を全て加算することによって水平方向の1つの補間位置における補間データを生成する。この補間データの生成処理には、1種類のデータクロックck4(=ck0・sV・sH=ck3/10)を使用する。
図12は、垂直方向係数乗算部6−Vの構成例を示す図である。図13は、この垂直方向係数乗算部6−Vにて使用するデータクロックck1’,ck2,ck5を示すタイミングチャートである。また、図14は、水平方向係数乗算部6−Hの構成例を示す図である。図13に示すように、データクロックck5は、データクロックck1’でカウントされる10水平ライン分を1つのサイクルとして、当該サイクル中の最初の1水平ライン期間中においてのみデータクロックck2が有効となっているようなクロックである。
図12および図14において、四角で示したブロックはディレイ用のD型フリップフロップ、丸囲みの×印で示したブロックは係数器、丸囲みの+印で示したブロックは加算器である。CTRはカウンタ、台形で示したブロックはセレクタである。図12および図14の構成においても、図10に示した構成と同様に、パイプライン用クロックcp1〜cp4に従って、入力画素a〜pの画素値と係数RAM4から読み出される係数値ha〜hpとの積和演算をパイプライン処理で行うことによって、より高速なリアルタイム動作を実現している。
また、図12に示すように、垂直方向係数乗算部6−Vでは、図13に示すようなデータクロックck5を用いてパイプライン処理しているので、乗加算のパイプライン処理と垂直方向に対する1/10の間引き処理とを同時に行うことができる。また、図14に示すように、水平方向係数乗算部6−Hは、その前段にある水平方向オーバーサンプル回路26−Hの動作クロックck3の1/10倍の周波数の動作クロックck4に従って動作するので、乗加算のパイプライン処理と水平方向に対する1/10の間引き処理とを同時に行うことができる。
以上に説明した第1〜第4の実施形態による画像拡大縮小装置は、これをハードウェア構成によって実現する例について示しているが、DSP(Digital Signal Processor)やソフトウェアの何れによっても実現することが可能である。例えばソフトウェアによって実現する場合、上記実施形態の画像拡大縮小装置は、実際にはコンピュータのCPUあるいはMPU、RAM、ROMなどを備えて構成され、RAMやROMに記憶されたプログラムが動作することによって実現できる。
したがって、コンピュータが上記実施形態の機能を果たすように動作させるプログラムを例えばCD−ROMのような記録媒体に記録し、コンピュータに読み込ませることによって実現できるものである。上記プログラムを記録する記録媒体としては、CD−ROM以外に、フレキシブルディスク、ハードディスク、磁気テープ、光ディスク、光磁気ディスク、DVD、不揮発性メモリカード等を用いることができる。また、上記プログラムをインターネット等のネットワークを介してコンピュータにダウンロードすることによっても実現できる。
なお、上記第1〜第4の実施形態では、係数をあらかじめ記憶しておくメモリとしてRAMを用いているが、これに限定されない。例えば、ROMを使用しても良い。
また、上記第1〜第4の実施形態では、補間関数の例として図4のような関数を挙げたが、これに限定されない。例えば、補間位置と元の画素位置との空間距離が0のときは係数値が1で、当該空間距離が1のときに係数値が0に収束するような関数(空間距離が0より大きく1より小さいときは係数値が正の値となるように設定されている)としても良い。また、補間位置と元の画素位置との空間距離が0のときは係数値が1で、当該空間距離が2のときに係数値が0に収束するような関数(空間距離が0より大きく2より小さいときは係数値が正の値となるように設定されている)としても良い。
また、上記第1および第2の実施形態では、係数演算部2および関数ROM3も含めて画像拡大縮小装置を構成しているが、これは別装置としても良い。すなわち、係数をあらかじめ演算しておくための係数演算装置と、当該係数演算装置によりあらかじめ求められた係数を用いて画像の拡大/縮小を行う画像拡大縮小装置とを別の装置として構成しても良い。
この場合、係数演算装置は、例えば図1のクロック生成部1、係数演算部2および関数ROM3を含み、画像拡大縮小装置はクロック生成部1、係数RAM4、マトリクス分解部5および係数乗算部6を含む。ちなみに、第3および第4の実施形態は、係数演算装置を別体とし、当該係数演算装置によりあらかじめ求められた係数を用いて画像の拡大/縮小を行う画像拡大縮小装置としての構成を示している。
その他、上記第1〜第4の実施形態は、何れも本発明を実施するにあたっての具体化の一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその精神、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
以下、本発明の一実施形態を図面に基づいて説明する。図1は、第1の実施形態による画像拡大縮小装置の構成例を示す図である。図2は、本実施形態において用いるユニットマトリクスとデータ生成エリアについて説明するための図である。図3は、本実施形態において用いるクロックサイクルについて説明するための図である。図4は、本実施形態において用いる補間関数の例を示す図である。
ユニットマトリクスは、画像の拡大縮小処理を行う最小画素ブロックであり、図2にその構成の一例を示している。図2において、四角で示したa〜pの16個(縦4個×横4個)の画素がユニットマトリクスの構成画素である。水平方向の隣接画素のクロック間隔はck0であり、垂直方向の隣接画素のクロック間隔は1水平クロックである。データ生成エリアは、ユニットマトリクスの中央部における正方形エリア(4つの互いに隣接する画素f,g,j,kで囲まれるエリア)であり、補間データはこのデータ生成エリア内で生成する。
補間データの生成方法は、以下の通りである。すなわち、画像の拡大/縮小率sに応じてデータ生成エリア内に補間位置を設定し、その設定した補間位置と16個の画素a〜pの位置との空間距離をそれぞれ算出する。そして、その空間距離に応じた係数値を所定の補間関数から求める。さらに、各画素a〜pの画素値と、画素a〜p毎に求めた係数値とをそれぞれ乗算して、それらの乗算結果を全て加算することにより、補間データを生成する。
補間データを求める際に使用する補間関数として、例えば図4のような関数を用いる。図4に示す補間関数は、補間位置と元の画素位置との空間距離が0のときは係数値が1、当該空間距離が1(基準クロックck0の1つ分)のときは係数値が0、当該空間距離が2以上のときは係数値が0となるもので、当該空間距離が0より大きく1より小さいときは係数値が正の値、当該空間距離が1より大きく2より小さいときは係数値が負の値となるように設定されている。
上述のように、ユニットマトリクスは縦横4画素の領域に設定しており、データ生成エリアはそのユニットマトリクスの中央部に縦横2画素の範囲で設定している。そのため、データ生成エリア内に設定された補間位置と、ユニットマトリクスの外部にある画素の位置との空間距離は、必ず2以上となる。そして、図4に示すような補間関数を用いた場合、空間距離が2以上であれば、係数値は必ず0となる。したがって、ユニットマトリクスの外部にある画素の画素値は、補間データに全く影響を与えない。つまり、ユニットマトリクス内の画素値だけで全ての補間演算が完結する。
なお、ここではユニットマトリクスの例として縦4個×横4個のマトリクスを挙げているが、これに限定されない。例えば、縦3個×横3個あるいは縦2個×横2個のマトリクスであっても良い。後者の場合、ユニットマトリクスとデータ生成エリアとが一致する。このようにユニットマトリクスの設定範囲を変える場合、それに合わせて補間関数も変えるのが好ましい。
次に、クロックサイクルについて説明する。クロックサイクルは、水平方向に対するクロックサイクルccxと垂直方向に対するクロックサイクルccyとがある。図3は、このクロックサイクルccx,ccyを示したものである。図3において、●印は原画像の画素を示し、×印は画像を水平方向にsH倍、垂直方向にsV倍した場合(sH,sVは任意の正数である。図3はsH≠sV,1<sH<2,1<sV<2の例)の補間画像の画素を示す。また、原画像の4つの画素で囲まれる点線の矩形領域の1つ1つがデータ生成エリアを示している。
水平方向に画像をsH倍するということは、原画像の水平方向の画素間隔に対して1/sH倍の間隔で補間位置を設定し、その補間位置の画素値を補間演算により求めて、求めた補間位置の画素値を原画像と同じ元の画素間隔で描くことに相当する。1/sH倍の間隔で設定した補間位置の補間データを求めるというのは、言い換えると、基準クロックck0に対してsH倍周波数のクロックck1(=sH・ck0)の間隔でリサンプリングし、そのリサンプル点の補間データを求めることに相当する。
この場合、データ生成エリア内でのリサンプル点の水平方向の位置は、図3に示すように1クロックck1毎に1/sHの間隔でずれていく。そして、ck1の数クロック後には元の画素位置と一致する。図3の例の場合、データ生成エリア内でのリサンプル点の水平方向の位置は、補間画素が5つ離れたところ(原画像の画素では4つ離れたところ)で元の画素位置と一致する。
また、垂直方向に画像をsV倍するということは、原画像の垂直方向の画素間隔に対して1/sV倍の間隔で補間位置を設定し、その補間位置の画素値を補間演算により求めて、求めた補間位置の画素値を原画像と同じ元の画素間隔で描くことに相当する。1/sV倍の間隔で設定した補間位置の補間データを求めるというのは、言い換えると、基準クロックck0に対してsV倍周波数のクロックck1’(=sV・ck0)の間隔でリサンプリングし、そのリサンプル点の補間データを求めることに相当する。
この場合、データ生成エリア内でのリサンプル点の垂直方向の位置は、図3に示すように1クロックck1’毎に1/sVの間隔でずれていく。そして、ck1’の数クロック後には元の画素位置と一致する。図3の例の場合、データ生成エリア内でのリサンプル点の垂直方向の位置は、補間画素が5つ離れたところ(原画像の画素では3つ離れたところ)で元の画素位置と一致する。
データ生成エリア内でのリサンプル点の位置が元の画素位置と一致するまでの一巡のサイクル中に含まれるクロックck1,ck1’の数を、クロックサイクルと呼ぶ。図3の例の場合、水平方向に対するクロックサイクルccxも垂直方向に対するクロックサイクルccyも同じで、ccx=ccy=5である。なお、以下では説明の簡略化のため、水平方向の拡大/縮小率sHと、垂直方向の拡大/縮小率sVとが等しい(sH=sV=s、ck1=ck1’)ものとして説明する。
次に、第1の実施形態による画像拡大縮小装置の構成について説明する。図1に示すように、第1の実施形態による画像拡大縮小装置は、クロック生成部1、係数演算部2、関数ROM3、係数RAM4、マトリクス分解部5および係数乗算部6を備えて構成されている。
クロック生成部1は、基準クロックck0を入力するとともに、拡大/縮小後の水平画素数および垂直画素数のデータを入力して、s倍周波数のクロックck1を生成する。以下では、ck1をデータクロックと呼ぶ。拡大/縮小率sは、入力画像の元々の水平/垂直画素数と、クロック生成部1に入力される拡大/縮小後の水平/垂直画素数との比率で決まる。拡大/縮小率sそのものの情報をクロック生成部1に入力するようにしても良いが、拡大/縮小率sの値によっては、拡大/縮小後の水平/垂直画素数に半端が生じてその処理が複雑になる。よって、拡大/縮小後の水平/垂直画素数をクロック生成部1に入力し、それを拡大/縮小率sに換算するのが好ましい。
また、クロック生成部1は、2つの処理クロックcs1,cs2を生成する。第1の処理クロックcs1は、係数RAM4の読み出しアドレスに相当するクロックであり、第2の処理クロックcs2は、入力画像信号のディレイ量を制御するためのクロックである。これらの処理クロックcs1,cs2の詳細については後述する。
係数演算部2は、クロック生成部1により生成された拡大/縮小率sのデータおよびデータクロックck1と、関数ROM3に格納されている図4のような補間関数のデータとに基づいて、拡大/縮小率sに応じて設定されたそれぞれの補間位置毎に、各画素a〜pの画素値に対する16個の係数をそれぞれ算出する。ここで、係数演算部2は、原画像の領域全体について係数を算出する必要はなく、1つの水平方向クロックサイクルccxと1つの垂直方向クロックサイクルccyとで囲まれる1つの領域(以下、これをクロックサイクルエリアと呼ぶ)内においてのみ係数を求めれば良い。
すなわち、係数演算部2は、まず、クロックサイクルエリア内に存在する複数の補間位置を求める。そして、その求めた複数の補間位置毎に、ユニットマトリクスを構成する16個の画素a〜pの位置との空間距離をそれぞれ算出する。さらに、係数演算部2は関数ROM3を参照して、複数の補間位置毎に、各画素a〜pの位置との空間距離に応じた16個の係数値をそれぞれ求める。
関数ROM3は、図4のような補間関数のデータをあらかじめ格納しておくものである。補間関数のデータは、例えば、空間距離と係数値とを対応付けて記憶したテーブル情報により構成される。なお、ここでは係数演算部2が空間距離をもとに関数ROM3のテーブル情報を参照することにより、当該空間距離に対応付けられた係数値を読み出す構成としているが、これに限定されない。例えば、テーブル情報を有する関数ROM3を設けるのではなく、図4のような補間関数を表す式に空間距離をパラメータとして代入することにより、係数値を演算により求めるようにしても良い。
係数RAM4は、係数演算部2により求められた係数を格納するものである。画像の拡大/縮小率sの値をいくつか設定して係数演算部2により係数を求めることにより、様々な拡大/縮小率sの値に応じた係数をあらかじめ係数RAM4に格納しておくことが可能である。係数RAM4の容量は、処理画像1系統につき、水平方向のクロックサイクルccxと垂直方向のクロックサイクルccyとの積×16×2[ワード]となる。
例えば、拡大/縮小率sを0.5倍〜4倍までとし、その間を0.1倍刻みで設定すると、水平・垂直共にクロックサイクルの最大値が39となるので、R色・G色・B色の3系統の画像を拡大/縮小するために必要な係数RAM4の容量は、最大で392×16×6≒146キロワードとなる。また、拡大/縮小率sを0.2倍刻みで設定すると、水平・垂直共にクロックサイクルの最大値が19となるので、係数RAM4の容量は最大で192×16×6≒35キロワードとなる。また、拡大/縮小率sを0.5倍刻みで設定すると、水平・垂直共にクロックサイクルの最大値が7となるので、係数RAM4の容量は最大で72×16×6≒5キロワードとなる。何れにしても、容量は極めて小さくて済む。
なお、上述のように、係数演算部2は、1つの補間位置に対して、ユニットマトリクスを構成する16個の画素a〜pの位置との空間距離に応じた16個の係数値を求めて係数RAM4に格納するようにしたが、これに限定されない。16個の画素a〜pの中には、1つの補間位置から見た空間距離が同じものが複数存在することがある。補間位置との空間距離が同じどうしの画素に関しては、代表して1つのみ係数値を求めて係数RAM4に格納するようにしても良い。このようにすれば、係数RAM4の容量を更に小さくすることができる。
マトリクス分解部5は、入力画像信号からユニットマトリクスを構成する16個の画素a〜pの画素値を抽出する。このときマトリクス分解部5は、クロック生成部1から供給される第2の処理クロックcs2に基づいて、入力画像信号のディレイ量(データ生成エリアの移動量)を制御する。第2の処理クロックcs2は、基準クロックck0、画像の拡大/縮小率sおよびクロックサイクルccx,ccyを使用してクロック生成部1により生成される。
図3にて説明したように、1つのクロックサイクル内に含まれる補間位置の数は、画像の拡大/縮小率sに応じて異なる。また、拡大/縮小率sによっては、クロックサイクル内に含まれるデータ生成エリア毎に、その中に含まれる補間位置の数が異なることもある。図3に示した例では、水平方向のクロックサイクルccx内に含まれる4つのデータ生成エリアのうち、1つ目と4つ目のデータ生成エリアでは水平方向の補間位置が2つであるが、2つ目と3つ目のデータ生成エリアでは水平方向の補間位置が1つのみとなっている。
そこで、後述するように係数乗算部6において補間データを求める際に、1つ目と4つ目のデータ生成エリアでは補間データを2つずつ求め、2つ目と3つ目のデータ生成エリアでは補間データを1つずつ求める必要がある。すなわち、1つ目と4つ目のデータ生成エリアはデータクロックck1を2つカウントしたタイミングで水平方向に移動させ、2つ目と3つ目のデータ生成エリアはデータクロックck1を1つカウントしたタイミングで水平方向に移動させる必要がある。このようなデータ生成エリアの移動を制御するためのクロックが第2の処理クロックcs2である。
係数乗算部6は、マトリクス分解部5より出力されるユニットマトリクス内の各画素a〜pの画素値と、係数RAM4から読み出される係数値(各画素a〜pの各々に対する係数値)とをそれぞれ乗算し、それらの乗算結果を全て加算することによって1つの補間位置における補間データを生成する。この処理を、マトリクス分解部5によりユニットマトリクスを順次移動させながら、原画像に対する全ての補間位置について行う。本実施形態では、原画像の最上位ラインから最下位ラインに向けて1水平ラインずつ順番に補間データを求めていく。
ここで、係数RAM4からの係数値の読み出しは、クロック生成部1より出力される第1の処理クロックcs1に従って制御される。具体的には、1つの水平ラインについて処理が終わるまでの間は、水平方向クロックサイクルccxの周期で同じ係数を繰り返し係数RAM4から読み出す。すなわち、図3に示す水平方向クロックサイクルccx中に含まれる左から5つ分の補間位置に対する5組の係数(1組は16個の画素a〜pに対する係数値から成る)を係数RAM4から順に読み出した後は、再び同じ5組の係数を係数RAM4から順に読み出す。
1つの水平ライン分について処理が終わったら、補間ラインを垂直方向に1/sだけ移動させて、次の水平ラインに対する5組の係数を係数RAM4から順に読み出す。このときも、1つの水平ラインの処理が終わるまでの間は、水平方向クロックサイクルccxの周期で同じ5組の係数を繰り返し読み出す。以下同様に処理を繰り返していき、垂直方向クロックサイクルccyも一巡した段階で、係数RAM4に格納されている係数が一度全て読み出されたことになる。その後は、再び係数RAM4の先頭に戻って係数が同じように読み出されていく。
係数乗算部6は、以上のように係数RAM4から順次読み出される係数値と、マトリクス分解部5により移動量を制御しながら出力されるユニットマトリクス内の各画素a〜pの画素値とをそれぞれ乗加算することにより、各補間位置における補間データを生成する。そして、生成した複数の補間データを、原画像と同じ元の基準クロックck0の間隔で出力していく。
次に、上記のように構成した本実施形態による画像拡大縮小装置の動作を説明する。本実施形態の画像拡大縮小装置は、係数の生成・保存段階と、画像の拡大/縮小段階との2段階で動作する。係数の生成・保存段階では、クロック生成部1、係数演算部2、関数ROM3および係数RAM4を使用する。画像の拡大/縮小段階では、クロック生成部1、係数RAM4、マトリクス分解部5および係数乗算部6を使用する。
係数の生成・保存段階において、クロック生成部1は、基準クロックck0および拡大/縮小率sに基づいてデータクロックck1(=s・ck0)を生成して、係数演算部2に供給する。係数演算部2は、拡大/縮小率sと、データクロックck1と、関数ROM3に格納されている図4のような補間関数のデータとに基づいて、拡大/縮小率sに応じて設定されたそれぞれの補間位置毎に、各画素a〜pの画素値に対する複数の係数をそれぞれ算出する。そして、算出した複数の係数を係数RAM4に記憶して保存する。
このとき、まず原画像の最も左上の位置にユニットマトリクスを設定し、そのユニットマトリクスの中央に位置するデータ生成エリア内に複数の補間位置を求める。そして、その補間位置のそれぞれについて、当該ユニットマトリクスを構成する各画素a〜pの画素値に対する16個の係数をそれぞれ算出する。
次に、ユニットマトリクスを水平方向に1画素分移動させ、移動後のユニットマトリクス内のデータ生成エリアについても同様に係数を算出する。以下同様にしてユニットマトリクスを水平方向に1画素ずつ移動して係数を算出していく。そして、1つの水平方向クロックサイクルccx分の処理が終わったら、ユニットマトリクスを次の水平ラインの最も左に設定する。
次の水平ラインについても、最初の水平ラインと同様の処理を行う。以下同様にしてこのような処理を繰り返し行い、1つの垂直方向クロックサイクルccy分まで処理が終わったら、係数の生成が完了する。係数演算部2は、以上のような処理の過程で得られた複数の係数を順次係数RAM4に格納していく。
また、画像の拡大/縮小段階において、クロック生成部1は、基準クロックck0および拡大/縮小率sに基づいて処理クロックcs1,cs2を生成し、第1の処理クロックcs1を係数RAM4に、第2の処理クロックcs2をマトリクス分解部5に供給する。
マトリクス分解部5は、入力画像信号からユニットマトリクスを構成する16個の画素a〜pの画素値を抽出する。このときマトリクス分解部5は、原画像の最も左上の位置から最も右下の位置に向かって、ユニットマトリクスを1水平ラインずつ順に設定していく。このときマトリクス分解部5は、第2の処理クロックcs2に従って、ユニットマトリクスの水平方向および垂直方向の移動量を適切に制御する。
係数乗算部6は、マトリクス分解部5により設定されたユニットマトリクス内のデータ生成エリアに存在する1以上の補間位置における補間データを順次求める。1つの補間位置における補間データは、ユニットマトリクスを構成する16個の画素a〜pの画素値と、それらの各画素a〜pに対して係数RAM4から読み出される16個の係数値とをそれぞれ乗算し、それらの乗算結果を全て加算することによって生成する。
マトリクス分解部5および係数乗算部6の動作をもう少し具体的に説明する。まず、マトリクス分解部5は、原画像の最も左上の位置にユニットマトリクスを設定し、各画素a〜pの画素値を抽出する。また、係数乗算部6は、そのユニットマトリクスのデータ生成エリア内に補間位置を求める。そして、その補間位置について、当該補間位置に対する係数を係数RAM4から読み出して、この読み出した係数値とユニットマトリクスの各画素a〜pの画素値とを積和演算することにより、補間データを生成する。
次に、ユニットマトリクスを水平方向に1画素分移動させ、同様に補間データを求める。このように係数乗算部6は、1番目の補間ラインに関する複数の補間データを順次生成する。このときマトリクス分解部5は、第2の処理クロックcs2に従って、ユニットマトリクスの水平方向に対する移動量を適切に制御する。また、係数乗算部6は、各補間位置に対応する係数を、第1の処理クロックcs1に従って水平方向クロックサイクルccxの周期で係数RAM4から繰り返し読み出す。
1水平ライン分の処理が終了したら、マトリクス分解部5は、ユニットマトリクスの位置を水平ライン上の先頭(最も左の位置)に戻す。このとき、マトリクス分解部5は、第2の処理クロックcs2に従って、ユニットマトリクスの垂直方向に対する移動量を適切に制御する。例えば図3の例の場合、2番目の補間ラインは、1番目の補間ラインと同じデータ生成エリア内に存在するので、ユニットマトリクスは垂直方向に移動させない。つまり、1番目の補間ラインを処理したときと同じデータ生成エリアを2番目の補間ラインでも使用する。
ここで、1水平ライン分の処理の終了とは、例えば、原画像の最も右の位置にユニットマトリクスを設定して補間データの生成が終わったタイミングとすることができる。また、原画像の左上の位置を基準として画像の拡大/縮小を行うのであれば、画像を拡大するときには、原画像の水平方向の画素数と同じ数の補間データを求めた段階で、1水平ライン分の処理の終了としても良い。後者の場合は、原画像の最も右の位置までユニットマトリクスを設定することなく、1水平ライン分の処理が終了する。
そして、係数乗算部6は、今度は2番目の補間ラインの補間位置に対する係数を係数RAM4から順に読み出して、この読み出した係数値とユニットマトリクスの各画素a〜pの画素値とを積和演算することにより、2番目の補間ラインに関する複数の補間データを生成する。このときもマトリクス分解部5は、第2の処理クロックcs2に従って、ユニットマトリクスの水平方向に対する移動量を適切に制御する。また、係数乗算部6は、各補間位置に対応する係数を、第1の処理クロックcs1に従って水平方向クロックサイクルccxの周期で係数RAM4から繰り返し読み出す。
以下、3番目以降の補間ラインについても同様にして処理を進めていく。このとき係数乗算部6は、各補間位置に対応する係数を、第1の処理クロックcs1に従って、水平方向には水平方向クロックサイクルccxの周期で係数RAM4から繰り返し読み出し、垂直方向には垂直方向クロックサイクルccyの周期で係数RAM4から繰り返し読み出す。
そして、例えば原画像の最も右下の位置にユニットマトリクスを設定して補間データの生成が終わったタイミングで、全ての補間データの生成が終了する。また、原画像の左上の位置を基準として画像の拡大/縮小を行うのであれば、画像を拡大するときには、原画像の垂直方向の画素数と同じ数の補間データを垂直方向に求めた段階で補間データの生成を終了としても良い。後者の場合は、原画像の最も下の位置までユニットマトリクスを設定することなく、処理が終了する。
なお、原画像の全体を対象として拡大/縮小画像を求める前者の方法の場合は、拡大画像であれば、拡大画像中の任意の位置を切り出して画面上に出力することが可能となる。ただし、この場合には、拡大された画像データを格納するための出力バッファが必要になる。一方、原画像の画素数と同じ数の補間データのみを求める後者の方法の場合は、画面上に出力されない無駄な画素位置の補間データは求めなくて済むので、拡大/縮小処理をより高速化することができる。また、出力バッファも不要である。
係数乗算部6は、以上のようにして求めた複数の補間データを、原画像と同じ元の基準クロックck0の間隔で出力する。このとき、原画像の全領域について補間データを求めて出力バッファに格納し、任意の領域を切り出して出力する方法を採用するときは、切り出し領域内の補間データを基準クロックck0の間隔で順次出力する。一方、原画像の左上の位置を基準として原画像の画素数と同じ数の補間データのみを求めて出力する方法を採用するときは、係数乗算部6により生成される補間データをその順番のまま基準クロックck0の間隔で出力していけば良い。
以上詳しく説明したように、第1の実施形態によれば、補間演算によって補間データを求めるのに必要な係数をあらかじめ係数RAM4に格納しておき、実際の補間演算の際にはそれを係数RAM4から読み出すだけで使用することができるので、補間演算の際に係数を算出する必要がなく、補間処理を高速化することができる。また、補間処理を行うために大きな画像メモリを用いる必要をなくすことができる。特に、原画像の画素数と同じ数だけ補間データを求める方法を採用する場合には、係数乗算部6により生成される補間データをその順番のまま基準クロックck0の間隔で出力していけば良いので、リアルタイム処理が可能であり、出力バッファも不要である。
なお、上記実施形態では、画像の拡大/縮小段階において、原画像の上端から下端に向かって水平方向の1ラインずつ順番に補間データを求めていく例について説明したが、これに限定されない。例えば、原画像の左端から右端に向かって垂直方向の1ラインずつ順番に補間データを求めていくようにしても良い。また、個々のデータ生成エリア毎に水平方向および垂直方向の補間データを順番に求めていくようにしても良い。
(第2の実施形態)
次に、本発明の第2の実施形態を図面に基づいて説明する。図5は、第2の実施形態による画像拡大縮小装置の構成例を示す図である。なお、この図5において、図1に示した符号と同一の符号を付したものは同一の機能を有するものであるので、ここでは重複する説明を省略する。図5に示すように、第2の実施形態による画像拡大縮小装置は、クロック生成部11、マトリクス分解部12、D型フリップフロップ13,14、係数演算部2、関数ROM3、係数RAM4および係数乗算部6を備えて構成されている。
クロック生成部11は、基準クロックck0を入力するとともに、拡大/縮小後の水平/垂直画素数のデータを入力して、s倍周波数のデータクロックck1と、その立ち上りタイミングを微調整した調整データクロックck1dと、データクロックck1の位相を反転した反転データクロックck1バーとを生成する。なお、ここでも説明の簡略化のため、水平方向の拡大/縮小率sHおよび垂直方向の拡大/縮小率sVは等しく共にsであるとする。
マトリクス分解部12は、入力画像信号からユニットマトリクスを構成する16個の画素a〜pの画素値を抽出する。このときマトリクス分解部12は、クロック生成部11から供給される基準クロックck0に基づいて、当該基準クロックck0のタイミングに従って各画素a〜pの画素値を出力する。第2の実施形態によるマトリクス分解部12は、第1の実施形態のように第2の処理クロックcs2によりデータ生成エリアの移動が不規則に制御されることはなく、基準クロックck0の周期で設定したユニットマトリクスを構成する各画素a〜pの画素値をそのまま出力する単純な構成となっている。
1段目のD型フリップフロップ13は、マトリクス分解部12より出力される各画素a〜pの画素値を、クロック生成部11より供給される調整データクロックck1dに従っていったん保持し、当該調整データクロックck1dのタイミングに従って出力する。また、2段目のD型フリップフロップ14は、1段目のD型フリップフロップ13より出力される各画素a〜pの画素値を、クロック生成部11より供給される反転データクロックck1バーに従っていったん保持し、当該反転データクロックck1バーのタイミングに従って出力する。
図6は、上記クロック生成部11、マトリクス分解部12およびD型フリップフロップ13,14の詳細な構成例を示す図である。図6に示すように、クロック生成部11は、バッファ11a,11b、PLL(Phase Locked Loop)回路11c、調整回路11dおよびANDゲート11e,11f,11gを備えている。
クロック生成部11は、外部より入力される基準クロックck0を、2つのバッファ11a,11bを通してマトリクス分解部12に出力する。PLL回路11cは、1つ目のバッファ11aより出力される基準クロックck0と拡大/縮小率sのデータとを入力し、基準クロックck0からs倍周波数のデータクロックck1を生成する。生成されたデータクロックck1は、調整回路11dに供給される。調整回路11dは、3つのANDゲート11e〜11gと協働して、データクロックck1のタイミングを微調整した調整データクロックck1dと、データクロックck1の位相を反転した反転データクロックck1バーとを生成する。その詳細については後述する。
マトリクス分解部12は、13個のディレイ用のD型フリップフロップ12a−1〜12a−13と、原画像の1水平ライン分より4画素分だけ容量の小さいディレイ用の3個のラインメモリ12b−1〜12b−3とを備えて構成されている。ディレイ用のD型フリップフロップ12a−1〜12a−13およびラインメモリ12b−1〜12b−3は、入力される画像信号を基準クロックck0に従って順次遅延させ、各々の出力タップから各画素a〜pの画素値を取り出して、1段目のバッファリング用D型フリップフロップ13に供給する。
1段目のバッファリング用D型フリップフロップ13は、4組(1組は4個)のD型フリップフロップ13−1〜13−4を備えて構成されている。そして、マトリクス分解部12より出力される各画素a〜pの画素値を調整データクロックck1dに従っていったん保持し、当該調整データクロックck1dのタイミングに従って2段目のバッファリング用D型フリップフロップ14に出力する。
また、2段目のバッファリング用D型フリップフロップ14は、4組のD型フリップフロップ14−1〜14−4を備えて構成されている。これらのD型フリップフロップ14−1〜14−4は、その前段にある4組のD型フリップフロップ13−1〜13−4より出力される各画素a〜pの画素値を反転データクロックck1バーに従っていったん保持し、当該反転データクロックck1バーのタイミングに従って係数乗算部6に出力する。
図7は、上述した各データクロックck1d,ck1バーに基づく画像信号の取り込みタイミングを示す図である。なお、図7(a)は画像を拡大する場合の例を示し、図7(b)は画像を縮小する場合の例を示している。
上述のように、マトリクス分解部12のディレイ用のD型フリップフロップ12a−1〜12a−13およびラインメモリ12b−1〜12b−3は、基準クロックck0に従って元信号の画素値を保持する。これに対して、バッファリング用のD型フリップフロップ13−1〜13−4では、s倍周波数のクロックに従って画素値をオーバーサンプリングする。ただし、単純にs倍周波数のデータクロックck1に従って画素値を保持した場合、そのデータクロックck1の立ち上りタイミングが基準クロックck0の切り替わりタイミングの近傍にあると、元信号が切り替わっている最中であり、データをうまくサンプリングできない可能性がある。
そこで、調整回路11dおよびANDゲート11e〜11gを用いて、基準クロックck0の切り替わり(立ち上り)のタイミングでは絶対に立ち上がることのない調整データクロックck1dをデータクロックck1から生成することにより、データを確実にサンプリングできるようにする。
すなわち、調整回路11dは、データクロックck1に対して位相が所定量Δだけ進んだクロックck11および位相が所定量Δだけ遅れたクロックck12を発生する。ここで、所定量Δとしては、少なくとも基準クロックck0の立ち上りに要する時間が必要で、かつそれに近い時間であることが好ましい。
また、調整回路11dは、データクロックck1の立ち上りタイミングが、基準クロックck0の立ち上りから立ち下りの間のちょうど真中のタイミング(以下、中央タイミングと呼ぶ)に比べて位相が進んでいるか遅れているかを判定し、その判定結果に応じて位相進み信号Φ+または位相遅れ信号Φ−を出力する。
第1のANDゲート11eは、データクロックck1に対して位相が所定量Δだけ進んだクロックck11と位相遅れ信号Φ−との論理積をとって出力する。また、第2のANDゲート11fは、データクロックck1に対して位相が所定量Δだけ遅れたクロックck12と位相進み信号Φ+との論理積をとって出力する。また、第3のANDゲート11gは、第1のANDゲート11eの出力と第2のANDゲート11fの出力との論理積をとって出力する。
これにより、データクロックck1の位相が基準クロックck0の中央タイミングより進んでいるときは、当該データクロックck1の立ち上りタイミングより所定量Δだけ遅れたクロックが第3のANDゲート11gより出力される。逆に、データクロックck1の位相が基準クロックck0の中央タイミングより遅れているときは、当該データクロックck1の立ち上りタイミングより所定量Δだけ進んだクロックが第3のANDゲート11gより出力される。これが調整データクロックck1dである。
また、調整回路11dは、PLL回路11cより供給されるデータクロックck1を用いて、当該データクロックck1と周期が同じで、データクロックck1に対して位相が半周期ずれた反転データクロックck1バーを生成する。上述のように、調整データクロックck1dは、データクロックck1に対して位相がΔだけ進んでいるところと遅れているところが存在し、その周期は一定でない。したがって、このような調整データクロックck1dに従ってD型フリップフロップ13−1〜13−4にバッファリングされた画素値をそのままのタイミングで係数乗算部6に供給することはできない。
そこで、D型フリップフロップ13−1〜13−4の後段に更にバッファリング用のD型フリップフロップ14−1〜14−4を設け、一定周期の反転データクロックck1バーに従って各画素a〜pの画素値をサンプリングし直して係数乗算部6に供給する。なお、ここでは反転データクロックck1バーを用いているが、これに限定されない。すなわち、一定周期で、調整データクロックck1dの切り替わりと異なるタイミングで立ち上がるクロックであれば良い。
以上詳しく説明したように、第2の実施形態によれば、入力画像信号がマトリクス分解部12およびD型フリップフロップ13,14を通過することにより、ユニットマトリクスを構成する各画素a〜pの画素値が、拡大/縮小率sに応じたs倍周波数の反転データクロックck1バーに従ってs倍にオーバーサンプリングされて出力される。
これにより、第1の実施形態のように第2の処理クロックcs2によって入力画像信号(データ生成エリア)の移動量を複雑に制御する必要がなくなる。また、移動量制御のためにマトリクス分解部12の入力側にバッファ用の画像メモリを用意する必要がなく、回路規模をより小さくすることができる。さらに、移動量制御のためのバッファリングが不要なので、拡大/縮小処理の動作をより高速化することができる。
(第3の実施形態)
次に、本発明による第3の実施形態を図面に基づいて説明する。第3の実施形態は、上記第2の実施形態による画像拡大縮小装置をNTSC−ハイビジョン方式変換(NTSC方式の画像をハイビジョン方式にアップサンプリングする装置)に応用した場合の例を示すものである。
図8は、第3の実施形態による画像拡大縮小装置の構成例を示す図である。ここでは、NTSCとハイビジョンは共にインターレース走査でフィールド周波数が同じ場合を考える。一般的には、インターレース走査を順次走査に変換してから方式変換を行い、インターレース走査に戻す。図8に示す構成は、順次走査入力を順次走査出力に変換する回路である。なお、図8において、図5および図6に示した構成要素と同一の機能を有する構成要素には同一の符号を付している。
ここで、NTSCとハイビジョンの有効走査線数の比は480:1080、有効画素数の比は720:1920である。なお、ハイビジョンの画面で変換した水平振幅を100%とすると、垂直幅の上下端は表示外となる。この場合、有効画素数の比は720:1440となる。また、NTSCの場合は画素が正方画素でなく1.125:1なので、有効画素数の比は720:1620になる。したがって、NTSC方式からハイビジョン方式への拡大率は、水平拡大率sH=1620/720=2.25、垂直拡大率sV=1080/480=2.25となる。
図8において、3Hディレイライン12,12’,12”は、それぞれ図6に示した13個のディレイ用のD型フリップフロップ12a−1〜12a−13および3個のラインメモリ12b−1〜12b−3に相当する。また、D型フリップフロップ13,13’,13”は、それぞれ図6に示した4組のD型フリップフロップ13−1〜13−4に相当する。また、D型フリップフロップ14,14’,14”は、それぞれ図6に示した4組のD型フリップフロップ14−1〜14−4に相当する。また、係数乗算部6,6’,6”は、それぞれ図5に示した係数乗算部6に相当する。
クロック生成部11’は、図6に示したクロック生成部11と同様にデータクロックck1、調整データクロックck1dおよび反転データクロックck1バーを生成するが、これに加えて、互いに位相が所定量ずつ遅れた複数(例えば4個)のパイプライン用クロックcp1〜cp4も生成する。図9は、このパイプライン用クロックcp1〜cp4のタイミングを示す図である。図9に示すように、これら4個のパイプライン用クロックcp1〜cp4によってパイプライン処理の1サイクルが形成される。
図10は、図8に示した係数乗算部6の構成例を示す図である。図10において、四角で示したブロックはディレイ用のD型フリップフロップ、丸囲みの×印で示したブロックは係数器、丸囲みの+印で示したブロックは加算器である。CTRはカウンタ、台形で示したブロックはセレクタである。図10の構成では、入力される各画素a〜pの画素値と係数RAM4から読み出される係数値ha〜hpとの積和演算をパイプライン処理で行うことで、より高速なリアルタイム動作を実現している。
なお、画像拡大縮小装置を図8のように構成し、その中の係数乗算部6を図10のように構成した場合、拡大/縮小率sが1.5以下の範囲では折り返しノイズの影響が出てくる。この場合は、与えられた拡大/縮小率sをn倍にして画像の拡大/縮小処理を行い、最後に1/n間引き処理を行うことによって1.5倍以下の範囲へ変換すると良い。例えば、拡大/縮小率sが1.2倍の場合、この2倍の拡大率(s=2.4)で画像を拡大し、その拡大画像を1/2倍に間引き処理すれば良い。このようにすれば、折り返しノイズの影響を軽減することができる。
ここで、n=2とすると、拡大/縮小率sが0.75以下の場合には対応できない。これに対して、nの値を大きくすると、動作クロックとして要求されるクロック周波数が非常に大きなものとなってしまう。また、水平方向の拡大/縮小率sHおよび垂直方向の拡大/縮小率sVを共にn倍すれば効果的であるが、水平方向および垂直方向の両方とも間引き処理を行う必要があるので、間引き回路が複雑になってしまう。
これらの問題を回避するために、次のようにするのが好ましい。すなわち、水平方向の拡大/縮小率sHのみをn倍するようにし、その倍率nを、拡大/縮小率sHの値に応じて最適化する。倍率nの値を2のべき乗にすれば処理が簡単になるので、n=2,4,8,16のようにするのが好ましい。例えば、sH<0.4のときはn=16、0.5≦sH<0.6のときはn=8、0.7≦sH<0.9のときはn=4、sH≧1.0のときはn=2とする。
なお、垂直方向ではなく、水平方向の拡大/縮小率sHを10倍にして画像の拡大/縮小処理を行い、最後に水平方向の1/10間引き処理を行うのは、垂直方向の間引き処理に比べて、水平方向の間引き処理の方が、処理が簡単だからである。垂直方向の拡大/縮小率sHを10倍にして画像の拡大/縮小処理を行い、その後で垂直方向の1/10間引き処理を行うことも可能ではある。
(第4の実施形態)
次に、本発明による第4の実施形態を図面に基づいて説明する。第4の実施形態は、上記第2の実施形態による画像拡大縮小装置を動画の拡大/縮小に応用した場合の例を示すものである。動画の拡大/縮小処理の場合、スペクトルの重なりにより折り返しノイズが発生する可能性がある。この折り返しノイズの発生を抑止するため、動画の拡大/縮小処理に関しては、以下に述べるような工夫を加える。
工夫1:拡大/縮小率を小数点以下1桁とする。拡大/縮小処理を行うときは、与えられた拡大/縮小率を10倍にして画像の拡大/縮小処理を行い、最終出力信号に対して1/10間引き処理を行う。ただし、このようにすると、使用するクロック周波数は非常に大きなものが要求されることになる。例えば、拡大/縮小率の最大値を4.0とすると、入力画像信号のサンプリング周波数が13.5MHzのときは所要クロック周波数がGHz帯となり(4×13.5M×102=5.4GHz)、現実的でない。この解決策として、次の工夫2を加える。
工夫2:拡大/縮小処理を、垂直方向の拡大/縮小と水平方向の拡大/縮小との2段階に分けて行う。このとき、垂直方向→水平方向の順に処理する。そして、垂直方向および水平方向の各処理の中で、拡大/縮小率sV,sHを各々10倍にして画像の拡大/縮小処理を行い、その後で1/10間引き処理を行う。この場合、所要クロック周波数は、水平方向の拡大/縮小率sHまたは垂直方向の拡大/縮小率sVの10倍で済む。拡大/縮小率の最大値が4.0の場合、所要クロック周波数は4×13.5M×10=540MHzで良い。
図11は、上述の工夫1および工夫2を加えた動画用の画像拡大縮小装置の構成例を示す図である。図11において、符号でハイフン(−)の後にVの文字が付けられた構成要素は垂直方向の拡大/縮小処理のためのものであり、符号でハイフン(−)の後にHの文字が付けられた構成要素は水平方向の拡大/縮小処理のためのものである。
マトリクス分解部12−V,12−Hは、図6のマトリクス分解部12と同様に構成されている。なお、ここでは図示していないが、マトリクス分解部12−V,12−Hの後段に、図6に示したバッファリング用のD型フリップフロップ13,14を設けるのが好ましい。ローパスフィルタ(LPF)21−V,22−V,23−H,24−Hは、折り返しノイズの抑止効果を高めるために挿入されているものである。
垂直方向のオーバーサンプル回路25−Vは、ユニットマトリクスを構成する16個の画素a〜pの画素値を10倍にオーバーサンプリングするものである。すなわち、オーバーサンプル回路25−VはD型フリップフロップで構成されている。そして、マトリクス分解部12−Vにより抽出されLPF21−Vを通過した各画素a〜pの画素値が、垂直方向の拡大/縮小率sVに応じて生成されたデータクロックck2(=ck0・sV・10=10ck1’)に従ってD型フリップフロップにいったん保持され、当該10倍周波数のデータクロックck2のタイミングに従って出力される。
水平方向のオーバーサンプル回路26−Hは、ユニットマトリクスを構成する16個の画素a〜pの画素値を10倍にオーバーサンプリングするものである。すなわち、オーバーサンプル回路26−HはD型フリップフロップで構成されている。そして、マトリクス分解部12−Hにより抽出されLPF23−Hを通過した各画素a〜pの画素値が、水平方向の拡大/縮小率sHに応じて生成されたデータクロックck3(=ck1’・sH・10)に従ってD型フリップフロップにいったん保持され、当該10倍周波数のデータクロックck3のタイミングに従って出力される。
拡大/縮小率sH,sVが小数点以下1桁の値に制限される場合、これを10倍すれば整数となる。したがって、オーバーサンプル回路25−V,26−Hによるオーバーサンプリングは、オーバーサンプルのデータクロックck2,ck3の位相をわずかに遅らせるだけで正確に行うことができる。また、オーバーサンプル回路25−V,26−Hの構成は、上述のように、入力される各画素a〜pの画素値をデータクロックck2,ck3に従ってD型フリップフロップにて保持するだけの構成で良い。
垂直方向用の係数RAM4−Vは、垂直方向の拡大/縮小を行うのに必要な係数値を記憶している。また、水平方向用の係数RAM4−Hは、垂直方向の拡大/縮小を行うのに必要な係数値を記憶している。これら2つの係数RAM4−V,4−Hに記憶されている係数値を合わせると、図5の係数RAM4に記憶されている係数値と同様となる。
垂直方向係数乗算部6−Vは、垂直方向オーバーサンプル回路25−Vより出力される各画素a〜pの画素値と、垂直方向係数RAM4−Vから読み出される係数値とをそれぞれ乗算し、それらの乗算結果を全て加算することによって垂直方向の1つの補間位置における補間データを生成する。この補間データの生成処理に、3種類のデータクロックck1’,ck2,ck5を使用する。
また、水平方向係数乗算部6−Hは、水平方向オーバーサンプル回路26−Hより出力される各画素a〜pの画素値と、水平方向係数RAM4−Hから読み出される係数値とをそれぞれ乗算し、それらの乗算結果を全て加算することによって水平方向の1つの補間位置における補間データを生成する。この補間データの生成処理には、1種類のデータクロックck4(=ck0・sV・sH=ck3/10)を使用する。
図12は、垂直方向係数乗算部6−Vの構成例を示す図である。図13は、この垂直方向係数乗算部6−Vにて使用するデータクロックck1’,ck2,ck5を示すタイミングチャートである。また、図14は、水平方向係数乗算部6−Hの構成例を示す図である。図13に示すように、データクロックck5は、データクロックck1’でカウントされる10水平ライン分を1つのサイクルとして、当該サイクル中の最初の1水平ライン期間中においてのみデータクロックck2が有効となっているようなクロックである。
図12および図14において、四角で示したブロックはディレイ用のD型フリップフロップ、丸囲みの×印で示したブロックは係数器、丸囲みの+印で示したブロックは加算器である。CTRはカウンタ、台形で示したブロックはセレクタである。図12および図14の構成においても、図10に示した構成と同様に、パイプライン用クロックcp1〜cp4に従って、入力画素a〜pの画素値と係数RAM4から読み出される係数値ha〜hpとの積和演算をパイプライン処理で行うことによって、より高速なリアルタイム動作を実現している。
また、図12に示すように、垂直方向係数乗算部6−Vでは、図13に示すようなデータクロックck5を用いてパイプライン処理しているので、乗加算のパイプライン処理と垂直方向に対する1/10の間引き処理とを同時に行うことができる。また、図14に示すように、水平方向係数乗算部6−Hは、その前段にある水平方向オーバーサンプル回路26−Hの動作クロックck3の1/10倍の周波数の動作クロックck4に従って動作するので、乗加算のパイプライン処理と水平方向に対する1/10の間引き処理とを同時に行うことができる。
以上に説明した第1〜第4の実施形態による画像拡大縮小装置は、これをハードウェア構成によって実現する例について示しているが、DSP(Digital Signal Processor)やソフトウェアの何れによっても実現することが可能である。例えばソフトウェアによって実現する場合、上記実施形態の画像拡大縮小装置は、実際にはコンピュータのCPUあるいはMPU、RAM、ROMなどを備えて構成され、RAMやROMに記憶されたプログラムが動作することによって実現できる。
したがって、コンピュータが上記実施形態の機能を果たすように動作させるプログラムを例えばCD−ROMのような記録媒体に記録し、コンピュータに読み込ませることによって実現できるものである。上記プログラムを記録する記録媒体としては、CD−ROM以外に、フレキシブルディスク、ハードディスク、磁気テープ、光ディスク、光磁気ディスク、DVD、不揮発性メモリカード等を用いることができる。また、上記プログラムをインターネット等のネットワークを介してコンピュータにダウンロードすることによっても実現できる。
なお、上記第1〜第4の実施形態では、係数をあらかじめ記憶しておくメモリとしてRAMを用いているが、これに限定されない。例えば、ROMを使用しても良い。
また、上記第1〜第4の実施形態では、補間関数の例として図4のような関数を挙げたが、これに限定されない。例えば、補間位置と元の画素位置との空間距離が0のときは係数値が1で、当該空間距離が1のときに係数値が0に収束するような関数(空間距離が0より大きく1より小さいときは係数値が正の値となるように設定されている)としても良い。また、補間位置と元の画素位置との空間距離が0のときは係数値が1で、当該空間距離が2のときに係数値が0に収束するような関数(空間距離が0より大きく2より小さいときは係数値が正の値となるように設定されている)としても良い。
また、上記第1および第2の実施形態では、係数演算部2および関数ROM3も含めて画像拡大縮小装置を構成しているが、これは別装置としても良い。すなわち、係数をあらかじめ演算しておくための係数演算装置と、当該係数演算装置によりあらかじめ求められた係数を用いて画像の拡大/縮小を行う画像拡大縮小装置とを別の装置として構成しても良い。
この場合、係数演算装置は、例えば図1のクロック生成部1、係数演算部2および関数ROM3を含み、画像拡大縮小装置はクロック生成部1、係数RAM4、マトリクス分解部5および係数乗算部6を含む。ちなみに、第3および第4の実施形態は、係数演算装置を別体とし、当該係数演算装置によりあらかじめ求められた係数を用いて画像の拡大/縮小を行う画像拡大縮小装置としての構成を示している。
その他、上記第1〜第4の実施形態は、何れも本発明を実施するにあたっての具体化の一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその精神、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
本発明は、デジタル画像の拡大/縮小を行う装置に有用である。本発明の画像拡大縮小装置は、静止画および動画の拡大/縮小に適用することが可能である。
Claims (6)
- 2次元空間上に等間隔に配置された複数の画素によって構成される原画像について、所定の倍率に応じた補間位置における各画素の画素値を上記補間位置の周囲にある上記原画像の画素値から補間演算によって求めることによって画像の拡大/縮小を行う画像拡大縮小装置であって、
上記所定の倍率に応じて設定されるそれぞれの補間位置毎に、所定の補間関数に基づいて、上記補間位置の周囲にある上記原画像の各画素の画素値に対する係数をそれぞれ求める係数演算部と、
上記係数演算部により求められた係数を格納する係数メモリと、
上記補間位置の周囲にある上記原画像の各画素の画素値を抽出するマトリクス分解部と、
上記マトリクス分解部より出力される上記原画像の各画素の画素値と、上記係数メモリから読み出される係数とを乗加算することによって上記補間位置における各画素の画素値を求める係数乗算部とを備えたことを特徴とする画像拡大縮小装置。 - 上記原画像の画素間隔に相当する基準クロックおよび上記所定の倍率に基づいて、上記係数メモリの読み出しアドレスに相当する第1の処理クロックおよび、上記マトリクス分解部に対する入力画像信号のディレイ量を制御するための第2の処理クロックを生成するクロック生成部を備え、
上記係数乗算部は、上記第2の処理クロックに従って上記マトリクス分解部より出力される上記原画像の各画素の画素値と、上記第1の処理クロックに従って上記係数メモリから読み出される係数とを乗加算することによって上記補間位置における各画素の画素値を求めるように成され、
上記マトリクス分解部は、上記補間位置の周囲にある上記原画像の各画素の画素値を抽出し、抽出した画素値を上記第2の処理クロックに基づきディレイさせて出力するように成されていることを特徴とする請求の範囲第1項に記載の画像拡大縮小装置。 - 上記原画像の画素間隔に相当する基準クロックおよび上記所定の倍率に基づいて、上記基準クロックの所定倍の周波数から成るデータクロックを生成するクロック生成部を備え、
上記マトリクス分解部は、上記補間位置の周囲にある上記原画像の各画素の画素値を上記データクロックに従ってサンプリングして抽出することを特徴とする請求の範囲第1項に記載の画像拡大縮小装置。 - 上記クロック生成部は、上記データクロックに対して位相が所定量だけずらされた調整データクロックと、上記データクロックに対して位相が反転した反転データクロックとを更に生成し、
上記マトリクス分解部は、上記補間位置の周囲にある上記原画像の各画素の画素値を上記データクロックの代わりに上記調整データクロックに従ってサンプリングした後、上記反転データクロックに従ってサンプリングし直して抽出することを特徴とする請求の範囲第3項に記載の画像拡大縮小装置。 - 上記係数演算部は、上記原画像の互いに隣接する4つの画素で囲まれる矩形のデータ生成エリア内における上記補間位置が変化していって元の同じ位置に戻るまでのクロックサイクルの範囲を対象として上記係数を求め、求めた係数を上記係数メモリに記憶することを特徴とする請求の範囲第1項〜第4項の何れか1項に記載の画像拡大縮小装置。
- 2次元空間上に等間隔に配置された複数の画素によって構成される原画像について、所定の倍率に応じた補間位置における各画素の画素値を上記補間位置の周囲にある上記原画像の画素値から補間演算によって求めることによって画像の拡大/縮小を行う画像拡大縮小装置であって、
上記所定の倍率に応じたそれぞれの補間位置毎に設定された係数であって、上記補間位置の周囲にある上記原画像の各画素の画素値に対する係数を格納する係数メモリと、
上記補間位置の周囲にある上記原画像の各画素の画素値を抽出するマトリクス分解部と、
上記マトリクス分解部より出力される上記原画像の各画素の画素値と、上記係数メモリから読み出される係数とを乗加算することによって上記補間位置における各画素の画素値を求める係数乗算部とを備えたことを特徴とする画像拡大縮小装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006060973 | 2006-03-07 | ||
JP2006060973 | 2006-03-07 | ||
PCT/JP2006/319907 WO2007102244A1 (ja) | 2006-03-07 | 2006-09-28 | 画像拡大縮小装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPWO2007102244A1 true JPWO2007102244A1 (ja) | 2009-07-23 |
Family
ID=38474689
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008503741A Pending JPWO2007102244A1 (ja) | 2006-03-07 | 2006-09-28 | 画像拡大縮小装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20090091585A1 (ja) |
JP (1) | JPWO2007102244A1 (ja) |
TW (1) | TW200737039A (ja) |
WO (1) | WO2007102244A1 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4693895B2 (ja) * | 2008-12-05 | 2011-06-01 | 独立行政法人科学技術振興機構 | 画像処理装置および方法 |
JP5643576B2 (ja) | 2010-08-30 | 2014-12-17 | キヤノン株式会社 | 画像処理装置およびその制御方法 |
JP2012089947A (ja) * | 2010-10-15 | 2012-05-10 | Sharp Corp | 画像縮小装置 |
JP2015079078A (ja) * | 2013-10-16 | 2015-04-23 | セイコーエプソン株式会社 | 表示制御装置及び方法、半導体集積回路装置、並びに、表示装置 |
KR102214028B1 (ko) | 2014-09-22 | 2021-02-09 | 삼성전자주식회사 | 가변구조형 스케일러를 포함하는 애플리케이션 프로세서와 이를 포함하는 장치들 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01272377A (ja) * | 1988-04-25 | 1989-10-31 | Mitsubishi Electric Corp | 画像縮小方法 |
JP2707609B2 (ja) * | 1988-06-24 | 1998-02-04 | ソニー株式会社 | メモリ装置 |
US6215467B1 (en) * | 1995-04-27 | 2001-04-10 | Canon Kabushiki Kaisha | Display control apparatus and method and display apparatus |
JP2006251861A (ja) * | 2005-03-08 | 2006-09-21 | Seiko Epson Corp | 画像処理装置、画像処理方法、表示コントローラ及び電子機器 |
-
2006
- 2006-09-28 WO PCT/JP2006/319907 patent/WO2007102244A1/ja active Application Filing
- 2006-09-28 US US12/281,792 patent/US20090091585A1/en not_active Abandoned
- 2006-09-28 JP JP2008503741A patent/JPWO2007102244A1/ja active Pending
- 2006-10-26 TW TW095139589A patent/TW200737039A/zh unknown
Also Published As
Publication number | Publication date |
---|---|
TW200737039A (en) | 2007-10-01 |
US20090091585A1 (en) | 2009-04-09 |
WO2007102244A1 (ja) | 2007-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4037841B2 (ja) | 映像補間装置および映像補間方法 | |
JPH09326958A (ja) | 画像処理装置および処理方法 | |
WO1998010377A1 (fr) | Processeur de signaux video | |
KR101816661B1 (ko) | 비디오 스케일러들에서의 링잉 억제 | |
JPWO2007102244A1 (ja) | 画像拡大縮小装置 | |
JPH1021387A (ja) | 画像処理装置および処理方法 | |
JP4824703B2 (ja) | 2次元フィルタ演算装置及び方法 | |
JP4728744B2 (ja) | 画像処理装置 | |
JPH08172611A (ja) | 映像フォーマット変換装置 | |
US20080208941A1 (en) | Interpolation Process Circuit | |
AU2007219336B8 (en) | Method and apparatus for abitrary ratio image reduction | |
US20120050820A1 (en) | Image processing apparatus, control method of the same, and program | |
JP6264119B2 (ja) | 映像信号処理装置及び方法 | |
JP3625145B2 (ja) | 画像拡大装置 | |
JP2009008945A (ja) | 画像信号処理装置、画像信号処理方法およびプログラム | |
JP2016134896A (ja) | 画像処理装置、画像処理方法、およびプログラム | |
JP2000354244A (ja) | 画像処理装置、方法及びコンピュータ読み取り可能な記憶媒体 | |
US7428346B2 (en) | Image processing method and image processing device | |
JP2011070594A (ja) | 画像処理装置、画像処理方法、および画像処理プログラム | |
JP2004297314A (ja) | 画素密度変換装置 | |
JP2009141445A (ja) | サンプリングレート変換装置、およびサンプリングレート変換方法 | |
JP6598365B2 (ja) | 帯域合成装置、帯域分割装置、解像度変換装置、超解像装置およびプログラム | |
JP2006050090A (ja) | 画像縮小方法、画像縮小装置、および、画像縮小プログラムを記録した記録媒体 | |
JP4688249B2 (ja) | 画像サンプル数変換装置及びその方法 | |
JP2004056474A (ja) | 画像処理装置とそのためのプログラム |