以下に本発明の実施の形態を説明するが、本明細書に記載の発明と、発明の実施の形態との対応関係を例示すると、次のようになる。この記載は、本明細書に記載されている発明をサポートする実施の形態が本明細書に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、発明に対応するものとして、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その発明に対応するものではないことを意味するものではない。逆に、実施の形態が発明に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その発明以外の発明には対応しないものであることを意味するものでもない。
さらに、この記載は、本明細書に記載されている発明の全てを意味するものではない。換言すれば、この記載は、本明細書に記載されている発明であって、この出願では請求されていない発明の存在、すなわち、将来、分割出願されたり、補正により出現、追加される発明の存在を否定するものではない。
即ち、本発明の画像処理装置は、注目画素位置を含む、注目画素位置に対応する複数の画素位置のエッジの方向を検出する方向検出手段(例えば、図4の斜線検出部133)と、方向検出手段により検出された注目画素に対応する複数の画素位置のエッジの方向の空間分布を生成する空間分布生成手段(例えば、図4の空間分布生成部134)と、方向検出手段により検出された注目画素に対応する複数の画素位置のエッジの方向に基づいて、注目画素位置に対応する複数の画素位置のエッジ方向補間画素を補間して生成するエッジ方向補間手段(例えば、図4の方向補間部131)と、エッジ方向補間手段により補間されて生成されたエッジ方向補間画素の信頼度を検出する信頼度検出手段(例えば、図4の信頼度格付部124)と、空間分布生成手段により生成された空間分布と、信頼度検出手段により検出された信頼度とに基づいて、最も信頼度の高い注目画素位置のエッジの方向を選択する方向選択手段(例えば、図4の方向選択部126)と、前記注目画素位置の上下、または、左右の画素を用いた線形補間により注目画素位置の線形補間画素を補間して生成する線形補間手段(例えば、図4の線形補間部127)と、方向選択手段により選択されたエッジの方向に基づいて、注目画素位置の選択方向補間画素を補間して生成する選択方向補間手段(例えば、図4の斜補間部128)と、線形補間画素と選択方向補間画素とを合成して合成補間画素を前記注目画素位置の画素として生成する合成補間画素生成手段(例えば、図4の合成部130)とを備えることを特徴とする。
注目画素上の斜方向のエッジの有無を判定するエッジ判定手段(例えば、図4の斜線検出部133)をさらに設けるようにさせることができ、方向検出手段には、エッジ判定手段の判定結果に基づいて、注目画素位置を含む、注目画素位置に対応する複数の画素位置のエッジの方向を検出させるようにすることができる。
信頼度検出手段には、前記エッジ方向補間手段により補間されたエッジ方向補間画素の局所的構造の整合性を判定させ、その判定結果に基づいて、エッジ方向補間手段により補間されたエッジ方向補間画素の信頼度を検出させるようにすることができる。
前記信頼度と方向検出手段により検出されたエッジの方向の関係から方向性分布を生成する方向性分布生成手段をさらに設けるようにさせることができ、方向選択手段には、方向性分布に基づいて、最も信頼度の高いエッジ方向を選択させるようにすることができる。
方向選択手段により前記方向性分布に基づいて選択された最も信頼度の高い方向の信頼度に基づいて、方向選択補間画素の重みを設定する重み設定手段(例えば、図4の斜重み付け部129)をさらに設けるようにさせることができ、合成補間手段には、重み設定手段により設定された重みに対応する係数を用いて、線形補間画素と方向選択補間画素の線形和をとることにより合成して合成補間画素を注目画素位置の画素として生成させるようにすることができる。
インタレース画像を前記原画像として、垂直方向にのみ2倍に拡大するとき、合成補間手段には、プログレッシブ画像の合成補間画素を補間して生成させるようにすることができる。
本発明の画像処理方法は、注目画素位置を含む、注目画素位置に対応する複数の画素位置のエッジの方向を検出する方向検出ステップ(例えば、図25のフローチャートにおけるステップS97の処理)と、方向検出ステップの処理で検出された注目画素位置に対応する複数の画素位置のエッジの方向の空間分布を生成する空間分布生成ステップ(例えば、図38のフローチャートにおけるステップS132の処理)と、方向検出ステップの処理で検出された注目画素位置に対応する複数の画素位置のエッジの方向に基づいて、注目画素位置に対応する複数の画素位置のエッジ方向補間画素を補間して生成するエッジ方向補間ステップ(例えば、図25のフローチャートにおけるステップS98の処理)と、エッジ方向補間ステップの処理で補間されて生成されたエッジ方向補間画素の信頼度を検出する信頼度検出ステップと、空間分布生成ステップにより生成された空間分布と、信頼度検出ステップの処理で検出された信頼度とに基づいて、最も信頼度の高い注目画素位置のエッジの方向を選択する方向選択ステップ(例えば、図25のフローチャートにおけるステップS104の処理)と、前記注目画素位置の上下、または、左右の画素を用いた線形補間により注目画素位置の線形補間画素を補間して生成する線形補間ステップ(例えば、図25のフローチャートにおけるステップS105の処理)と、方向選択ステップの処理で選択されたエッジの方向に基づいて、注目画素位置の選択方向補間画素を補間して生成する選択方向補間ステップ(例えば、図25のフローチャートにおけるステップS105の処理)と、線形補間画素と選択方向補間画素とを合成して合成補間画素を注目画素位置の画素として生成する合成補間ステップ(例えば、図25のフローチャートにおけるステップS107の処理)とを含むことを特徴とする。
尚、記録媒体とプログラムについては、画像処理方法と同様であるので、その説明は省略するものとする。
図1は、本発明を適用した画像処理装置の構成例を表している。この画像処理装置2においては、画像入力部1が処理対象とされる画像データを、記録媒体から読み取ったり、ネットワークを介して伝送されてくるものを受信して入力し、画像処理部2に出力する。画像処理部2は、画像入力部1より入力された画像の解像度を変更し(拡大または縮小し)、画像出力部3に出力する。画像出力部3は、画像処理部2より供給された画像データを表示部に表示させたり、記録媒体に記録するか、あるいは、伝送媒体を介して、他の装置に伝送する。
画像処理部2には、エッジコネクタ処理部11が設けられている。このエッジコネクタ処理部11は、画像のエッジを太くする処理を実行する。すなわち、小さいサイズの画像は、低解像度であり、信頼できる情報が少ないため、拡大するのが困難である。エッジが1画素と同じくらい細い(薄い)と、後述する高速垂直アップサンプリング処理部12,垂直アップサンプリング処理部13,高速水平アップサンプリング処理部14、または、水平アップサンプリング処理部15におけるエッジ検出が困難になり、エッジ方向に沿った補間処理を正確に行うことが困難になる。そこで、エッジコネクタ処理部11は、原画像に前処理を行い、エッジを検出し易くする。この画像情報を破壊しない前処理は、例えばコンピュータのアイコンやワードプロセッサのフォントなどの弱接続(loose connection)を持つ画像に対して行われる。
高速垂直アップサンプリング処理部12と垂直アップサンプリング処理部13は、それぞれ原画像の解像度を垂直方向にZ倍する処理を行う。高速垂直アップサンプリング処理部12は、Zの値が1より大きく2より小さい場合の処理を行い、垂直アップサンプリング処理部13は、Zの値が2である場合の処理を行う。
高速水平アップサンプリング処理部14と水平アップサンプリング処理部15は、それぞれ原画像の解像度を水平方向にZ倍する処理を行う。高速水平アップサンプリング処理部14は、Zの値が1より大きく2より小さい場合の処理を行い、水平アップサンプリング処理部15は、Zの値が2である場合の処理を行う。
線形縮小処理部16は、原画像の解像度を縮小する((Z<1)倍する)処理を行う。
1次元垂直イメージリフレッシュ処理部17と1次元垂直イメージリフレッシュ処理部18は、バッファ17a,18aを適宜利用しながら、それぞれ垂直方向または水平方向に画像データを1次元のフィルタで処理し、エッジとテクスチャを視覚的に違和感なく強調する。すなわち、記録媒体に画像データが記録される場合、記録媒体の物理的な影響により高域成分が抑制されて、画像中のエッジ部分とテクスチャ部分がぼけてしまうといった現象が生じることがあるので、1次元垂直イメージリフレッシュ処理部17と1次元水平イメージリフレッシュ処理部18は、各画素の中心画素エネルギを求めて、対応するフィルタ処理を行うと共に、中心画素エネルギの値からその画素がエッジ、または、テクスチャのいずれに属しているかを判別し、エッジの場合については、さらに、フィルタ処理により生じてしまう歪みを抑制するため、クリッピング処理を施す。
また、1次元垂直イメージリフレッシュ処理部17と1次元水平イメージリフレッシュ処理部18で使用するフィルタは、各々2種類のフィルタが用意されており、必要に応じてユーザが任意に設定することができる。この2種類のフィルタのうち一方のフィルタは、周波数領域の特性を綿密に制御できるという特性があり、他方のフィルタは、前者のフィルタと比較すると周波数領域の特性を綿密に制御することができないが、処理量を軽減することができるというものである。これらのフィルタは、構成するフィルタの要素が異なると言う他は同様であり、その処理も同様である。以下の説明においては、前者のフィルタをAタイプ、後者のフィルタをBタイプと称するものとする。
次に、図2のブロック図を参照して、エッジコネクタ11の詳細な構成について説明する。エッジ接続部101は、検出されたエッジの情報を対角エネルギ算出部102に出力し、算出された左右の対角エネルギに基づいて、エッジを太くして接続する。
次に、図3のブロック図を参照して、高速垂直アップサンプリング処理部12の構成について説明する。高速垂直アップサンプラ111は、垂直方向補間部112に対して補間画素を生成させて、垂直方向に拡大した画像を生成し、出力する。
次に、図4のブロック図を参照して、図3の垂直方向補間部112の構成について説明する。
帯域制限部121は、例えば、LPF(Low Pass Filter)などから構成され、入力された画像の各画素の画素値を平滑化して、帯域を制限して方向判別部123、および、エッジ検出部122に出力する。
エッジ検出部122は、帯域制限された画像信号から局所エネルギを算出してその値によりエッジの有無を検出し、検出結果を方向判別部123に出力する。
方向判別部123は、エッジ検出部122のエッジの検出結果と、斜線検出部133の検出結果に基づいて、エッジの方向を判別し、判別したエッジの方向の情報を信頼度格付部124、方向性分布生成部125、および、空間分布生成部134に出力すると共に、画素情報をも方向補間部131に出力する。信頼度格付部124は、入力された画像の情報と、方向判別部123から入力されるエッジの方向の情報に基づいて、エッジの方向の情報の信頼度を求め、方向性分布生成部125に出力する。方向補間部131は、方向判別部123からの情報に基づいて、その方向に存在する画素値を用いて画素を補間する。
方向性分布生成部125は、方向判別部123から入力されるエッジの方向の情報と対応する信頼度格付部124からの信頼度の情報に基づいて、方向性分布を生成して方向選択部126、および、斜重み付け部129に供給する。方向選択部126は、空間分布生成部134からのエッジの方向の空間分布の情報と、方向性分布生成部125からの方向性分布に基づいて、注目画素における信頼度の最も高いエッジの方向を選択し、選択した方向の情報を斜補間部128に出力する。また、斜重み付け部129は、斜方向のエッジに付する重みを計算して合成部130に出力する。
線形補間部127は、入力された画像のうち、補間しようとする画素の垂直方向の上下に隣接する画素から線形補間により画素を生成し合成部130に出力する。斜補間部128は、入力された画像のうち、補間しようとする画素を方向選択部126より入力された方向に挟むように隣接する画素間の情報から補間画素を生成し合成部130に出力する。合成部130は、斜重み付け部129より入力されてくる斜め方向の重み付けの情報に基づいて、線形補間により生成された補間画素の画素値と、斜補間部128により斜補間により生成された補間画素の画素値を、それぞれに重み付けして加算する(重みを係数として線形和を求める)ことにより合成して補間画素として出力する。
斜重み付け部129は、方向性分布生成部125より供給される方向性分布、および、エッジ検出部122より供給されるエッジ検出結果に基づいて、斜線の重み付けを行い、斜線の重みの情報を合成部130に供給する。
量子化部132は、入力された画像の各画素の画素値を量子化して、斜線検出部133に供給する。斜線検出部133は、量子化部132より供給された量子化されている各画素の画素値に基づいて、斜線の有無を検出し、検出結果を方向判別部123に供給する。尚、斜線とは、斜め方向のエッジのことである。
次に、図5のブロック図を参照して、垂直アップサンプリング処理部13の構成について説明する。垂直アップサンプラ141は、垂直方向補間部142に対して、補間画素を生成させて出力する。尚、垂直方向補間部142の構成は、図4を参照して説明した、図3の高速垂直アップサンプリング処理部12の垂直方向補間部112と同様であるので、その説明は省略する。
次に、図6のブロック図を参照して、高速水平アップサンプリング処理部14の構成について説明する。高速水平アップサンプラ151は、補間しようとする画素の周辺画素の情報を出力して、補間画素を水平方向補間部152に生成させて、垂直方向に拡大した画像を生成して出力する。
次に、図7を参照して、水平方向補間部152の構成について説明する。水平方向補間部152の構成は、基本的には、図4を参照して説明した、図3の高速垂直アップサンプリング処理部12の垂直方向補間部112と同様の手法で、水平方向の画素について処理するものである。すなわち、図7の水平方向補間部152における帯域制限部161、エッジ検出部162、方向判別部163、信頼度格付部164、方向性分布生成部165、方向選択部166、線形補間部167、斜補間部168、斜重み付け部169、合成部170、方向補間部171、量子化部172、斜線検出部173、および、空間補間部174は、それぞれ、図4の垂直方向補間部112における帯域制限部121、エッジ検出部122、方向判別部123、信頼度格付部124、方向性分布生成部125、方向選択部126、線形補間部127、斜補間部128、斜重み付け部129、合成部130、方向補間部131、量子化部132、斜線検出部133、および、空間補間部134に対応するものであり、それぞれ水平方向の画素に対してその処理を実行するものであり、基本的な処理方法は、垂直方向補間部112と同様であるので、その説明は省略する。
次に、図8のブロック図を参照して、水平アップサンプリング処理部15の構成について説明する。水平アップサンプラ181は、垂直方向補間部182に対して、補間画素を生成させて出力する。尚、垂直方向補間部182の構成は、図7を参照して説明した、図6の高速水平アップサンプリング処理部14の水平方向補間部152と同様の手法で、処理するものであるので、その説明は省略する。
次に、図9のブロック図を参照して、1次元垂直イメージリフレッシュ処理部17の構成について説明する。中心画素エネルギ算出部191中心画素エネルギ算出部191は、入力された画像の注目画素に対応する垂直方向の列に存在する複数の画素から、その中心画素エネルギを算出し、判別比較部194に出力する。垂直最大値最小値検出部192は、入力された画像の注目画素に対応する垂直方向の複数の画素のうち、その最大値となる画素値と最小値となる画素値を抽出して、判別比較部194に出力する。
垂直フィルタ処理部193は、入力された画像の注目画素に対応する複数の画素を垂直方向にフィルタ処理して判別比較部194に出力する。判別比較部194は、中心画素エネルギ算出部191より入力される中心画素エネルギの値と、垂直フィルタ処理部193により垂直方向にフィルタ処理された値からテクスチャであるか、エッジであるかを判定し、さらに、エッジである場合、垂直最大値最小値検出部192より入力されてくる最大値または最小値と比較し、値をクリッピングして、バッファ17aに出力する。出力部195は、バッファ17aに記憶された画像信号を適宜読み出して出力する。
次に、図10のブロック図を参照して、1次元水平イメージリフレッシュ処理部18の構成について説明する。中心画素エネルギ算出部201は、入力された画像の注目画素に対応する複数の画素から、その中心画素エネルギを算出し、判別比較部204に出力する。水平最大値最小値検出部202は、入力された画像の注目画素に対応する水平方向のライン上に存在する複数の画素のうち、その最大値となる画素値と最小値となる画素値を抽出して、判別比較部204に出力する。
水平フィルタ処理部203は、入力された画像の注目画素に対応する複数の画素を水平方向にフィルタ処理して判別比較部204に出力する。判別比較部204は、中心画素エネルギ算出部201より入力される中心画素エネルギの値と、水平フィルタ処理部203により水平方向にフィルタ処理された値からテクスチャであるか、エッジであるかを判定し、さらに、エッジである場合、水平最大値最小値検出部202より入力されてくる最大値または最小値と比較し、値をクリッピングして、バッファ18aに出力する。出力部205は、バッファ18aに記憶された画像信号を適宜読み出して出力する。
次に、図11のフローチャートを参照して、画像処理部2のズーム処理について説明する。最初にステップS1において、画像処理部2は、変数zに倍率Zの値を設定する。次にステップS2において、画像処理部2は、変数zの値が2以上であるか否かを判定し、2未満である場合には、ステップS3に進み、変数zの値が1より大きく2より小さい値であるか否かが判定される。変数zの値が1より大きく2より小さい場合にはステップS4に進み、画像処理部2は、高速ズーム処理を行う。この高速ズーム処理の詳細は、図12のフローチャートを参照して後述する。その後、ステップS7において、出力表示処理が実行される。
ステップS3において変数zの値が1と2の間の値ではないと判定された場合、ステップS5に進み、その変数zの値は、0であるか否かが判定される。その変数zの値が0でない場合には(変数zの値が1未満である場合には)、ステップS6に進み、標準的な線形縮小処理部16により線形縮小処理が実行される。その後、ステップS7において、出力表示処理が実行される。すなわち、生成された画像が、画像出力部3により、表示部に表示される。
これに対してステップS5において、変数zの値が0であると判定された場合、ステップS6におけるズーム処理を所定回数実行した結果、拡大処理は既に完了しているため、ステップS7に進み、出力表示処理が実行される。
ステップS2において、変数zの値が2以上であると判定された場合、ステップS8に進み、画像処理部2は、ズーム処理を実行する。このズーム処理の詳細は、図72のフローチャートを参照して後述する。
ステップS8の次にステップS9に進み、画像処理部2は、変数zの値を2で除算する。その後、処理はステップS2に戻り、それ以降の処理が繰り返し実行される。
すなわち、変数zの値が2以上である場合には、ステップS8の処理が変数zの値が2より小さくなるまで所定回数繰り返し行われる。そして、変数zの値が2より小さくなった場合には、変数zの値が1と2の間の値であるとき、ステップS4で高速ズーム処理が行われ、変数zの値が1未満である場合には、ステップS6で標準的な線形縮小処理が行われる。この標準的な線形縮小処理は、例えば、バイリニアフィルタを用いて実現することができる。
次に、図12のフローチャートを参照して、ステップS4の高速ズーム処理について説明する。最初にステップS21において、画像処理部2は、ユーザより設定されているモードが、画像モードであるか否かを判定する。設定されているモードが画像モードでない場合には(処理対象の画像が、エッジコネクタ処理を必要とするアイコンやフォントなどの弱接続の画像である場合には)、ステップS26に進み、エッジコネクタ処理が行われる。このエッジコネクタ処理の詳細は、図68と図69を参照して後述するが、この処理で、弱接続の画像が強接続の画像に前処理される。
ステップS21で設定されているモードが画像モードであると判定された場合(処理対象の画像が強接続の画像である場合)、およびステップS26の処理の後、ステップS22に進み、画像処理部2は、1次元垂直イメージリフレッシュ処理を実行する。
ここで、図13のフローチャートを参照して、1次元垂直イメージリフレッシュ処理部17の1次元垂直イメージリフレッシュ処理について説明する。
ステップS31において、画像入力部1より入力された画像データのうち、処理していない画素があるか否かが判定され、処理されていない画素があると判定された場合、その処理は、ステップS32に進む。
ステップS32において、中心画素エネルギ算出部191は、未処理画素を検索し、検索された未処理画素の垂直方向中心画素エネルギを算出する。例えば、図14に示すような画像データが入力され、垂直方向のy+1,y,y−1の各ラインに、画素a乃至e、画素f乃至j、および、画素k乃至oが配置されているものとするとき、画素hの近傍のAエリア(図中実線で囲まれた範囲)の垂直方向中心画素エネルギEV-hは、以下の式(1)により求められる。
EV-h=|(b+c+d)−(l+m+n)|・・・(1)
ここで、b,c,d,l,m,およびnは、画素b,c,d,l,m,およびnの画素値である。すなわち、式(1)の垂直方向中心画素エネルギEVは、未処理画素を中心とした上のラインと下のラインに存在する画素値の和同士の差分の絶対値である。このため、相関のある画素同士が上下にある場合は、その画素値の差分には、大きな差がないので、垂直方向中心画素エネルギも小さくなり、逆に、相関のない画素同士が上下にある場合、その画素値の差分には大きな差が現れることが多く、結果として垂直方向中心画素エネルギも大きくなる。
中心画素エネルギ算出部191は、未処理画素の垂直方向中心画素エネルギEV-hを上記の式(1)を演算することにより求める。
ステップS33において、垂直最大値最小値検出部192は、未処理画素を含めた上下3個の画素の画素値を比較して最大値と最小値を求める。すなわち、例えば、図14に示すように、未処理画素が画素hであった場合、それを含めた上下の画素c,h,m(図14中の点線で囲まれたBエリア)の各画素値を読出し、図15に示すように、その内の最大値(c,h,m)と最小値(c,h,m)を求める。
ステップS34において、判別比較部194は、求められた垂直方向中心画素エネルギEV-hが、最小値(c,h,m)より大きく、かつ、最大値(c,h,m)未満であるか否かを判定し、最小値(c,h,m)より大きく、かつ、最大値(c,h,m)未満であると判定した場合、すなわち、その画素がエッジか、または、テクスチャであると判定した場合、その処理は、ステップS35に進む。
ステップS35において、垂直フィルタ処理部193は、垂直1次元フィルタを構成する係数αの値を計算する。係数αは、式(2)に示すような計算により求められる。
α=α0−(EV-h/EV-h-max)・・・(2)
ここで、α0(1<α0≦2)は、ユーザにより任意に設定される値であり、EV-h-Maxは、垂直方向中心画素エネルギEV-hの最大値である。尚、ここで言う垂直中心画素エネルギの最大値EV-h-maxは、最大値(c,h,m)とは、異なるものであり、算出され得る最大値を示している。
ステップS36において、垂直フィルタ処理部193は、図14に示すBエリアの画素c,h,mに、図15に示すような1次元垂直フィルタ処理を施す。すなわち、1次元垂直フィルタは、(1/2−α/2,α,1/2−α/2)(1<α≦2)といったものであり、例えば、フィルタが上述のタイプAの場合、以下の式(3)に示すような演算により、フィルタ処理された画素値hV-filterが求められる。
hV-filter=c×(1/2−α/2)+h×α+m×(1/2−α/2)・・・(3)
ここで、係数αは、上述のステップS35の処理で求められた値であり、フィルタによるエッジ、または、テクスチャの強調の程度を調節することができる。すなわち、係数αは、垂直方向中心画素エネルギEV-hの値により動的に変化し、垂直方向中心画素エネルギEV-hが小さいと係数αは大きくなり、結果として、図15に示す1次元垂直フィルタは、画素hに強く作用することになり、逆に、垂直方向中心画素エネルギEV-hが大きいと係数αは小さくなり、結果として、図15に示す垂直フィルタは、画素hに弱く作用することになる。
ステップS37において、判別比較部194は、図15に示すように、現在処理している画素がエッジであるか、または、テクスチャであるかの判別処理を行う。すなわち、垂直中心画素エネルギEV-hは、テクスチャである場合、その値が最小値(c,h,m)に近い値をとり、エッジである場合、その値が最大値(c,h,m)に近い値をとる。そこで、最大値(c,h,m)と最小値(c,h,m)の中間付近に閾値EV-sを設定し、閾値EV-sより垂直中心画素エネルギEV-hが大きいとき、エッジであると判別し、逆に、閾値EV-sより垂直中心画素エネルギEV-hが小さいとき、テクスチャであると判別する。例えば、垂直中心画素エネルギEV-hが閾値EV-sより大きいとき、判別比較部194は、注目する処理中の画素が、エッジであると判別し(エッジの表示領域に存在する画素であると判別し)、その処理は、ステップS38に進む。
ステップS38において、判別比較部194は、図15に示すように、フィルタ処理した画素値hV-filterと最大値(c,h,m)を比較し、フィルタ処理した画素値hV-filterが最大値(c,h,m)以上であるか否かを判定し、最大値(c,h,m)以上であると判定した場合、ステップS39において、判別比較部194は、画素値hV-filterを最大値(c,h,m)に置き換える。
ステップS40において、判別比較部194は、最大値(c,h,m)に置き換えられた画素値を画素hの画素値としてバッファ17aに記憶させ、その処理は、ステップS31に戻り、全ての画素に1次元垂直エッジ強調処理が施されたと判定されるまで同様の処理が繰り返される。
ステップS34において、垂直方向中心画素エネルギEVが、最小値(c,h,m)より大きく、かつ、最大値(c,h,m)未満ではないと判定された場合、すなわち、その画素がエッジか、または、テクスチャではないと判定された場合、その処理は、ステップS40に進み、判別比較部194は、画素hの画素値を、フィルタ処理することなく、そのままバッファ17aに記憶させ、その処理は、ステップS31に戻り、それ以降の処理が繰り返される。また、ステップS37において、垂直中心画素エネルギEV-hが閾値EV-sより小さいとき、判別比較部194は、注目する処理中の画素が、テクスチャであると判定し、その処理は、ステップS40に進む。すなわち、テクスチャである場合、判別比較部194は、フィルタ処理が施された画素値hV-filterを画素hの値としてバッファ17aに記憶させる。
ステップS38において、フィルタ処理した画素値hV-filterが最大値(c,h,m)以上ではないと判定した場合、ステップS41において、判別比較部194は、フィルタ処理した画素値hV-filterと最小値(c,h,m)を比較し、フィルタ処理した画素値hV-filterが最小値(c,h,m)以下であるか否かを判定し、フィルタ処理した画素値hV-filterが最小値(c,h,m)以下であると判定した場合、その処理は、ステップS42に進む。
ステップS42において、判別比較部194は、画素値hV-filterを最小値(c,h,m)に置き換え、ステップS40において、最小値(c,h,m)に置き換えられた画素値を、画素hの画素値としてバッファ17aに記憶する。
ステップS41において、フィルタ処理した画素値hV-filterが最小値(c,h,m)以下ではないと判定された場合、その処理は、ステップS40に進み、判別比較部194は、フィルタ処理された画素値hV-filterを、画素hの画素値としてバッファ17aに記憶させ、その処理は、ステップS31に戻る。
すなわち、ステップS34の処理で、垂直方向中心画素エネルギEV-hが、最小値(c,h,m)より大きく、かつ、最大値(c,h,m)未満である場合、図15に示すように、ステップS33の処理で求められた最大値(c,h,m)、および、最小値(c,h,m)が、画素c,h,mの局所的な範囲の最大値と最小値とみなされ、ステップS36の処理でフィルタ処理して求められた画素値が、その最小値と最大値の範囲に含まれたときは、さらに、ステップS37の処理で、エッジであるかテクスチャであるかが判定され、テクスチャとして判定されると、フィルタ処理した画素値が、そのままバッファ17aに記憶させられ、エッジとして判定されると、最小値(c,h,m)以下のときは画素値が最小値に、最大値(c,h,m)以上のときは画素値が最大値にされて(クリッピングされて)、バッファ17aに記憶させられる。ステップS34の処理で、垂直方向中心画素エネルギEVが、最小値(c,h,m)より大きく、かつ、最大値(c,h,m)未満ではない場合、エッジ、または、テクスチャではないと判定された場合、元の画素値が、フィルタ処理されることもなく、そのままバッファ17aに記憶される。
尚、1次元垂直フィルタは、上述のように2種類存在し、図15に示すAタイプと、図16で示すようにBタイプが存在する。すなわち、Aタイプでは、式(3)で示したような演算により、フィルタ処理がなされるが、Bタイプでは、以下の式(4)に示すような演算がされる。
hV-filter(TypeB)
=c×(1/4−α/2)+h×1/2+α+m×(1/4−α/2)・・・(4)
尚、係数αは、Aタイプと同様に、式(2)により設定可能であり、その他の処理も同様であるので、その処理の説明は省略する。
ここで、図12の処理の説明に戻る。
ステップS22の処理における、1次元垂直イメージリフレッシュ処理が実行されると、続いてステップS23において、1次元水平イメージリフレッシュ処理が実行される。
ここで、図17のフローチャートを参照して、1次元水平イメージリフレッシュ処理部18の1次元水平イメージリフレッシュ処理について説明する。
ステップS51において、1次元水平イメージリフレッシュ処理部18は、1次元垂直イメージリフレッシュ処理部17により1次元垂直イメージリフレッシュ処理された画像データのうち、処理していない画素があるか否かを判定し、処理していない画素があると判定された場合、その処理は、ステップS52に進む。
ステップS52において、中心画素エネルギ算出部201は、未処理画素を検索し、検索された未処理画素の垂直方向中心画素エネルギを算出する。例えば、図18に示すような画像データが入力され、垂直方向のy+1,y,y−1の各ラインに、画素a乃至e、画素f乃至j、および、画素k乃至oが配置されているものとするとき、画素hの近傍のAエリア(図中実線で囲まれた範囲)の水平方向中心画素エネルギEH-hは、以下の式により求められる。
EV-h=|(d+i+n)−(b+g+l)|・・・(5)
ここで、b,c,d,l,m,およびnは、画素b,c,d,l,m,およびnの画素値である。すなわち、式(5)の水平方向中心画素エネルギEHは、未処理画素を中心とした右のラインと左のラインに存在する画素値の和同士の差分の絶対値である。このため、相関のある画素同士が左右にある場合は、その画素値の差分には、大きな差がないので、水平方向中心画素エネルギも小さくなり、逆に、相関のない画素同士が左右にある場合、その画素値の差分には大きな差が現れることが多く、結果として水平方向中心画素エネルギも大きくなる。
中心画素エネルギ算出部201は、未処理画素の水平方向中心画素エネルギEH-hを上記の式(5)を演算することにより求める。
ステップS53において、水平最大値最小値検出部202は、未処理画素を含めた左右3個の画素の画素値を比較して最大値と最小値を求める。すなわち、例えば、図18に示すように、未処理画素が画素hであった場合、それを含めた上下の画素g,h,i(図18中の点線で囲まれたBエリア)の各画素値を読出し、図19に示すように、その内の最大値(g,h,i)と最小値(g,h,i)を求める。
ステップS54において、判定比較部184は、求められた水平方向中心画素エネルギEHが、最小値(g,h,i)より大きく、かつ、最大値(g,h,i)未満であるか否かを判定し、最小値(g,h,i)より大きく、かつ、最大値(g,h,i)未満であると判定した場合、すなわち、その画素がエッジか、または、テクスチャであると判定した場合、その処理は、ステップS55に進む。
ステップS55において、水平フィルタ処理部203は、水平1次元フィルタを構成する係数αの値を計算する。係数αは、上述の式(2)と同様に、式(6)に示すような計算により求められる。
α=α0−(EH-h/EH-h-max)・・・(6)
ここで、α0(1<α0≦2)は、ユーザにより任意に設定される値であり、EH-h-Maxは、水平方向中心画素エネルギEH-hの最大値である。尚、ここで言う水平中心画素エネルギの最大値EH-h-maxは、最大値(g,h,i)とは、異なるものであり、算出され得る最大値を示している。
ステップS56において、水平フィルタ処理部203は、図18に示すBエリアの画素g,h,iに、図19に示すような1次元水平フィルタ処理を施す。すなわち、1次元水平フィルタとしては、(1/2−α/2,α,1/2−α/2)(1<α≦2)といったものであり、例えば、フィルタが上述のタイプAの場合、以下の式(7)に示すような演算により、フィルタ処理された画素値hH-filterが求められる。
hH-filter=g×(1/2−α/2)+h×α+i×(1/2−α/2)・・・(7)
ここで、係数αは、上述のステップS55の処理で求められた値であり、フィルタによるエッジ、または、テクスチャの強調の程度を調節することができる。すなわち、係数αは、水平方向中心画素エネルギEH-hの値により動的に変化し、水平方向中心画素エネルギEV-hが小さいと係数αは大きくなり、結果として、図19に示す1次元水平フィルタは、画素hに強く作用することになり、逆に、水平方向中心画素エネルギEH-hが大きいと係数αは小さくなり、結果として、図19に示す垂直フィルタは、画素hに弱く作用することになる。
ステップS57において、判別比較部204は、図19に示すように、現在処理している画素がエッジであるか、または、テクスチャであるかを判定する。すなわち、水平中心画素エネルギEH-hは、テクスチャである場合、その値が最小値(g,h,i)に近い値をとり、エッジである場合、その値が最大値(g,h,i)に近い値をとる。そこで、最大値(g,h,i)と最小値(g,h,i)の中間付近に閾値EH-sを設定し、閾値EH-sより水平中心画素エネルギEH-hが大きいとき、エッジであると判別し、逆に、閾値EH-sより水平中心画素エネルギEH-hが小さいとき、テクスチャであると判別する。例えば、水平中心画素エネルギEH-hが閾値EH-sより大きいとき、判別比較部204は、注目する処理中の画素が、エッジであると判定し(エッジの表示領域に存在する画素であると判別し)、その処理は、ステップS58に進む。
ステップS58において、判別比較部204は、図19に示すように、フィルタ処理した画素値hH-filterと最大値(g,h,i)を比較し、フィルタ処理した画素値hH-filterが最大値(g,h,i)以上であるか否かを判定し、最大値(g,h,i)以上であると判定した場合、ステップS59において、判別比較部204は、画素値hH-filterを最大値(g,h,i)に置き換える。
ステップS60において、判別比較部204は、最大値(g,h,i)に置き換えられた画素値を画素hの画素値としてバッファ18aに記憶させ、その処理は、ステップS51に戻り、全ての画素に1次元垂直エッジ強調処理が施されたと判定されるまで同様の処理が繰り返される。
ステップS54において、水平方向中心画素エネルギEHが、最小値(g,h,i)より大きく、かつ、最大値(g,h,i)未満ではないと判定された場合、すなわち、その画素がエッジか、または、テクスチャではないと判定された場合、その処理は、ステップS60に進み、判別比較部204は、画素hの画素値を、フィルタ処理することなく、そのままバッファ18aに記憶させ、その処理は、ステップS51に戻り、それ以降の処理が繰り返される。また、ステップS57において、水平中心画素エネルギEH-hが閾値EH-sより小さいとき、1次元水平イメージリフレッシュ処理部18は、注目する処理中の画素が、テクスチャであると判定し、その処理は、ステップS60に進む。すなわち、テクスチャである場合、判別比較部204は、フィルタ処理が施された画素値hH-filterを画素hの値としてバッファ18aに記憶させる。
ステップS58において、フィルタ処理した画素値hH-filterが最大値(g,h,i)以上ではないと判定した場合、ステップS61において、判別比較部204は、フィルタ処理した画素値hH-filterと最小値(g,h,i)を比較し、フィルタ処理した画素値hH-filterが最小値(g,h,i)以下であるか否かを判定し、フィルタ処理した画素値hH-filterが最小値(g,h,i)以下であると判定した場合、その処理は、ステップS62に進む。
ステップS62において、判別比較部204は、画素値hH-filterを最小値(g,h,i)に置き換え、ステップS60において、最小値(g,h,i)に置き換えられた画素値を、画素hの画素値としてバッファ18aに記憶する。
ステップS61において、フィルタ処理した画素値hH-filterが最小値(g,h,i)以下ではないと判定した場合、その処理は、ステップS60に進み、判別比較部204は、フィルタ処理された画素値hH-filterを、画素hの画素値としてバッファ18aに記憶させ、その処理は、ステップS51に戻る。
すなわち、ステップS54の処理で、水平方向中心画素エネルギEHが、最小値(g,h,i)より大きく、かつ、最大値(g,h,i)未満である場合、図17に示すように、ステップS53の処理で求められた最大値(g,h,i)、および、最小値(g,h,i)が、画素g,h,iの局所的な範囲の最大値と最小値とみなされ、ステップS56の処理でフィルタ処理して求められた画素値が、その最小値と最大値の範囲に含まれたときは、さらに、ステップS57の処理で、エッジであるかテクスチャであるかが判定され、テクスチャとして判定されると、フィルタ処理した画素値が、そのままバッファ18aに記憶させられ、エッジとして判定されると、最小値(g,h,i)以下のときは画素値が最小値に、最大値(g,h,i)以上のときは画素値が最大値にされて(クリッピングされて)、バッファ18aに記憶させられる。ステップS54の処理で、垂直方向中心画素エネルギEHが、最小値(g,h,i)より大きく、かつ、最大値(g,h,i)未満ではない場合、エッジ、または、テクスチャではないと判定されたとき、元の画素値が、フィルタ処理されることもなく、そのままバッファ18aに記憶される。
尚、1次元水平フィルタは、上述のように2種類存在し、図19に示すAタイプと、図20で示すようにBタイプが存在する。すなわち、Aタイプでは、式(7)で示したような演算により、フィルタ処理がなされるが、Bタイプでは、以下の式(8)に示すような演算がされる。
hH-filter(TypeB)=g×(1/4−α/2)+h×1/2+α+i×(1/4−α/2)・・・(8)
ここで、αの設定は、Aタイプと同様に、式(6)により設定可能であり、その他の処理も同様であるので、その処理の説明は省略する。
ここで、図12の処理の説明に戻る。
ステップS23において、1次元水平イメージリフレッシュ処理が実行されると、続いて、ステップS24において、高速垂直アップサンプリング処理を実行する。この高速垂直アップサンプリング処理は、例えば、図21に示されるように、画像入力部1より入力された原画像の画素数を垂直方向に拡大する処理を意味する。この高速垂直アップサンプリング処理は、高速垂直アップサンプリング処理部12により実行される。
ここで、図22のフローチャートを参照して、高速垂直アップサンプリング処理に付いて説明する。高速垂直アップサンプラ111は、最初にステップS71において、Hバッファ31(後述する図24)と2Yバッファ41(後述する図42)を作成する。画像入力部1より入力された原画像(I_image)のサイズが、In_width×In_heightである場合、Hバッファ31のサイズは、In_width×(alpha_Z×In_height)となる。ここで、alpha_Zは、原画像を垂直方向に拡大する倍率を表し、今の場合、高速垂直アップサンプリングであるので、その値は1より大きく、2より小さい値である(ステップS3,S4)。
2Yバッファ41は、サイズがIn_width×1とされる。この2Yバッファ41には、補間された画素が一次的に格納される。
次に、ステップS72において、高速垂直アップサンプリング処理部12は、ケース1乃至ケース3に対応する処理を実行する。
このケース1乃至ケース3の処理は、Hバッファ31のY行の補間データを生成する処理である。Y行の補間データが、ケース1乃至ケース3のいずれの処理により生成されるかは、次のように決定される。
すなわち、本実施の形態においては、原画像I_imageを垂直方向に2倍に拡大した画像としての仮想垂直2倍拡大画像2Y_imageが想定される。Hバッファ31に格納する画像は、原画像I_imageを垂直方向にalpha_Z倍した画像であるから、仮想垂直2倍拡大画像2Y_imageの行を2Y_lineとし、Hバッファ31に格納する画像の行をYとすると、次の比例式が成立する。
Y:2Y_line=alpha_Z:2・・・(9)
この式(9)を整理すると、次式が得られる。
2Y_line=Y×2/alpha_Z・・・(10)
上記の式(10)より計算された値2Y_lineが整数且つ偶数である場合(2Y_line=2nであり、nが整数である場合)、Y行の補間データは、ケース1の処理で生成される。値2Y_lineが整数且つ奇数である場合(2Y_line=2n+1であり、nが整数である場合)、Y行の補間データは、ケース2の処理で生成される。その他の場合、すなわち値2Y_lineが実数である場合、Y行の補間データは、ケース3の処理で生成される。
ケース1の場合、図23のフローチャートに示す処理が実行される。すなわち、ケース1の場合、Hバッファ31の行Yの値を、原画像I_image中の所定の行の値(2Y_line/2=n)と対応させることができる。このため、ステップS81において、高速垂直アップサンプラ111は、原画像I_imageの2Y_line/2行をHバッファ31のY行にそのままコピーする。
図24は、この場合の処理を模式的に表している。すなわち、ケース1の場合、Hバッファ31の行Yの値が原画像I_imageの行nの値と等しいため、原画像のn(=2Y_line/2)行がHバッファ31のY行にそのままコピーされる。
次に、図25のフローチャートを参照して、ケース2の場合の処理について説明する。このケース2の場合、(2n+1)/2の値は整数ではないので、Hバッファ31の行Yの値を、原画像I_image中の所定の行の値に対応させることができない。しかしながら、仮想垂直2倍拡大画像2Y_image中の所定の行(2n+1)とは、対応させることができる。
そこで、この場合、ステップS91において、高速垂直アップサンプラ111は、原画像I_image中の所定の範囲(N画素)の上行up_lineと下行down_lineの画素を抽出する。Nの値は可変とされる。従って、上行up_lineの中心座標は、(X+N/2,n)となり、下行down_lineの中心座標は、(X+N/2,n+1)となる。
次にステップS92において、垂直方向補間部112のエッジ検出部122は、帯域制限部121により帯域制限された信号に基づいて、局所エネルギE(N)を、次式より算出する。
E(N)=Σ(I=0,N-1)ABS(up_line(I)−down_line(N-I-1))・・・(11)
上記の式(11)の計算は、up_lineの個々の画素から対角線上に位置するdown_lineの画素を減算し、その絶対値のIが0からN-1までの和を積算することを示している。
図26は、局所エネルギE(N)の計算の例を表している。同図に示されるように、上行up_lineの画素と、下行down_lineの画素のうち、対角線上に位置する上の画素から下の画素の画素値が減算され、その差の絶対値の和が局所エネルギE(N)とされる。図26の例では、画素Y0,0の値(30)から、画素Y1,4の値(255)が減算される。また画素Y0,1の画素値(150)から、画素Y1,3の画素値(230)が減算される。以下同様に、画素Y0,2の画素値(150)から画素Y1,2の画素値(200)が減算され、画素Y0,3の画素値(200)から画素Y1,1の画素値(200)が減算され、画素Y0,4の画素値(255)から、画素Y1,0の画素値(30)が減算される。そしてそれぞれの差分の絶対値の和が局所エネルギとされる。
ステップS93において、エッジ検出部122は、局所エネルギE(N)が予め設定されている所定の閾値Tより大きいか否かを判定する。局所エネルギE(N)が閾値Tと等しいか、それより小さい場合、その領域は、エッジを含まない平坦な低エネルギの領域と見なされる。この場合、潜在的エッジの方向を計算する必要がない。このため、ステップS94に進み、方向判別部123が、エッジ検出部122の判定結果に基づいて、方向補間部131に、Hバッファ31中の座標(X+N/2,Y)の画素データとして、座標(X+N/2,Y)を中心として、上下方向に幅2m(mは、任意)画素の範囲に存在する画素の線形和(ただし、各係数の和は1)を演算し、Hバッファ31のその座標(X+N/2,Y)に格納すると共に、垂直方向(後述する図38におけるL2の方向)を示す方向情報を信頼度格付部124、および、方向性分布生成部125に出力する。また、信頼度格付部124は、この補間画素について信頼度が低いことを示す0を方向性分布生成部125に出力する。
H_buffer(X+N/2,Y)
=I_image(X+N/2,n-m)×Cn-m+I_image(X+N/2,n-m)×Cn-m+1
+・・・+I_image(X+N/2,n+m-1)×Cn+m-1 +I_image(X+N/2,n+m)×Cn+m
(ただし、Cn-m+Cn-m+1+・・・+Cn+m-1+Cn+m=1)
・・・(12)
ここで、I_image(X+N/2,n)は、座標(X+N/2,Y)上の画素の上行に隣接する画素の画素値であり、I_image(X+N/2,n-1)は、座標(X+N/2,Y)上画素の下行に隣接する画素の画素値であり、I_image(X+N/2,n+i)(iは、-m≦i≦m)は、座標(X+N/2,Y)の上下方向に2m画素分並んだ各画素の画素値を示している。
すなわち、局所エネルギE(N)が閾値Tと等しいか、それより小さい場合、その領域は、エッジを含まない平坦な低エネルギの領域と見なされるので、画素値を求めようとする画素の画素値は、水平方向に同一の位置の上下方向に並ぶそれぞれm画素ずつの画素値の線形和をHバッファ31のその座標(X+N/2,Y)に格納する。
一方、ステップS93において、局所エネルギE(N)の値が閾値Tより大きいと判定された場合、その領域は、潜在的エッジを含んだ高エネルギ領域と見なされる。このとき、ステップS95において、座標(X+N/2,Y)に対応する画素上に斜線となるエッジが存在するか否かを判定するための斜線検出処理が実行される。
ここで、図27のフローチャートを参照して、斜線検出処理について説明する。
ステップS121において、量子化部132は、入力された各画素の画素値のうち、注目画素である座標(X+N/2,Y)の上下とその画素の上下の左右の画素の画素値を、例えば、所定の値で割るなどして、量子化し斜線検出部133に出力する。
ステップS122において、斜線検出部133は、以下の式(13)を演算して、注目画素の上行の真上の画素と、真上の画素の左右に隣接する画素間のそれぞれの差分の積UP(N/2)を求める。
UP(N/2)=(PA−PB)×(PB−PC)
・・・(13)
ここで、PA,PB,PCは、図28で示されるように、生成しようとする注目画素の上行の画素(入力された原信号の画素)である。すなわち、図28においては、注目画素が丸印で示されている(注目画素は、生成される画素であって、原信号のように実在する画素ではない)。従って、上記の式(13)は、その上行の画素である画素PAと画素PB間の画素間差分と、画素PBと画素PC間の画素間差分との積が、UP(N/2)として求められている。
ステップS123において、斜線検出部133は、以下の式(14)を演算して、注目画素の下行の真下の画素と、真下の画素の左右に隣接する画素間のそれぞれの差分の積DOWN(N/2)を求める。
DOWN(N/2)=(PD−PE)×(PE−PF)
・・・(14)
ここで、PD,PE,PFは、図28で示されるように、注目画素の下行の画素(入力された原信号の画素)である。従って、上記の式(14)では、その下行の画素である画素PDと画素PE間の画素間差分と、画素PEと画素PF間の画素間差分との積が、DOWN(N/2)として求められている。
ステップS124において、斜線検出部133は、以下の式(15)を演算することにより、注目画素と、その左右の画素間の画素値の差分の積MIDDLE(N/2)を求める。
MIDDLE(N/2)
=(0.5×(PA+PD)−0.5×(PB+PE))×(0.5×(PB+PE)−0.5×(PE+PF))
・・・(15)
ここで、(0.5×(PA+PD)),(0.5×(PB+PE)),(0.5×(PE+PF))は、図28で示されるように、注目画素の左の画素PL、注目画素、および、右に隣接する画素PRのそれぞれの画素値である。従って、上記の式(15)では、注目画素の右側に隣接する画素間の画素間差分と、注目画素の左側に隣接する画素間の画素間差分との積が、MIDDLE(N/2)として求められている。
ここで、図25のフローチャートの説明に戻る。
ステップS96において、斜線検出部133は、斜線が存在するか否かを判定し、判定結果を方向判別部123、および、斜重み付け部129に出力する。より詳細には、斜線検出部133は、以下の式(16)で示される条件が満たされるか否かを判定し、以下の式(16)の条件が満たされる場合、斜線が存在しないと判定する。
UP(N/2)<0 and DOWN(N/2)<0 and MIDDLE(N/2)<0
・・・(16)
例えば、図28の場合、図中の斜線が付された画素の画素値を1とし、それ以外の画素の画素値を0とすると、式(16)の条件が満たされることになり(UP(N/2)=(1-0)×(0-1)<0 and DOWN(N/2)=(1-0)×(0-1)<0 and MIDDLE(N/2)=(1-0)×(0-1)<0)、局所エネルギは閾値よりも高いが、斜めのエッジが存在しないと判定されることになり、斜線が存在しないと判定される(図28においても、画素値が1となる画素が連続的に配置されておらず、いわゆるチェッカパターンとなっていることが示されている)。
一方、図29の場合、式(16)の条件が満たされないことになり(UP(N/2)=(0-0)×(0-1)=0 and DOWN(N/2)=(0-0)×(0-1)=0 and MIDDLE(N/2)=(1-1)×(1-1)=0)、斜めのエッジが存在すると判定されることになる(図29においても、画素値が1となる画素が連続的に配置されており、エッジが存在することが示されている)。
ステップS96において、斜線が存在しないと判定された場合、その処理は、ステップS97に進む。
ステップS97において、垂直方向補間部112の方向判別部123は、帯域制限部121により帯域制限された画像信号に基づいて、エッジ方向を試験的に計算する処理を実行し、検出した方向の情報を信頼度格付部124、方向性分布生成部125、および、空間分布生成部134に出力すると共に、検出した画素の情報を方向補間部123に出力する。具体的には、以下に示す演算は、x=N-1からxをデクリメントし、xが−1より大きい間は行われる。
Energy=ABS(up_line(N-x-1)−down_line(x))・・・(17)
上記の式(17)で計算されたエネルギの値のうち、最も小さいものが選択され、その2つの画素が対応する対角線の方向が局所的なエッジの方向と見なされる。
図30は、この場合の具体的な例を表している。この例においては、画素Y0,0の画素値(30)と、画素Y1,4の画素値(255)との差、画素Y0,1の画素値(150)と、画素Y1,3の画素値(230)との差、画素Y0,2の画素値(150)と、画素Y1,2の画素値(200)との差、画素Y0,3の画素値(200)と、画素Y1,1の画素値(200)との差、および画素Y0,4の画素値(255)と、画素Y1,0の画素値(30)との差が、それぞれ演算される。そしてそれらの値の絶対値のうち、最も小さい値(この例の場合、画素Y0,3と画素Y1,1を結ぶ方向)が局所的なエッジ方向と見なされる。
図31は、Hバッファ31に保持されている上行up_lineの3画素と下行down_lineの3画素との差から局所的なエッジ方向が推測される例を表している。図31の例においては、Nの値が3とされているが、このNの値としてより大きな値を用いることで、より正確に、かつより多くの方向のエッジの検出が可能となる。
ステップS97の処理で、エッジ方向が検出された場合、さらにステップS98において、方向補間部131は、その検出されたエッジ方向の画素を用いて、補間処理を行う(方向補間処理が行われる)。この方向補間処理は、エッジ方向に対応する2つの画素の画素値に基づいて、その間に位置する画素の画素値を補間することを意味する。例えば、図27の例では、画素Y0,3と画素Y1,1の画素値の平均値(200)が、両者の間の画素の画素値とされる。
次に、ステップS99に進み、信頼度格付部124は、構造コレクタ処理を実行する。この構造コレクタ処理は、座標(X+N/2,Y)に補間された画素と、その垂直の近傍画素、すなわち座標up_line(N/2)と、座標down_line(N/2)との関係を解析することで、更新された局所構造(ステップS98の方向補間処理で生成された画素とその上下の画素)の整合性をチェックする処理である。
すなわち、この構造コレクタ処理では、上行の中心画素から更新された画素を減算する処理が行われ、さらに、更新された画素から下行の中心画素を減算する処理が行われる。さらに、以上のようにして得られた2つの減算結果を乗算することで、垂直方向の変化を表す値V(N/2)が計算される。すなわち、ステップS98においては、次の式で示す演算が行われる。
V(N/2)=(up_line(N/2)−H-buffer(X+N/2,Y))
×(H-buffer(X+N/2,Y)−down_line(N/2))・・・(18)
ここで、H-buffer(X+N/2,Y)は、補間生成された更新されている画素の画素値である。
次に、ステップS100において、信頼度格付部124は、ステップS99での演算結果に基づいて、更新された局所構造の整合性があるか否かを判定する。この判定は、上記式(18)で演算された値V(N/2)が正であるか否かに基づいて行われる。値V(N/2)が正である場合には、整合性があると見なされ、ステップS101において、信頼度格付部124は、その補間画素の信頼度を1として方向性分布生成部125に出力する。
これに対して、ステップS100において、値V(N/2)が負であると判定された場合、整合性はないと見なされる。すなわち、局所方向の識別が誤っており、ステップS98で生成された画素値は、適切でないと判断される。この場合、信頼度格付部124は、ステップS102において、その補間画素の信頼度を0として方向性分布生成部125に出力する。
ステップS103において、注目画素に対する注目領域の全ての補間画素が補間されたか否かが判定され、注目領域の全ての補間画素が補間されていないと判定された場合、その処理は、ステップS91に戻り、全ての補間画素が補間されるまで、ステップS91乃至S103の処理が繰り返され、ステップS103において、全ての補間画素が補間されたと判定された場合、その処理は、ステップS104に進む。ここで、注目画素に対する注目領域とは、例えば、図32で示すP(画素数)×M(ライン)の範囲の補間画素である。尚、図32においては、白丸が注目画素(補間画素)を、黒丸が補間画素を、格子状に塗りつぶされた画素を原画像の画素(元々存在する画素)として示している。ステップS103において、全ての補間画素が補間されるということは、図中の黒丸で示される画素が全て補間されたことを示し、その処理は、ステップS104に進む。
ステップS104において、方向選択処理が実行される。
ここで、図33のフローチャートを参照して、方向選択処理について説明する。
ステップS131において、方向性分布生成部125は、方向性分布を生成する。すなわち、方向性分布生成部125は、これまで入力されたエッジの方向と、その信頼度の情報から、方向性分布を生成する。すなわち、方向性分布生成部125には、図34で示すように、補間画素の配置に対応して、それぞれの補間画素の補間方向と対応する信頼度の情報が入力されていることになる。
尚、図32においては、図中5画素×3ラインの補間画素が表示されているので、図34の左部には、この対応する15個の補間画素の配置が表示されている。また、図34の中央部には、各補間画素の補間方向が示されている。この補間画素の方向は、図35で示すように、注目画素について点対象となるように設定された方向に対応する番号であり、方向L0は、上段左端の補間画素と下段右端の補間画素を結ぶ垂直な直線上の方向であり、方向L1は、上段左から2番目の補間画素と下段右から2番目の補間画素を結ぶ直線上の方向であり、方向L2は、真上の補間画素と真下の補間画素を結ぶ直線上の方向であり、方向L3は、上段右から2番目の補間画素と下段左から2番目の補間画素を結ぶ直線上の方向であり、方向L4は、上段右端の補間画素と下段左端の補間画素を結ぶ直線上の方向である。また、図34の右部には、信頼度の分布が示されており、信頼度として1が報告された画素は、○に、信頼度として0が報告された画素には×が表示されている。
すなわち、図34によれば、補間画素の補間方向は、上段の左から4,3,4,4,3であり、中段の左から3,4,4,3,4であり、下段の左から4,4,4,4,4であることが示されている。また、信頼度は、上段の左から×,×,○,○,×であり、中断の左から、○,○,×,○,○であり、下段の左から○,○,○,○,×である。
この結果、方向性分布生成部125は、図34で示すように、各方向別につけられている○の数を示すヒストグラムからなる方向性分布を生成することにより、方向別の分布を示すことができる。すなわち、図34においては、方向L0は、○が0個、×が0個、方向L1は、○が0個、×が0個、方向L2は、○が0個、×が0個、方向L3は、○が2個、×が2個、方向L4は、○が8個、×が3個となる。
ステップS132において、空間分布生成部134は、空間分布生成処理を実行し、空間分布を生成し、生成した空間分布の情報を方向選択部126に供給する。
ここで、図36のフローチャートを参照して、空間分布生成処理について説明する。
ステップS151において、空間分布生成部134は、注目画素に対応する注目領域内のleft_upエリアにおける各画素の方向LIが、I=0乃至(N-3)/2となる画素数left_upをカウントする。
すなわち、今の場合、注目領域は、注目画素を中心として、5画素×3ラインの合計15画素の領域であるが、この場合、left_upエリアは、例えば、図37で示されるように、注目画素が存在する行の上行の左側の2画素である。尚、図37においては、left_up_areaと示されており、注目画素は、丸印が付された画素である。ステップS151においては、空間分布生成部134が、このleft_upエリアに存在する2画素の方向LIが、I=0乃至(N-3)/2となる、すなわち、今の場合、方向L0またはL1となる画素数left_upをカウントする。
ステップS152において、空間分布生成部134は、注目画素に対応する注目領域内のleft_downエリアにおける各画素の方向LIが、I=0乃至(N-3)/2となる画素数left_downをカウントする。
すなわち、left_downエリアは、例えば、図37で示されるように、注目画素が存在する行の下行の右側の2画素である。尚、図37においては、left_down_areaと示されている。ステップS152においては、空間分布生成部134が、このleft_downエリアに存在する2画素の方向LIが、I=0乃至(N-3)/2となる、すなわち、今の場合、方向L0またはL1となる画素数left_downをカウントする。
ステップS153において、空間分布生成部134は、注目画素に対応する注目領域内のleft_middleエリアにおける各画素の方向LIが、I=0乃至(N-3)/2となる画素数left_middleをカウントする。
すなわち、left_middleエリアは、例えば、図37で示されるように、注目画素が存在する行の5画素である。尚、図37においては、left_middle_areaと示されている。ステップS153においては、空間分布生成部134が、このleft_middleエリアに存在する5画素の方向LIが、I=0乃至(N-3)/2となる、すなわち、今の場合、方向L0またはL1となる画素数left_middleをカウントする。
ステップS154において、空間分布生成部134は、注目画素に対応する注目領域内のright_upエリアにおける各画素の方向LIが、I=(N+1)/2乃至(N-1)となる画素数right_upをカウントする。
すなわち、right_upエリアは、例えば、図38で示されるように、注目画素が存在する行の上行の右側の2画素である。尚、図38においては、right_up_areaと示されており、注目画素は、丸印が付された画素である。ステップS154においては、空間分布生成部134が、このright_upエリアに存在する2画素の方向LIが、I=(N+1)/2乃至(N-1)となる、すなわち、今の場合、方向L3またはL4となる画素数right_upをカウントする。
ステップS155において、空間分布生成部134は、注目画素に対応する注目領域内のright_downエリアにおける各画素の方向LIが、I=(N+1)/2乃至(N-1)となる画素数right_downをカウントする。
すなわち、right_downエリアは、例えば、図38で示されるように、注目画素が存在する行の下行の左側の2画素である。尚、図38においては、right_down_areaと示されている。ステップS155においては、空間分布生成部134が、このright_downエリアに存在する2画素の方向LIが、I=(N+1)/2乃至(N-1)となる、すなわち、今の場合、方向L3またはL4となる画素数right_downをカウントする。
ステップS156において、空間分布生成部134は、注目画素に対応する注目領域内のright_middleエリアにおける各画素の方向LIが、I=(N+1)/2乃至(N-1)となる画素数right_middleをカウントする。
すなわち、right_middleエリアは、例えば、図38で示されるように、注目画素が存在する行の5画素である。尚、図37においては、right_middle_areaと示されている。ステップS156においては、空間分布生成部134が、このright_middleエリアに存在する5画素の方向LIが、I=(N+1)/2乃至(N-1)となる、すなわち、今の場合、方向L3またはL4となる画素数right_middleをカウントする。
すなわち、以上の処理により、ステップS151乃至S153の処理においては、注目領域における注目画素からみて、左上がり方向に分類される方向L0とL1に属する画素の空間的な分布が、注目画素からみて、左上がり方向に位置する左上がりleft_upエリア、left_downエリア、および、left_middleエリアの、それぞれのエリア毎に求められることになる。また、ステップS154乃至S156の処理においては、注目領域における注目画素からみて、右上がり方向に分類される方向L3とL4に属する画素の空間的な分布が、注目画素からみて、右上がり方向に位置する右上がりright_upエリア、right_downエリア、および、right_middleエリアの、それぞれのエリア毎に求められることになる。
従って、例えば、図34の場合、left_upは0となり、left_middleは0となり、left_downは0となり、right_upは2となり、right_middleは5となり、right_downは2となる。
ここで、図33のフローチャートの説明に戻る。
ステップS133において、方向選択部126は、これらの方向性分布(補間方向と、対応する信頼度の分布)と空間分布とから以下のBalance関数を設定する。
すなわち、まず、方向選択部126は、以下の式(19)で示す注目画素(X,Y)に対応するBalance関数を設定する。
Balance(X,Y)=right_balance-left_balance
right_balance=right_up+ right_down+ right_middle (if Case1)
or
right_balance=0 (if Case2)
Case1:right_up>th-ru and right_middle>th-rm
or right_middle>th-rm and right_down>th-rd
Case2:otherwise Case1
left_balance=left_up+left_down+ left_middle (if Case3)
or
left_balance=0 (if Case4)
Case3:left_up>th-lu and left _middle>th-lm
or left _middle>th-lm and left _down>th-ld
Case4:otherwise Case3
・・・(19)
ここで、th-ruは、画素数right_upの所定の閾値を示し、th-rmは、画素数right_middleの所定の閾値を示し、th-rdは、画素数right_downの所定の閾値を示し、th-luは、画素数left_upの所定の閾値を示し、th-lmは、画素数left_middleの所定の閾値を示し、th-ldは、画素数left_downの所定の閾値を示す。
すなわち、空間分布に基づいて、左上がりのエッジの空間的な分布を示すleft_balanceは、left_upエリアにおける画素数とleft_middleエリアにおける画素数が所定数を超えているか、または、left_middleエリアにおける画素数とleft_downエリアにおける画素数が所定数を超えているとき、left_upエリアにおける画素数とleft_middleエリアにおける画素数とleft_downエリアにおける画素数の合計となり、それ以外のとき、0となり、右上がりのエッジの空間的な分布を示すright_balanceは、right_upエリアにおける画素数とright_middleエリアにおける画素数が所定数を超えているか、または、right_middleエリアにおける画素数とright_downエリアにおける画素数が所定数を超えているとき、right_upエリアにおける画素数とright_middleエリアにおける画素数とright_downエリアにおける画素数の合計となり、それ以外のとき、0となることが示されており、Balance関数は、right_balanceとleft_balanceの差分となっていることが示されている。
ステップS134において、方向選択部126は、Balance(X,Y)が正の値であるか否かを判定し、例えば、正の値であると判定した場合、ステップS135において、図35で定義する方向LIのうち、Iが、I=(N+1)/2からN-1の範囲の中で最も信頼度の高い方向を選択する。
一方、ステップS134において、正の値ではないと判定された場合、ステップS136において、図35で定義する方向LIのうち、Iが、I=0から(N-3)/2の範囲の中で最も信頼度の高い方向を選択する。
すなわち、式(19)で定義される関数は、垂直方向を中心として、方向を示す矢印の上端の位置を方向L2で左右に分けた場合、左右のどちら側に信頼性の傾向があるかを示すものであり、例えば、図35で定義する方向L0とL1のグループ全体の信頼性と、方向L3,L4のグループ全体の信頼性のそれぞれの和をとった値の差分をステップS135の処理により、求めて、その大小比較から、垂直方向に対して左右のどちらに傾いているかを求め、信頼性の傾向を示すグループの中から、最も信頼性の高い方向が選択されるようになっている。
ステップS137において、方向選択部126は、最も信頼性の高い方向が複数に存在するか否かを判定し、例えば、複数の存在する場合、ステップS117において、選択された複数の最も信頼性の高い方向の中から、最も垂直方向に近い方向を選択する。一方、ステップS137において、最も信頼性の高い方向が複数に存在しない場合は、ステップS138の処理がスキップされて、ステップS135またはS136の処理で選択された方向がそのまま選択される。すなわち、信頼性の程度が同じ方向があった場合は、垂直方向に近いものが選択される。
ステップS139において、方向選択部126は、例外条件に含まれるか否かを判定する。すなわち、方向選択部126は、以下の式(20)乃至式(22)のいずれかを満たす場合、例外であると判定し、ステップS140において、垂直方向(図35の方向L2)を選択する。
Population_LI(I=(N-1)/2)−Population(Best_Dir)≧−1
・・・(20)
Tendency(X,Y)<(PM)/3・・・(21)
Total_Population(X,Y)<(PM)/3・・・(22)
ここで、Population_LI(I=(N-1)/2)は、垂直方向の信頼度であり、Population(Best_Dir)は、ステップS131乃至S138の処理で選択された方向の信頼度である。または、Tendency(X,Y)(以下、Tendency関数とも称する)は、Balance関数が正の場合は、Σ(I=(N+1)/2,N-1)(Population(LI))を示し、負の場合は、Σ(I=0,(N-3)/2)(Population(LI))を示す。すなわち、方向を垂直方向に左右のグループに分けたときの信頼性の高いグループの信頼度の和である。Total_Population(X,Y)は、注目画素が(X,Y)の時の信頼度の和である。
すなわち、式(20)が満たされる場合、ステップS131乃至S138の処理で選択された方向の信頼度よりも垂直方向の信頼度の方が高いことになるので、垂直方向の方がより信頼度の高い方向の選択となる。また、式(21),式(22)が満たされる場合、信頼性の高いグループの信頼度の和が所定の閾値である(PM)/3よりも小さいことになるので、全体として比較できる精度の画素がなかったものと判断して、垂直方向を選択する。尚、閾値(PM)/3は、他の値に設定するようにしてもよい。
ステップS141において、方向選択部126は、選択された方向の情報を斜補間部128に出力する。
すなわち、図34の場合、空間分布は、left_upが0、left_middleが0、left_downが0、right_upが2、right_middleが5、right_downが2となる。ここで、th-ru=th-rm=th-rd=th-lu=left_up=th-lmが、いずれも1であるとき、Balance関数は、正となる(ステップS134の処理)ので、方向L3,L4のグループから最も信頼性の高い方向として方向L4が選択されることになる。また、方向L4と同じ信頼性のものは無く、さらに、例外条件に当たらないので、方向L4が選択されることになる。
また、例えば、方向性分布が図40で示されるような場合、補間画素の補間方向は、上段の左から3,3,0,0,0であり、中段の左から0,0,0,0,0であり、下段の左から0,0,0,3,3であることが示されている。また、信頼度は、上段の左から○,○,○,○,×であり、中断の左から、×,○,○,○,○であり、下段の左から○,○,×,×,×である。
この結果、方向性分布生成部125は、図41で示すように、各方向別につけられている○の数を示すヒストグラムからなる方向性分布を生成することにより、方向別の分布を示すことができる。すなわち、図41においては、方向L0は、○が8個、×が3個、方向L1は、○が0個、×が0個、方向L2は、○が0個、×が0個、方向L3は、○が2個、×が2個、方向L4は、○が0個、×が0個となる。
空間分布は、left_upが0、left_middleが5、left_downが0、right_upが0、right_middleが0、right_downが0となるので、閾値th-ru=th-rm=th-rd=th-lu=left_up=th-lmが、いずれも1であるとき、Balance関数は、0となるので、正とならない(ステップS134の処理)ので、方向L0,L1のグループから最も信頼性の高い方向として方向L1が選択されることになる。また、方向L1と同じ信頼性のものは無く、さらに、例外条件に当たらないので、方向L1が選択されることになる。
ここで、図25のフローチャートの説明に戻る。
ステップS105において、線形補間部127は、注目画素に対して垂直方向の上下に存在する画素間の平均画素値を線形補間画素として求めて合成部130に出力し、同時に、斜補間部128は、方向選択部126より入力された選択された方向に存在する画素間の平均画素値を斜補間画素値として合成部に出力する。
すなわち、図39の場合、方向L4が選択されるので、図35のように注目画素が存在する場合、斜補間部128は、図35の上段のライン上にある右端の画素と、下段のライン上にある左端の画素の平均画素値を斜補間画素値として出力することになる。
ステップS106において、斜重み付け部129は、以下の式(23)で示すように、注目画素(X,Y)の斜方向の重みweight_slant(X,Y)を設定し、合成部130に出力する。
weight_slant(X,Y)=ABS(Balance(X,Y))/Total_population(X,Y)
(或いは、weight_slant(X,Y)=ABS(Tendency(X,Y)/Total_population(X,Y))
・・・(23)
すなわち、斜方向の重みは、全信頼度に対するBalance関数(或いは、Tendency関数)の絶対値の割合として設定される。
ステップS107において、合成部130は、以下の式(24)の演算により、線形補間部127より入力された線形補間画素と斜補間画素とを重み付けして合成し、補間画素として出力する。
H_buffer(X,Y)
=(1-weight_slant(X,Y))×(h-buffer(X,Y-1)+h-buffer(X,Y+1))
+weight_slant(X,Y)×(h-buffer(X+Best_Dir-(N-1)/2,Y-1)
+h-buffer(X-Best_Dir-(N-1)/2,Y+1))
・・・(24)
ここで、h-buffer(X,Y-1)とh-buffer(X,Y+1)は、注目画素の上下に存在する画素値であり、h-buffer(X+Best_Dir-(N-1)/2,Y-1)とh-buffer(X-Best_Dir-(N-1)/2,Y+1)は、注目画素からみて選択された方向の対角線上で、かつ、上下のライン上に存在する画素値である。
すなわち、線形補間画素にかかる重みは、(1-weight_slant(X,Y))で表現できるので、線形補間で求められた画素値には、線形補間に係る重みとして(1-weight_slant(X,Y))を乗じ、斜補間画素にかかる重みとしてweight_slant(X,Y)が乗じられて、線形和をとった合成補間画素を最終的な補間画素とする。これにより、垂直方向と斜方向の補間が、その重みによりバランスよく合成されるため、正確な補間画素を生成することが可能となる。
また、上述した図41の場合、Balance関数は、0となるので、斜補間部128により補間生成された画素値に対しての重みは0となるため、この場合は、線形補間部127により補間生成された画素値がそのまま合成された画素値として出力される。すなわち、上述した式(19)の条件(Case1乃至4を考慮した条件)により、空間分布が考慮されて、斜補間により生成される画素値の信頼性が評価されるので、斜補間については、ある程度信頼性が認められる条件でのみ使用されることとなり、例えば、図41で示されるように、方向性分布において、方向L0にある程度局在しているが、分布が分離しており、方向性分布が方向L0乃至L4のいずれかの傾向をしめしているとも言い難いようなとき、斜補間による画素値の重みを小さくすることで、線形補間により求められる画素値とすることで、結果として、より正確に補間画素を生成することが可能となる。
Hバッファ31の個々の未知の行の各画素を求めるため、同様の処理が繰り返し実行される。
図42は、図25のフローチャートで示されるケース2の場合の処理を、原画像I_image、Hバッファ31、2Yバッファ41、および仮想垂直2倍拡大画像2Y_imageの関係から表している。Hバッファ31のY行が仮想垂直2倍拡大画像2Y_imageの所定の行2Y_lineと所定の関係にある場合には、原画像I_imageのn行と、n+1行に基づいて、方向補間処理が行われ、得られたデータは2Yバッファ41に格納される。そして、2Yバッファ41に格納されたデータがHバッファ31の行Yにコピー(格納)される。
尚、以上の例においては、注目領域が5画素×3ラインの場合について説明してきたが、例えば、注目領域は、それ以外の画素数からなる領域でもよく、例えば、図43で示されるように、17画素×11ラインであってもよく、そのような場合、balance関数を設定するためのleft_upエリア、left_middleエリア、left_downエリア、right_upエリア、right_middleエリア、および、right_downエリアは、例えば、図43で示されるように、それぞれ、left_up_area(注目領域の左上部の16画素)、middle_area(注目領域の中央部の27画素)、left_down_area(注目領域の右下部の16画素(middle areaは、leftもrightも共通))、right_up_area(注目領域の右上部の16画素)、middle_area(注目領域の中央部の27画素)、right_down_area(注目領域の左下部の16画素)と示された領域となるようにしてもよい。すなわち、各領域は、注目領域の中で、注目画素に対して斜方向のエッジが存在するであろう領域が、それぞれのエリアとなるように設定されればよい。図43においては、注目画素が黒色のマスで示されている。
また、エッジ方向の求め方としては、図30で示されるように、式(17)により、注目画素を中心として、対角方向に存在する1組のペアとなる画素間の画素値の差分値のうち、最も小さくなるペアの方向をエッジの方向としてきたが、方向ごとに複数の画素間の差分を使ってエッジの方向を求めるようにしてもよく、例えば、図44乃至図48で示されるように、複数の画素間の差分値を求めて、それらの合計を使用するようにしても良い。すなわち、図44においては、画素Y0,0と画素Y1,3の画素間差分と画素Y0,1と画素Y1,4の画素間差分の平均を求め、図45においては、画素Y0,1と画素Y1,3の画素間差分と画素Y0,2と画素Y1,4の画素間差分の平均を求め、図46においては、画素Y0,0と画素Y1,1、画素Y0,1と画素Y1,1、画素Y0,2と画素Y1,2、画素Y0,3と画素Y1,3、および、画素Y0,4と画素Y1,4のそれぞれの画素間差分の平均を求め、図47においては、画素Y0,2と画素Y1,0の画素間差分と画素Y0,3と画素Y1,2の画素間差分の平均を求め、さらに、図48においては、画素Y0,3と画素Y1,0の画素間差分と画素Y0,4と画素Y1,1の画素間差分の平均を求め、それぞれの平均が最小となるペアの組み合わせが存在する方向をエッジの方向と判定するようにしても良い。
次に、図49のフローチャートを参照して、ケース3の処理について説明する。このケースは、2n<2Y_line<2n+1、または、2n-1<2Y_line<2nの場合、つまり、Hバッファ31中の行Yの値が、仮想垂直2倍拡大画像2Y_imageの行2Y_lineのいずれにも対応せず、かつ、原画像I_imageのどの行とも対応しない場合である。
この場合、ステップS161において、高速垂直アップサンプラ111は、2Y_lineの値が2nより大きく、且つ2n+1より小さいか否かを判定する。2Y_lineの値が2nより大きく、且つ2n+1より小さい場合、高速垂直アップサンプラ111は、仮想垂直2倍拡大画像2Y_imageの2n+1行と2n行から、Hバッファ31のY行を生成する。
そこで、この場合、ステップS162において、高速垂直アップサンプラ111は、仮想垂直2倍拡大画像2Y_imageの2n+1行を、隣接する上行2n行と、下行2n+2行(原画像I_imageにおけるn行とn+1行)を用いて、図25のケース2のフローチャートに示すステップS91乃至ステップS107の処理で計算する。ステップS162で計算された結果は、Hバッファ31における次のn+1行の計算に使用する可能性があるので、ステップS163において、2Yバッファ41に格納される。
さらに、ステップS164において、高速垂直アップサンプラ111は、ステップS162で計算された2n+1行(2Yバッファ41に記憶されている値)と、仮想垂直2倍拡大画像2Y_imageの2n行(原画像I_imageのn行)から、Hバッファ31のY行を次式の式(25)から演算し、Hバッファ31のY行に記憶させる。
H_buffer(X,Y)=(2Y_line−2n)×2Y-buffer(X)+(2n+1−2Y_line)×I_image(X,n)
・・・(25)
このように、ステップS162乃至S164の処理では、原画像I_imageを垂直方向に2倍に拡大した画像を生成し、その画像と原画像I_imageとから、alpha_Z倍の画像を生成していることになる。
一方、ステップS161において、2Y_lineが2nより大きく、且つ2n+1より小さいと判定されなかった場合(2Y_lineが2n-1より大きく、2nより小さいと判定された場合)、高速垂直アップサンプラ111は、仮想垂直2倍拡大画像2Y_imageの2n-1行と2n行から、Hバッファ31のY行を生成する。この2n-1行は、Hバッファ31中の前行を求める際に計算され、2Yバッファ41に既に格納されている場合がある。そこでステップS165において、高速垂直アップサンプラ111は、2n-1行が2Yバッファ41に既に格納されているか否かを判定し、格納されている場合には、ステップS168において、2n-1行のデータを2Yバッファ41から取り出す。
これに対して、ステップS165において、2n-1行のデータが2Yバッファ41にまだ格納されていないと判定された場合、ステップS166に進み、高速垂直アップサンプラ111は、仮想垂直2倍拡大画像2Y_imageの2n-1行を、上行2n-2行と下行2n行(原画像I_imageのn-1行とn行)を用い、図25のケース2のフローチャートのステップS91乃至ステップS107の処理により計算する。ステップS166で計算された2n-1行の値は、ステップS167において、Hバッファ31における次のY+1行の計算に使用する可能性があるので、高速垂直アップサンプラ111は、2Yバッファ41に格納する。
ステップS167、またはステップS168の処理の後、ステップS169に進み、高速垂直アップサンプラ111は、得られた2n-1行と、仮想垂直2倍拡大画像2Y_imageの2n行(原画像I_imageのn行)からHバッファ31のY行が次式に従って補間する。
H-buffer(X,Y)=(2n−2Y_line)×2Y−buffer(X)+(2Y_line−(2n−1))×I_image(X,n)
・・・(26)
この処理は、X=0からIn_widthより小さい値である期間、Xの値をインクリメントしつつ行われる。
Hバッファ31の個々の未知の行の各画素を求めるため、(−1<X<In_width−N+1)と、(−1<Y<alpha_Z×In_height-1)の条件を満たす座標(X+N/2,Y)で、同様の処理が繰り返し実行される。
このように、ケース3の処理においては、仮想垂直2倍拡大画像2Y_image中の2n行と2n+1行、または2n-1行と2n行を用いて、重み付け補間が実行される。
以上の図49のケース3に示す処理を模式的に表すと、図50に示すようになる。仮想垂直2倍拡大画像2Y_imageの2Y_line行の値が2nより大きく、且つ2n+1関係の場合とHバッファ31のY行とが所定の原画像I_imageのn行とn+1行から方向補間処理により2n+1行、または2n-1行のデータが生成され、2Yバッファ41に記憶される。そして、2Yバッファ41に記憶された値と、仮想垂直2倍拡大画像2Y_imageの2n行のデータから、Hバッファ31のY行のデータが重み付け補間される。
図12のフローチャートに戻って、以上のようにして、ステップS24の高速垂直アップサンプリング処理が行われた後、ステップS25に進み、高速水平アップサンプリング処理が実行される。この高速水平アップサンプリング処理は、高速水平アップサンプリング処理部14により実行される。高速水平アップサンプリング処理は、図51に示されるように、画素を水平方向に補間する処理である。
図52は、高速水平アップサンプリング処理の詳細を表している。ステップS181で高速水平アップサンプラ181は、Vバッファ51(後述する図54)と2Xバッファ61(後述する図66)を作成する。Vバッファ51は、サイズが、(alpha_Z×In_width)×(alpha_Z×In_height)とされ、2Xバッファ61は、そのサイズが1×(alpha_Z×In_height)とされる。2Xバッファ61には、仮想水平2倍拡大画像2X_imageのX座標(奇数座標)の一列のデータが格納される。
ステップS182において、ケース1乃至ケース3に対応する処理が実行される。ケース1乃至ケース3のいずれの処理が実行されるかは、次式を演算することにより判断される。
2X_column=X×2/alpha_Z・・・(27)
上記演算により求められた2X_columnの値が整数であり、且つ偶数である場合(2X_column=2nであり、nが整数である場合)、ケース1とされ、2X_columnが整数且つ奇数である場合(2X_column=2n+1であり、nが整数である場合)、ケース2とされ、2X_columnが実数である場合(その他の場合)、ケース3とされる。
ケース1の場合、図53のフローチャートに示す処理が実行される。このケースは、仮想水平2倍拡大画像2X_imageにおける2X_column=2n列が、前もって計算されたHバッファ31の2X_column/2=n列と対応する場合である。この場合、高速水平アップサンプリング処理部14は、ステップS191において、Hバッファ31の2X_column/2列をVバッファの列Xにコピーする。
図54は、このケース1の処理を概念的に表している。仮想水平2倍拡大画像2X_imageにおける2n列が、Vバッファ51のn列と対応する場合、Hバッファ31のn列が、Vバッファ51の列Xにコピーされる。
図55は、図52のステップS182のケース2のVバッファ51に対する処理のフローチャートを示している。このケースは、Vバッファ51中の列Xの値を、仮想水平2倍拡大画像2X_image中の所定の列(2n+1)と対応させることができるが、Hバッファ31中の所定の列の値に対応させることはできない場合である。
この場合、ステップS201において、高速水平アップサンプラ151は、Hバッファ31中の所定の範囲(N画素)の左列left_column、および右列right_columnを抽出する。左列left_columnの中心座標は、(n,Y+N/2)とされ、右列right_columnの矩形の中心座標は、(n+1,Y+N/2)とされる。
次にステップS202において、水平方向補間部152のエッジ検出部162は、帯域制限部161より帯域制限された信号に基づいて、局所エネルギE(N)を、左列left_columnの個々の画素から、対角線上に位置する右列right_columnの画素を減算し、その絶対値の和を演算して求める。すなわち、この処理では次式が演算される。
E(N)=Σ(I=0,N-1)ABS(left_column(I)−right_column(N-I-1))
・・・(28)
次にステップS203において、エッジ検出部162は、エネルギE(N)が予め設定された閾値Tより大きいか否かを判定する。エネルギE(N)が閾値Tと等しいか、それより小さい場合、その領域はエッジを含まない平坦な低エネルギ領域と見なされる。この場合、潜在的なエッジの方向を計算する必要がない。このためステップS204に進み、方向判別部163が、エッジ検出部162の判定結果に基づいて、線形補間部167に、Vバッファ51中の座標(X,Y+N/2)の画素データとして、座標(X,Y+N/2)を中心として、左右方向に幅2m(mは、任意)画素の範囲に存在する画素の線形和(ただし、各係数の和は1)を演算させ、Vバッファ51のその座標(X,Y+N/2)に格納させると共に、水平方向(後述する図65におけるL2の方向を示す方向情報を信頼度格付部164、および、方向性分布生成部165に出力する。また、信頼度格付部164は、この補間画素について信頼度が低いことを示す0を方向性分布生成部165に出力する。
すなわち、次式に示すように、新しい画素(X,Y+N/2)の画素値が演算される。
V-buffer(X+N/2,Y)=I_image(n-m,Y+N/2)×Cn-m+I_image(n-m,Y+N/2)×Cn-m+1
+・・・+I_image(n+m-1,Y+N/2)×Cn+m-1 +I_image(n+m,Y+N/2)×Cn+m
(ただし、Cn-m+Cn-m+1+・・・+Cn+m-1+Cn+m=1)
・・・(29)
ここで、I_image(n,Y+N/2)は、座標(X,Y+N/2)上の画素の右列に隣接する画素の画素値であり、I_image(n-1,Y+N/2)は、座標(X,Y+N/2)上画素の左列に隣接する画素の画素値であり、I_image(X+N/2,n+i)(iは、-m≦i≦m)は、座標(X+N/2,Y)の左右方向に2m画素分並んだ各画素の画素値を示している。
すなわち、局所エネルギE(N)が閾値Tと等しいか、それより小さい場合、その領域は、エッジを含まない平坦な低エネルギの領域と見なされるので、画素値を求めようとする画素の画素値は、垂直方向に同一の位置の左右方向に並ぶそれぞれm画素ずつの画素値の線形和をHバッファ31のその座標(X,Y+N/2)に格納する。
ステップS203において、エネルギE(N)が閾値Tより大きいと判定された場合、その領域は潜在的にエッジを含んでいる高エネルギ領域と見なされる。そこで、この場合、ステップS205に進み、座標(X,Y+N/2)に対応する画素上に斜線となるエッジが存在するか否かを判定するための斜線検出処理が実行される。
ここで、図56のフローチャートを参照して、斜線検出処理について説明する。
ステップS231において、量子化部172は、入力された各画素の画素値のうち、注目画素である座標(X,Y+N/2)の左右とその画素の左右の上下の画素の画素値を、例えば、所定の値で割るなどして、量子化し斜線検出部173に出力する。
ステップS232において、斜線検出部173は、以下の式(30)を演算して、注目画素の左列の真左の画素と、真左の画素の上下に隣接する画素間のそれぞれの差分の積LEFT(N/2)を求める。
LEFT(N/2)=(PA−PB)×(PB−PC)
・・・(30)
ここで、PA,PB,PCは、図57で示されるように、生成しようとする注目画素の左列の画素(入力された原信号の画素)である。すなわち、図57においては、注目画素が丸印で示されている(注目画素は、生成される画素であって、原信号のように実在する画素ではない)。従って、上記の式(30)は、その左列の画素である画素PAと画素PB間の画素間差分と、画素PBと画素PC間の画素間差分との積が、LEFT(N/2)として求められている。
ステップS233において、斜線検出部173は、以下の式(31)を演算して、注目画素の右列の真右の画素と、真右の画素の上下に隣接する画素間のそれぞれの差分の積RIGHT(N/2)を求める。
DOWN(N/2)=(PD−PE)×(PE−PF)
・・・(31)
ここで、PD,PE,PFは、図57で示されるように、注目画素の右列の画素(入力された原信号の画素)である。従って、上記の式(31)では、その右列の画素である画素PDと画素PE間の画素間差分と、画素PEと画素PF間の画素間差分との積が、RIGHT(N/2)として求められている。
ステップS234において、斜線検出部173は、以下の式(32)を演算することにより、注目画素と、その上下の画素間の画素値の差分の積MIDDLE(N/2)を求める。
MIDDLE(N/2)
=(0.5×(PA+PD)−0.5×(PB+PE))×(0.5×(PB+PE)−0.5×(PE+PF))
・・・(32)
ここで、(0.5×(PA+PD)),(0.5×(PB+PE)),(0.5×(PE+PF))は、図57で示されるように、注目画素の上の画素Pdown、注目画素、および、下に隣接する画素Pupのそれぞれの画素値である。従って、上記の式(32)では、注目画素の下側に隣接する画素間の画素間差分と、注目画素の上側に隣接する画素間の画素間差分との積が、MIDDLE(N/2)として求められている。
ここで、図55のフローチャートの説明に戻る。
ステップS206において、斜線検出部173は、斜線が存在するか否かを判定し、判定結果を方向判別部163、および、斜重み付け部169に出力する。より詳細には、斜線検出部173は、以下の式(33)で示される条件が満たされるか否かを判定し、以下の式(33)の条件が満たされる場合、斜線が存在しないと判定する。
LEFT(N/2)<0 and RIGHT(N/2)<0 and MIDDLE(N/2)<0
・・・(33)
例えば、図57の場合、図中の斜線が付された画素の画素値を1とし、それ以外の画素の画素値を0とすると、式(33)の条件が満たされることになり(LEFT(N/2)=(1-0)×(0-1)<0 and RIGHT(N/2)=(1-0)×(0-1)<0 and MIDDLE(N/2)=(1-0)×(0-1)<0)、局所エネルギは閾値よりも高いが、斜めのエッジが存在しないと判定されることになり、斜線が存在しないと判定される(図57においても、画素値が1となる画素が連続的に配置されておらず、いわゆるチェッカパターンとなっていることが示されている)。
一方、図58の場合、式(33)の条件が満たされないことになり(LEFT(N/2)=(0-0)×(0-1)=0 and RIGHT(N/2)=(0-0)×(0-1)=0 and MIDDLE(N/2)=(1-1)×(1-1)=0)、斜めのエッジが存在すると判定されることになる(図58においても、画素値が1となる画素が連続的に配置されており、エッジが存在することが示されている)。
ステップS206において、斜線が存在しないと判定された場合、その処理は、ステップS207に進む。
ステップS207において、水平方向補間部152の方向判別部163は、帯域制限部161により帯域制限された画像信号に基づいて、エッジ方向を試験的に計算する処理を実行し、検出した方向の情報を信頼度格付部164、方向性分布生成部165、および、空間分布生成部174に出力すると共に、検出した画素の情報を方向補間部163に出力する。具体的には、次式にしたがってエッジ方向計算処理が実行される。
Energy=ABS(left_column(N−x−1)−right_column(x))・・・(34)
上記演算は、x=N−1からxの値を順次デクリメントし、xが−1より大きい間繰り返される。具体的には、図59に示されるように、左列の画素から対角線上の右列の画素を減算する処理が、右列の上側から実行される。
計算されたエネルギのうち、最も小さい値に対応する画素の対角線の方向が局所的なエッジの方向と判定される。図59においては、N=3とされているが、このNの値をより大きい値とすることで、より多くの方向の判定が可能となる。
ステップS207の処理で、エッジ方向が検出された場合、さらにステップS208において、方向補間部171は、その検出されたエッジ方向の画素を用いて、補間処理を行う(方向補間処理が行われる)。
次に、ステップS209において、信頼度格付部164は、構造コレクタ処理を実行する。すなわちVバッファ51中の座標(X,Y+N/2)に補間された画素と、その垂直方向の近傍画素である座標left_column(N/2)の画素、およびright_column(N/2)の画素との関係を解析することで局所構造の整合性をチェックする処理が行われる。このため、次式に従って、補間された画素を左列の中心の画素から減算し、右列の中心画素を補間された画素から減算することで2つの減算結果を得、さらに2つの減算結果を乗算することで、水平方向の変化を表す値H(N/2)が計算される。
H(N/2)=(left_line(N/2)−V-buffer(X+N/2,Y))
×(V-buffer(X+N/2,Y)−right_column(N/2))・・・(35)
ステップS210において、ステップS209で演算された値H(N/2)に基づき、補間された局所構造に整合性があるか否かが判定される。具体的には、値H(N/2)が正であるか否かが判定される。値H(N/2)が正である場合には、ステップS208の方向補間処理で求められた画素は正しい(整合性がある)ものとされ、ステップS211において、その補間画素の信頼度を1として方向性分布生成部165に出力する。
これに対して、ステップS210において、値H(N/2)が負であると判定された場合(整合性がない)、すなわち、ステップS208の方向補間処理で生成された画素値は適切でないと判定された場合、ステップS212に進み、信頼度格付部164は、その補間画素の信頼度を0として方向性分布生成部165に出力する。
ステップS213において、注目画素に対する注目領域の全ての補間画素が補間されたか否かが判定され、注目領域の全ての補間画素が補間されていないと判定された場合、その処理は、ステップS201に戻り、全ての補間画素が補間されるまで、ステップS201乃至S213の処理が繰り返され、ステップS213において、全ての補間画素が補間されたと判定された場合、その処理は、ステップS214に進む。ここで、注目画素に対する注目領域とは、例えば、図60で示すM(画素数)×P(ライン)の範囲の補間画素である。尚、図60においては、白丸が注目画素(補間画素)を、黒丸が補間画素を、格子状に塗りつぶされた画素を原画像の画素(元々存在する画素)として示している。ステップS213において、全ての補間画素が補間されるということは、図中の黒丸で示される画素が全て補間されたことを示す。
ステップS214において、方向選択処理が実行される。
ここで、図61のフローチャートを参照して、方向選択処理について説明する。
ステップS251において、方向性分布生成部165は、方向性分布を生成する。すなわち、方向性分布生成部165は、これまで選択されたエッジの方向と、その信頼度の情報から、方向性分布を生成する。
尚、この方向性分布は、図32,図34,図35,図39を参照して説明したものと基本的には同様のものであるが、水平方向と垂直方向の関係が反転している。すなわち、この補間画素の方向は、図62で示すように、注目画素について点対象となるように設定された方向に対応する番号であり、方向L0は、右列上端の補間画素と左列下端の補間画素を結ぶ垂直な直線上の方向であり、方向L1は、右列上から2番目の補間画素と左列下から2番目の補間画素を結ぶ直線上の方向であり、方向L2は、真右の補間画素と真左の補間画素を結ぶ直線上の方向であり、方向L3は、右列下から2番目の補間画素と左列上から2番目の補間画素を結ぶ直線上の方向であり、方向L4は、右列下端の補間画素と左列上端の補間画素を結ぶ直線上の方向である。
ステップS252において、空間分布生成部174は、空間分布生成処理を実行し、空間分布を生成し、生成した空間分布の情報を方向選択部166に供給する。
ここで、図63のフローチャートを参照して、空間分布生成処理について説明する。
ステップS271において、空間分布生成部164は、注目画素に対応する注目領域内のright_upエリアにおける各画素の方向LIが、I=0乃至(N-3)/2となる画素数right_upをカウントする。
すなわち、今の場合、注目領域は、注目画素を中心として、5画素×3ラインの合計15画素の領域であるが、この場合、left_upエリアは、例えば、図64で示されるように、注目画素が存在する行の右列の上側の2画素である。尚、図64においては、right_up_areaと示されており、注目画素は、丸印が付された画素である。ステップS271においては、空間分布生成部164が、このright_upエリアに存在する2画素の方向LIが、I=0乃至(N-3)/2となる、すなわち、今の場合、方向L0またはL1となる画素数left_upをカウントする。
ステップS272において、空間分布生成部134は、注目画素に対応する注目領域内のright_downエリアにおける各画素の方向LIが、I=0乃至(N-3)/2となる画素数right_downをカウントする。
すなわち、right_downエリアは、例えば、図64で示されるように、注目画素が存在する行の左列の下側の2画素である。尚、図64においては、right_down_areaと示されている。ステップS272においては、空間分布生成部164が、このright_downエリアに存在する2画素の方向LIが、I=0乃至(N-3)/2となる、すなわち、今の場合、方向L0またはL1となる画素数right_downをカウントする。
ステップS273において、空間分布生成部164は、注目画素に対応する注目領域内のright_middleエリアにおける各画素の方向LIが、I=0乃至(N-3)/2となる画素数right_middleをカウントする。
すなわち、right_middleエリアは、例えば、図64で示されるように、注目画素が存在する列の5画素である。尚、図64においては、right_middle_areaと示されている。ステップS273においては、空間分布生成部164が、このright_middleエリアに存在する5画素の方向LIが、I=0乃至(N-3)/2となる、すなわち、今の場合、方向L0またはL1となる画素数right_middleをカウントする。
ステップS274において、空間分布生成部164は、注目画素に対応する注目領域内のleft_upエリアにおける各画素の方向LIが、I=(N+1)/2乃至(N-1)となる画素数left_upをカウントする。
すなわち、left_upエリアは、例えば、図65で示されるように、注目画素が存在する行の左行の右側の2画素である。尚、図65においては、left_up_areaと示されており、注目画素は、丸印が付された画素である。ステップS274においては、空間分布生成部164が、このleft_upエリアに存在する2画素の方向LIが、I=(N+1)/2乃至(N-1)となる、すなわち、今の場合、方向L3またはL4となる画素数left_upをカウントする。
ステップS275において、空間分布生成部164は、注目画素に対応する注目領域内のleft_downエリアにおける各画素の方向LIが、I=(N+1)/2乃至(N-1)となる画素数left_downをカウントする。
すなわち、left_downエリアは、例えば、図65で示されるように、注目画素が存在する行の右列の下側の2画素である。尚、図65においては、left_down_areaと示されている。ステップS275においては、空間分布生成部164が、このleft_downエリアに存在する2画素の方向LIが、I=(N+1)/2乃至(N-1)となる、すなわち、今の場合、方向L3またはL4となる画素数left_downをカウントする。
ステップS276において、空間分布生成部164は、注目画素に対応する注目領域内のleft_middleエリアにおける各画素の方向LIが、I=(N+1)/2乃至(N-1)となる画素数left_middleをカウントする。
すなわち、left_middleエリアは、例えば、図65で示されるように、注目画素が存在する行の5画素である。尚、図65においては、left_middle_areaと示されている。ステップS276においては、空間分布生成部164が、このleft_middleエリアに存在する5画素の方向LIが、I=(N+1)/2乃至(N-1)となる、すなわち、今の場合、方向L3またはL4となる画素数left_middleをカウントする。
すなわち、以上の処理により、ステップS271乃至S273の処理においては、注目領域における注目画素からみて、右上がり方向に分類される方向L0とL1に属する画素の空間的な分布が、注目画素からみて、右上がり方向に位置する右上がりright_upエリア、right_downエリア、および、right_middleエリアの、それぞれのエリア毎に求められることになる。また、ステップS274乃至S276の処理においては、注目領域における注目画素からみて、左上がり方向に分類される方向L3とL4に属する画素の空間的な分布が、注目画素からみて、左上がり方向に位置する左上がりleft_upエリア、left_downエリア、および、left_middleエリアの、それぞれのエリア毎に求められることになる。
ここで、図61のフローチャートの説明に戻る。
ステップS253において、方向選択部166は、これらの方向性分布(補間方向と、対応する信頼度の分布)から以下のBalance関数を設定する。
すなわち、まず、方向選択部166は、以下の式(36)で示す注目画素(X,Y)に対応するBalance関数を設定する。
Balance(X,Y)=left_balance- right_balance
right_balance=right_up+ right_down+ right_middle (if Case1)
or
right_balance=0 (if Case2)
Case1:right_up>th-ru and right_middle>th-rm
or right_middle>th-rm and right_down>th-rd
Case2:otherwise Case1
left_balance=left_up+left_down+ left_middle (if Case3)
or
left_balance=0 (if Case4)
Case3:left_up>th-lu and left _middle>th-lm
or left _middle>th-lm and left _down>th-ld
Case4:otherwise Case3
・・・(36)
ここで、th-ruは、画素数right_upの所定の閾値を示し、th-rmは、画素数right_middleの所定の閾値を示し、th-rdは、画素数right_downの所定の閾値を示し、th-luは、画素数left_upの所定の閾値を示し、th-lmは、画素数left_middleの所定の閾値を示し、th-ldは、画素数left_downの所定の閾値を示す。
すなわち、空間分布に基づいて、左上がりのエッジの空間的な分布を示すleft_balanceは、left_upエリアにおける画素数とleft_middleエリアにおける画素数が所定数を超えているか、または、left_middleエリアにおける画素数とleft_downエリアにおける画素数が所定数を超えているとき、left_upエリアにおける画素数とleft_middleエリアにおける画素数とleft_downエリアにおける画素数の合計となり、それ以外のとき、0となり、右上がりのエッジの空間的な分布を示すright_balanceは、right_upエリアにおける画素数とright_middleエリアにおける画素数が所定数を超えているか、または、right_middleエリアにおける画素数とright_downエリアにおける画素数が所定数を超えているとき、right_upエリアにおける画素数とright_middleエリアにおける画素数とright_downエリアにおける画素数の合計となり、それ以外のとき、0となることが示されており、Balance関数は、right_balanceとleft_balanceの差分となっていることが示されている。
ステップS254において、方向選択部166は、Balance(X,Y)が正の値であるか否かを判定し、例えば、正の値であると判定した場合、ステップS254において、図62で定義する方向LIのうち、Iが、I=(N+1)/2からN-1の範囲の中で最も信頼度の高い方向を選択する。尚、この関係は、図38で示した方向の定義と水平方向と垂直方向の関係が逆転したものであって、基本的には、同様のものである。
一方、ステップS254において、正の値ではないと判定された場合、ステップS256において、図65で定義する方向LIのうち、Iが、I=0から(N-3)/2の範囲の中で最も信頼度の高い方向を選択する。
すなわち、式(36)で定義される関数は、水平方向を中心として、図中の方向の矢印の右端部を方向L2で上下に分けた場合、上下のどちら側に信頼性の傾向があるかを示すものであり、例えば、図65で定義する方向L0とL1のグループ全体の信頼性と、方向L3,L4のグループ全体の信頼性のそれぞれの和をとった値の差分をステップS255の処理により、求めて、その大小比較から、水平方向に対して上下のどちらに傾いているかを求め、信頼性の傾向を示すグループの中から、最も信頼性の高い方向が選択されるようになっている。
ステップS257において、方向選択部166は、最も信頼性の高い方向が複数に存在するか否かを判定し、例えば、複数の存在する場合、ステップS258において、選択された複数の最も信頼性の高い方向の中から、最も水平方向に近い方向を選択する。一方、ステップS257において、最も信頼性の高い方向が複数に存在しない場合は、ステップS258の処理がスキップされて、ステップS255またはS256の処理で選択された方向がそのまま選択される。すなわち、信頼性の程度が同じ方向があった場合は、水平方向に近いものが選択される。
ステップS259において、方向選択部166は、例外条件に含まれるか否かを判定する。すなわち、方向選択部166は、以下の式(37)乃至式(39)のいずれかを満たす場合、例外であると判定し、ステップS260において、水平方向(図65の方向L2)を選択する。
Population_LI(I=(N-1)/2)−Population(Best_Dir)≧−1
・・・(37)
Tendency(X,Y)<(PM)/3・・・(38)
Total_Population(X,Y)<(PM)/3・・・(39)
ここで、Population_LI(I=(N-1)/2)は、水平方向の信頼度であり、Population(Best_Dir)は、ステップS251乃至S258の処理で選択された方向の信頼度である。または、Tendency(X,Y)は、Balance関数が正の場合は、Σ(I=(N+1)/2,N-1)(Population(LI))を示し、負の場合は、Σ(I=0,(N-3)/2)(Population(LI))を示す。すなわち、方向を示す矢印の右端部の位置を上下のグループに分けたときの信頼性の高いグループの信頼度の和である。Total_Population(X,Y)は、注目画素が(X,Y)の時の信頼度の和である。
すなわち、式(37)が満たされる場合、ステップS251乃至S258の処理で選択された方向の信頼度よりも水平方向の信頼度の方が高いことになるので、水平方向の方がより正しい方向の選択となる。また、式(38),式(39)が満たされる場合、信頼性の高いグループの信頼度の和が所定の閾値である(PM)/3よりも小さいことになるので、全体として比較できる精度の画素がなかったものと判断して、水平方向を選択する。尚、閾値(PM)/3は、他の値に設定するようにしてもよい。
ステップS261において、方向選択部166は、選択された方向の情報を斜め補間部168に出力する。
ここで、図55のフローチャートの説明に戻る。
ステップS215において、線形補間部167は、注目画素に対して水平方向の左右に存在する画素間の平均画素値を線形補間画素として求めて合成部170に出力し、同時に、斜補間部168は、方向選択部166より入力された選択された方向に存在する画素間の平均画素値を線形補間画素値として合成部に出力する。
ステップS216において、斜重み付け部169は、以下の式(40)で示すように、注目画素(X,Y)の斜方向の重みweight_slant(X,Y)を設定し、合成部170に出力する。
weight_slant(X,Y)=ABS(Balance(X,Y)/Total_population(X,Y)
(或いは、weight_slant(X,Y)=ABS(Tendency(X,Y))/Total_population(X,Y))
・・・(40)
すなわち、斜方向の重みは、全信頼度に対するBalance関数(或いは、Tendency関数)の絶対値の割合として設定される。
ステップS217において、合成部170は、以下の式(41)の演算により、線形補間部167より入力された線形補間画素と斜補間画素とを重み付けして合成し、補間画素として出力する。
V_buffer(X,Y)=(1-weight_slant(X,Y))×(v-buffer(X-1,Y)+v-buffer(X+1,Y))
+weight_slant(X,Y)×(v-buffer(X-1,Y+Best_Dir-(N-1)/2)
+v-buffer(X+1,Y-Best_Dir-(N-1)/2)
・・・(41)
ここで、v-buffer(X-1,Y)とv-buffer(X+1,Y)は、注目画素の左右に存在する画素値であり、h-buffer(X-1,Y+Best_Dir-(N-1)/2)+h-buffer(X-1,Y-Best_Dir-(N-1)/2)は、注目画素からみて選択された方向の対角線上で、かつ、左右の列上に存在する画素値である。
すなわち、線形補間画素にかかる重みは、(1-weight_slant(X,Y))で表現できるので、線形補間で求められた画素値には、線形補間に係る重みとして(1-weight_slant(X,Y))を乗じ、斜補間画素にかかる重みとしてweight_slant(X,Y)が乗じられて、線形和をとって最終的な補間画素とする。これにより、水平方向と斜方向の補間が、その重みによりバランスよく合成されるため、正確な補間画素を生成することが可能となる。
Vバッファ51の個々の未知の行の各画素を求めるため、同様の処理が繰り返し実行される。
すなわち、上述した式(36)の条件(Case1乃至4を考慮した条件)により、空間分布が考慮されて、斜補間により生成される画素値の信頼性が評価されるので、斜補間については、ある程度信頼性が認められる条件でのみ使用されることとなり、結果として、より正確に補間画素を生成することが可能となる。
図66は、以上のケース2の処理を概念的に表したものである。同図に示されるように、Vバッファ51の列Xが、仮想水平2倍拡大画像2X_image中の所定の列と所定の関係にある場合、Hバッファ31のn列と、n+1列から方向補間処理により生成されたデータが2Xバッファ61に記憶され、それがVバッファ51の列Xにコピーされる。
尚、以上の例においては、注目領域が3画素×5ラインの場合について説明してきたが、例えば、注目領域は、それ以外の画素数からなる領域でもよく、例えば、図67で示されるように、11画素×17ラインであってもよく、そのような場合、balance関数を設定するためのleft_upエリア、left_middleエリア、left_downエリア、right_upエリア、right_middleエリア、および、right_downエリアは、例えば、図67で示されるように、それぞれ、left_up_area(注目領域の左上部の16画素)、middle_area(注目領域の中央部の27画素)、left_down_area(注目領域の右下部の16画素(middle areaは、leftもrightも共通))、right_up_area(注目領域の右上部の16画素)、middle_area(注目領域の中央部の27画素)、right_down_area(注目領域の左下部の16画素)と示された領域となるようにしてもよい。すなわち、各領域は、注目領域の中で、注目画素に対して斜方向のエッジが存在するであろう領域が、それぞれのエリアとなるように設定されればよい。図67においては、注目画素が黒色のマスで示されている。
次に、図68のフローチャートを参照して、図52のステップS182におけるケース3のVバッファに対する処理について説明する。
このケースは、2n<2X_column<2n+1、または、2n-1<2X_column<2nのケースの場合、つまり、Vバッファ51中の列Xの値が、仮想水平2倍拡大画像2X_imageの列2X_columnのいずれにも対応せず、かつ、Hバッファ31のどの列とも対応しない場合である。
この場合、ステップS291において、2X_columnの値が2nより大きく、且つ2n+1より小さいか否かが判定される。2X_columnの値が2nより大きく、且つ2n+1より小さい場合、仮想水平2倍拡大画像2X_imageの2n+1列と2nから、Vバッファ51のX列が生成される。
そこで、この場合、ステップS292において、高速水平アップサンプリング処理部15は、仮想水平2倍拡大画像2X_imageの2n+1列を、隣接する上列2n列と、下列2n+2列(Hバッファ31におけるn列とn+1列)を用いて、図55のケース2のフローチャートに示すステップS201乃至ステップS217の処理で計算する。ステップS292で計算された結果は、Vバッファ51における次のn+1列の計算に使用する可能性があるので、ステップS293において、2Xバッファ61に格納される。
さらに、ステップS294において、ステップS292で計算された2n+1列(2Xバッファ61に記憶されている値)と、仮想水平2倍拡大画像2X_imageの2n列(Hバッファ31のn列)から、Vバッファ51のX列が次式から演算され、Vバッファ51の列Xに記憶される。
V_buffer(X,Y)=(2X_column-2n)×2X-buffer(X)+(2n+1-2X_column)×I_image(n,Y)
・・・(42)
一方、ステップS291において、2X_columnが2nより大きく、且つ2n+1より小さいと判定されなかった場合(2X_columnが2n-1より大きく、2nより小さいと判定された場合)、仮想水平2倍拡大画像2X_imageの2n-1列と2n列から、Vバッファ51のX列が生成される。この2n-1列は、Vバッファ51中の前列を求める際に計算され、2Xバッファ61に既に格納されている場合がある。そこでステップS295において、2n-1列が2Xバッファ61に既に格納されているか否かが判定され、格納されている場合には、ステップS298において、2n-1列が2Xバッファ61から取り出される。
これに対して、ステップS295において、2n-1列のデータが2Xバッファ61にまだ格納されていないと判定された場合、ステップS296に進み、仮想水平2倍拡大画像2X_imageの2n-1列を、上列2n-2列と下列2n列(Hバッファ31のn-1列とn列)を用い、図55のケース2のフローチャートのステップS201乃至ステップS217の処理により計算する処理が実列される。ステップS296で計算された2n-1列の値は、ステップS297において、Vバッファ51における次のX+1列の計算に使用する可能性があるので、2Xバッファ61に格納される。
ステップS297、またはステップS298の処理の後、ステップS299に進み、得られた2n-1列と、仮想水平2倍拡大画像2X_imageの2n列(Hバッファ31のn列)からVバッファ51のX列が次式に従って補間される。
V-buffer(X,Y)=
(2n−2X_column)×2X-buffer(Y)+(2X_column−(2n-1))×I_image(n,Y)
・・・(43)
この処理は、Y=0からIn_height×alpha_Zより小さい値である期間、Yの値をインクリメントしつつ行われる。
Vバッファ51の個々の未知の列の各画素を求めるため、(−1<Y<alpha_Z×In_height−N+1)と、(−1<Y<alpha_Z×In_width−1)の条件を満たす座標(X,Y+N/2)で、同様の処理が繰り返し実行される。
このように、ケース3の処理においては、仮想水平2倍拡大画像2X_image中の2n列と2n+1列、または2n-1列と2n列を用いて、重み付け補間が実行される。
以上の図68のケース3に示す処理を模式的に表すと、図69に示すようになる。Vバッファ51中の列Xの値が、仮想水平2倍拡大画像2X_imageの列と所定の関係にある場合、原画像I_imageのn列と、n+1列から方向補間処理により2n+1列、または2n-1列のデータが生成され、2Xバッファ61に記憶される。そして、2Xバッファ61に記憶された値と、仮想水平2倍拡大画像2X_imageの2n列のデータから、Vバッファ51のX列のデータが重み付け補間される。
以上のようにして、ステップS21において、設定されているモードが、画像モードであると判定された場合、ステップS22乃至ステップS25の処理が行われるのであるが、ステップS21において、設定されているモードが画像モードではないと判定された場合(コンピュータのアイコンやワードプロセッサのフォントなどの弱接続の画像が処理される場合)、ステップS22乃至ステップS25の処理が行われる前に、ステップS26において、エッジコネクタ処理が実行される。図70と図71は、このエッジコネクタ処理の詳細を表している。このエッジコネクタ処理は、エッジコネクタ処理部11により実行される。
最初にステップS311において、所定の画素(X,Y)に対応して、2×2個の画素が切り出される。そしてステップS312とステップS313において、それぞれ右対角エネルギと、左対角エネルギが計算される。右対角エネルギは、2×2個の画素のうち、右上の画素から左下の画素を減算することで求められ、左対角エネルギは、左上画素から右下画素を減算することで求められる。
例えば、画素(X,Y)を図72Aにおける画素(ピクセル)0とした場合、右対角エネルギは、図72Aに示されるように、ピクセル1からピクセル2の値を減算することで求められ、左対角エネルギは、図72Bに示されるように、ピクセル0からピクセル3の値を減算することにより求められる。
次に、ステップS314において、左対角線上の画素値は、右対角線上の画素値より小さいか否かが判定される。図72A,図72Bの例の場合、ピクセル0とピクセル3の画素値が、ピクセル1とピクセル2の画素値より小さいか否かが判定される。
ステップS314において、左対角線上の画素値が右対角線上の画素値より小さいと判定された場合、ステップS315に進み、ステップS313で演算された左対角エネルギは、予め設定されている所定の閾値より小さいか否かが判定される。左対角エネルギが閾値より小さい場合、ステップS316に進み、画素(ピクセル)2は、画素(ピクセル)1より小さいか否かが判定される。画素2が画素1より小さい場合には、ステップS317において、画素1を、画素0と画素3の平均値とする処理が実行される。ステップS316において、画素2が画素1より小さくない(等しいか大きいと判定された場合)、ステップS318に進み、画素2を、画素0と画素3の平均値とする処理が実行される。
図73Aは、ステップS317の処理の結果、画素1の値が画素0と画素3の平均値とされた場合を表している。
ステップS315において、左対角エネルギが閾値と等しいか閾値より大きいと判定された場合、ステップS316乃至ステップS318の処理はスキップされる。
ステップS314において、左対角線上の画素値が右対角線上の画素値より小さくないと判定された場合(等しいかより大きいと判定された場合)、ステップS319に進み、ステップS312で演算された右対角エネルギが、予め設定されている所定の閾値より小さいか否かが判定される。右対角エネルギが閾値より小さい場合には、ステップS320に進み、画素3は、画素0より小さいか否かが判定される。画素3が画素0より小さい場合には、ステップS321において、画素0を、画素1と画素2の平均値とする処理が行われる。ステップS320において、画素3が画素0より小さくない(等しいかより大きい)と判定された場合、ステップS322に進み、画素3を、画素1と画素2の平均値とする処理が実行される。
図73Bは、ステップS322における処理により、画素3が、画素1と画素2の平均値とされた場合の例を示している。
ステップS319において、右対角エネルギが閾値より小さくないと判定された場合、ステップS320乃至ステップS322の処理はスキップされる。
アイコンやフォントなどの弱接続を有するエッジを、以上のエッジコネクタ処理により厚くすることで、エッジ構造を強くすることができる。これにより、図72A,Bに示されるように、エッジが局所的に、たった2つの対角線上にしか存在しない弱接続が存在する場合に、図25のステップS97におけるエッジ方向計算処理、或いは、図55におけるステップS207のエッジ方向計算処理などにより、エッジ方向を認識する際、極端な誤解を引き起こしてしまい、結果的にエッジの連続性を破壊してしまうようなことが抑制される。
次に、図2のステップS8のズーム処理について説明する。このズーム処理の詳細は、図72のフローチャートに示されている。図74におけるステップS331乃至ステップS335の処理は、図12の高速ズーム処理におけるステップS21乃至ステップS25の処理と基本的に同様の処理となっている。
図74のステップS336におけるエッジコネクタ処理、ステップS332における1次元垂直イメージリフレッシュ処理、およびステップS333における1次元水平イメージリフレッシュ処理は、それぞれ、図12のステップS22の1次元垂直イメージリフレッシュ処理、および、ステップS23のステップS15の1次元水平イメージリフレッシュ処理と同様の処理であるので、その説明は省略する。以下においては、ステップS334における垂直アップサンプリング処理と、ステップS335における水平アップサンプリング処理についてのみ説明する。
最初に図75のフローチャートを参照して、ステップS334における垂直アップサンプリング処理について説明する。この処理は、垂直アップサンプリング処理部13により実行される。
最初にステップS351において、垂直アップサンプラ141は、Hバッファ31を作成する。そのサイズは、In_width×(2×In_height)とされる。次に、ステップS352において、垂直アップサンプラ141は、図76に示されるように、原画像I_imageのY行をHバッファ31の行2Yにコピーする。Hバッファ31の最後の行には、原画像I_imageの最後の行がコピーされる。
次に、ステップS353において、垂直方向補間部142のエッジ検出部122は、原画像I_image中の上行up_lineと下行down_lineのN画素を抽出する。上行up_lineの中心座標は、(X+N/2,n)となり、下行down_lineの中心座標は、(X+N/2,n+1)となる。
次にステップS354において、エッジ検出部122は、局所エネルギE(N)を上述の式(11)より算出する。
次に、ステップS355において、エッジ検出部122は、局所エネルギE(N)が予め設定されている所定の閾値Tより大きいか否かを判定する。局所エネルギE(N)が閾値Tと等しいか、それより小さい場合、その領域は、エッジを含まない平坦な低エネルギの領域と見なされる。この場合、潜在的エッジの方向を計算する必要がない。このため、ステップS356に進み、方向判別部123が、エッジ検出部122の判定結果に基づいて、方向補間部131に、Hバッファ31中の座標(X+N/2,Y)の画素データとして、座標(X+N/2,Y)を中心として、上下方向に幅2m(mは、任意)画素の範囲に存在する画素の線形和(ただし、各係数の和は1)を演算し、Hバッファ31のその座標(X+N/2,Y)に格納すると共に、垂直方向(後述する図38におけるL2の方向)を示す方向情報を信頼度格付部124、および、方向性分布生成部125に出力する。また、信頼度格付部124は、この補間画素について信頼度が低いことを示す0を方向性分布生成部125に出力する。すなわち、ステップS356においては、上述の式(12)に基づいて、補間処理が行われる。
ステップS355において、局所エネルギE(N)の値が閾値Tより大きいと判定された場合、その領域は、潜在的エッジを含んだ高エネルギ領域と見なされる。
このとき、ステップS357において、斜線検出部133において、斜線検出処理が実行され、この検出結果に基づいて、ステップS358において、斜線(斜方向のエッジ)の有無が判定され、斜線が検出されなかった場合、その処理は、ステップS356に進む。
ステップS358において、斜方向のエッジが存在すると判定された場合、その処理は、ステップS359に進む。
ステップS359において、エッジ方向を試験的に計算する処理が実行される。具体的には、以下に示す演算が、x=N-1から−1より大きくなるまで行われる。
Energy=ABS(up_line(N-x-1)−down_line(x))・・・(44)
上記の式(44)で計算されたエネルギの値のうち、最も小さいものが選択され、その2つの画素が対応する対角線の方向が局所的なエッジの方向と見なされる。尚、上述した、図44乃至図48を参照して説明した方法でエッジの方向を選択するようにしても良い。
ステップS359の処理で、エッジ方向が検出された場合、さらにステップS360において、方向補間部131は、その検出されたエッジ方向の画素を用いて、補間処理を行う(方向補間処理を行う)。この方向補間処理は、エッジ方向に対応する2つの画素の画素値に基づいて、その間に位置する画素の画素値を補間することを意味する。
次に、ステップS361に進み、信頼度格付部124は、構造コレクタ処理を実行する。この構造コレクタ処理は、座標(X+N/2,Y)に補間された画素と、その垂直の近傍画素、すなわち座標up_line(N/2)と、座標down_line(N/2)との関係を解析することで、更新された局所構造(ステップS360の方向補間処理で生成された画素とその上下の画素)の整合性をチェックする処理である。
すなわち、この構造コレクタ処理では、上行の中心画素から更新された画素を減算する処理が行われ、さらに、更新された画素から下行の中心画素を減算する処理が行われる。さらに、以上のようにして得られた2つの減算結果を乗算することで、垂直方向の変化を表す値V(N/2)が計算される。ステップS361においては、次の式で示す演算が行われる。
V(N/2)=(up_line(N/2)−H-buffer(X+N/2,Y))×(H-buffer(X+N/2,Y)−down_line(N/2))
・・・(45)
次に、ステップS362において、信頼度格付部124は、ステップS361での演算結果に基づいて、更新された局所構造の整合性があるか否かを判定する。この判定は、上記の式(45)で演算された値V(N/2)が正であるか否かに基づいて行われる。値V(N/2)が正である場合には、整合性があると見なされ、ステップS363において、信頼度格付部124は、その補間画素の信頼度を1として方向性分布生成部125に出力する。
これに対して、ステップS362において、値V(N/2)が負であると判定された場合、整合性はないと見なされる。すなわち、局所方向の識別が誤っており、ステップS359で生成された画素値は、適切でないと判断される。この場合、局所エッジの方向は、識別不可能と見なされ、この場合、信頼度格付部124は、ステップS364において、その補間画素の信頼度を0として方向性分布生成部125に出力する。
ステップS365において、注目画素に対する注目領域の全ての補間画素が補間されたか否かが判定され、注目領域の全ての補間画素が補間されていないと判定された場合、その処理は、ステップS351に戻り、全ての補間画素が補間されるまで、ステップS351乃至S365の処理が繰り返され、ステップS365において、全ての補間画素が補間されたと判定された場合、その処理は、ステップS366に進む。ここで、注目画素に対する注目領域とは、例えば、図32で示したP(画素数)×M(ライン)の範囲の補間画素である。そして、ステップS366において、方向選択処理が実行される。尚、ステップS366の方向選択処理は、図25のフローチャートを参照して説明したステップS104の処理と同様であるので、その説明は省略する。
ステップS367において、線形補間部127は、注目画素に対して垂直方向の上下に存在する画素間の平均画素値を線形補間画素として求めて合成部130に出力し、同時に、斜補間部128は、方向選択部126より入力された選択された方向に存在する画素間の平均画素値を線形補間画素値として合成部に出力する。
ステップS368において、斜重み付け部129は、上述の式(23)により注目画素(X,Y)の斜方向の重みweight_slant(X,Y)を設定し、合成部130に出力する。
ステップS369において、合成部130は、上述の式(24)の演算により、線形補間部127より入力された線形補間画素と斜補間画素とを重み付けして合成し、補間画素として出力する。
また、図77は、図74のステップS335における水平アップサンプリング処理の詳細を表している。この処理は、水平アップサンプリング処理部15により実行される。
最初にステップS381において、水平アップサンプラ181は、Vバッファ51を作成する。そのサイズは、2×In_width×2×In_heightとされる。ステップS382において、水平アップサンプラ181は、図78で示されるように、Hバッファ31のX列をVバッファ51の2X列にコピーする。Xの値は−1より大きく、In_widthより小さい値とされる。
ステップS383において、垂直方向補間部182のエッジ検出部162は、Hバッファ31中の左列left_column、および右列right_columnを抽出する。左列left_columnの中心座標は、(n,Y+N/2)とされ、右列right_columnの矩形の中心座標は、(n+1,Y+N/2)とされる。
次にステップS384において、エッジ検出部162は、局所エネルギE(N)が、左列left_columnの個々の画素から、対角線上に位置する右列right_columnの画素を減算し、その絶対値の和を演算することで求められる。すなわち、この処理では上述の式(28)が演算される。
次にステップS385において、エネルギE(N)が予め設定された閾値Tより大きいか否かが判定される。エネルギE(N)が閾値Tと等しいか、それより小さい場合、その領域はエッジを含まない平坦な低エネルギ領域と見なされる。この場合、潜在的なエッジの方向を計算する必要がない。このためステップS386に進み、補間処理が行われる。すなわち、上述の式(29)に示すように、座標(X,Y+N/2)を中心として、左右方向に幅2m(mは、任意)画素の範囲に存在する画素の線形和(ただし、各係数の和は1)から、新しい画素(X+N/2,Y)の画素値が演算される。
ステップS385において、エネルギE(N)が閾値Tより大きいと判定された場合、その領域は潜在的にエッジを含んでいる高エネルギ領域と見なされ、その処理は、ステップS387に進む。
ステップS387において、斜線検出部173において、斜線検出処理が実行され、この検出結果に基づいて、ステップS388において、斜線(斜方向のエッジ)の有無が判定され、斜線が検出されなかった場合、その処理は、ステップS386に進む。
ステップS388において、斜方向のエッジが存在すると判定された場合、その処理は、ステップS389に進む。
ステップS389において、次式にしたがってエッジ方向計算処理が実行される。
Energy=ABS(left_column(N−x−1)−right_column(x))・・・(46)
上記演算は、x=N−1からxの値を順次デクリメントし、xが−1より大きい間繰り返される。
計算されたエネルギのうち、最も小さい値に対応する画素の対角線の方向が局所的なエッジの方向と判定される。
ステップS389でエッジ方向が判定されると、ステップS390において、方向補間部171は、ステップS389で判定されたエッジ方向の2つの画素の平均値を演算することで、その間の画素を補間する(方向補間処理が実行される)。
次に、ステップS391において、構造コレクタ処理が実行される。すなわち、Vバッファ51中の座標(X,Y+N/2)に補間された画素と、その水平方向の近傍画素である座標left_column(N/2)の画素、およびright_column(N/2)の画素との関係を解析することで局所構造の整合性をチェックする処理が行われる。このため、次式に従って、補間された画素を左列の中心の画素から減算し、右列の中心画素を補間された画素から減算することで2つの減算結果を得、さらに2つの減算結果を乗算することで、水平方向の変化を表す値H(N/2)が計算される。
H(N/2)=(left_line(N/2)−V-buffer(X+N/2,Y))
×(V-buffer(X+N/2,Y)−right_column(N/2))・・・(47)
ステップS392において、ステップS391の処理で演算された値H(N/2)に基づき、補間された局所構造に整合性があるか否かが判定される。具体的には、値H(N/2)が正であるか否かが判定される。値H(N/2)が正である場合には、ステップS390の方向補間処理で求められた画素は正しい(整合性がある)ものとされ、ステップS393において、その補間画素の信頼度を1として方向性分布生成部165に出力する。
ステップS392において、値H(N/2)が負である場合(整合性がない、すなわち、ステップS390の方向補間処理で生成された画素値は適切でないと判定された場合)、ステップS394に進み、信頼度格付部164は、その補間画素の信頼度を0として方向性分布生成部165に出力する。
ステップS395において、注目画素に対する注目領域の全ての補間画素が補間されたか否かが判定され、注目領域の全ての補間画素が補間されていないと判定された場合、その処理は、ステップS381に戻り、全ての補間画素が補間されるまで、ステップS381乃至S395の処理が繰り返され、ステップS395において、全ての補間画素が補間されたと判定された場合、その処理は、ステップS396に進む。
ここで、注目画素に対する注目領域とは、例えば、図60で示したM(画素数)×P(ライン)の範囲の補間画素である。そして、ステップS396において、方向選択処理が実行される。尚、ステップS396の方向選択処理は、図55のフローチャートを参照して説明したステップS214の処理と同様であるので、その説明は省略する。
ステップS397において、線形補間部167は、注目画素に対して水平方向の左右に存在する画素間の平均画素値を線形補間画素として求めて合成部170に出力し、同時に、斜補間部168は、方向選択部166より入力された選択された方向に存在する画素間の平均画素値を斜補間画素値として合成部に出力する。
ステップS398において、斜重み付け部169は、上述の式(23)により注目画素(X,Y)の斜方向の重みweight_slant(X,Y)を設定し、合成部170に出力する。
ステップS399において、合成部170は、上述の式(24)の演算により、線形補間部167より入力された線形補間画素と斜補間画素とを重み付けして合成し、補間画素として出力する。
図78は、以上の図77おける水平アップサンプリング処理の概念を表している。同図に示されるように、Hバッファ31のX列のデータが、Vバッファ51の2X列にコピーされる。そして、その間の列のデータが補間される。
以上のようにして、画像の解像度を任意の倍率で変更することができる。この場合、例えば、画像を6倍に拡大するとき、ズーム処理を2回繰り返し、4倍の画像を得た後、3/2倍の高速ズーム処理を行うこともできるし、ズーム処理を3回繰り返し、8倍の画像を得た後、3/4倍の線形縮小処理を行うこともできる。
また、図13,図17のフローチャートで説明したように、1次元垂直イメージリフレッシュ処理、および、1次元水平イメージリフレッシュ処理は、エッジとテクスチャを識別し、エッジに対しては、フィルタ処理とクリッピング処理を施し、テクスチャに対しては、フィルタ処理のみを施すと言ったように処理内容を分けて、それぞれに対応した適切な処理を施すことが可能となる。
さらに、上述のように、図11、または、図74で示すように、高速ズーム処理、または、ズーム処理において、垂直アップサンプリング処理、および、水平アップサンプリング処理を行う前に、1次元垂直イメージリフレッシュ処理、および、1次元水平イメージリフレッシュ処理を実行することにより、1次元垂直イメージリフレッシュ処理、および、1次元水平イメージリフレッシュ処理は、画素数が拡大される前の原画像の画素数での処理を実行するだけで済むため、図15,図16,図19,図20で示す1次元垂直フィルタ、および、1次元水平フィルタのフィルタタップ数を、拡大処理後の画素数に対応させる必要がなく、その分計算処理量を低減させることができ、処理の高速化を実現することが可能となる。
また、1次元垂直フィルタ、および、1次元水平フィルタの係数αが、垂直中心画素エネルギEV、および、水平中心画素エネルギEHの値の変化に動的に対応するため、エッジ、または、テクスチャへの強調処理の強弱を適切に変化させることが可能となる。
さらに、図25,図55,図75,図77のフローチャートを参照して説明したように、方向補間における方向を方向性分布と方向補間における空間分布を用いることにより、正確に判断することが可能となる。また、方向性分布と空間分布により判断された斜補間によって求められる画素値と、線形補間された画素値とを、方向性分布に基づいて重み付けして線形和として補間画素を合成して、生成することにより、正確に画素値を補間することが可能となる。
結果として、画像の解像度を変換することにより生じる画像上のエラーを抑制することができ、鮮明な変換画像を生成することが可能となる。
尚、以上の例においては、水平方向、および、垂直方向のそれぞれに拡大する場合について説明してきたが、いずれか一方向のみを拡大するようにしてもよい。このとき、垂直方向にのみ拡大する処理は、インタレース画像からプログレッシブ画像に変換する、いわゆるIP変換と同様の処理となるため、本発明は、IP変換にも応用することが可能である。尚、実際の処理については、上述で説明した処理における水平方向、または、垂直方向のいずれかの拡大率を1としたときの処理としてもよいし、または、水平方向、または、垂直方向のいずれか一方の処理をスキップすることにより実現されるので、その説明は省略する。
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウエアにより実行させることもできる。一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、ネットワークや記録媒体からインストールされる。
図79は、図1に示した機能ブロックを有する画像処理装置2のハードウェアの構成例を表している。CPU(Central Processing Unit)311は、ROM(Read Only Memory)312に記憶されているプログラム、または記憶部318からRAM(Random Access Memory)313にロードされたプログラムに従って各種の処理を実行する。RAM313にはまた、CPU311が各種の処理を実行する上において必要なデータなども適宜記憶される。
CPU311、ROM312、およびRAM313は、バス314を介して相互に接続されている。このバス314にはまた、入出力インタフェース315も接続されている。
入出力インタフェース315には、キーボード、マウスなどよりなる入力部316、CRT,LCDなどよりなるディスプレイ、並びにスピーカなどよりなる出力部317、ハードディスクなどより構成される記憶部318、モデム、ターミナルアダプタなどより構成される通信部319が接続されている。通信部319は、インターネットなどに代表されるネットワークを介しての通信処理を行う。
入出力インタフェース315には、また、必要に応じてドライブ320が接続され、磁気ディスク331、光ディスク332、光磁気ディスク333、或いは半導体メモリ334などが適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部318にインストールされる。
この記録媒体は、図79に示す装置では、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク331(フレキシブルディスクを含む)、光ディスク332(CD-ROM(Compact Disc-Read Only Memory),DVD(Digital Versatile Disc)を含む)、光磁気ディスク333(MD(Mini-Disc)を含む)、もしくは半導体メモリ334などよりなるパッケージメディアにより構成されるだけでなく、装置に予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM312や、記憶部318に含まれるハードディスクなどで構成される。
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
1 画像入力部, 2 画像処理部, 3 画像出力部, 10 画像処理装置, 11 エッジコネクタ処理部, 12 高速垂直アップサンプリング処理部, 13 垂直アップサンプリング処理部, 14 高速水平アップサンプリング処理部, 15 水平アップサンプリング処理部, 16 線形縮小処理部, 17 1次元垂直イメージリフレッシュ処理部,17a バッファ, 18 1次元水平エッジビルダ処理部, 18a バッファ