特許第6262455号(P6262455)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社メガチップスの特許一覧

特許6262455係数テーブルの作成方法および画像の拡大縮小処理装置
<>
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000041
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000042
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000043
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000044
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000045
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000046
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000047
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000048
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000049
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000050
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000051
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000052
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000053
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000054
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000055
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000056
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000057
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000058
  • 特許6262455-係数テーブルの作成方法および画像の拡大縮小処理装置 図000059
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6262455
(24)【登録日】2017年12月22日
(45)【発行日】2018年1月17日
(54)【発明の名称】係数テーブルの作成方法および画像の拡大縮小処理装置
(51)【国際特許分類】
   H03H 17/00 20060101AFI20180104BHJP
   H04N 1/393 20060101ALI20180104BHJP
【FI】
   H03H17/00 621F
   H04N1/393
   H03H17/00 601P
【請求項の数】5
【全頁数】30
(21)【出願番号】特願2013-135791(P2013-135791)
(22)【出願日】2013年6月28日
(65)【公開番号】特開2015-12415(P2015-12415A)
(43)【公開日】2015年1月19日
【審査請求日】2016年3月17日
(73)【特許権者】
【識別番号】591128453
【氏名又は名称】株式会社メガチップス
(74)【代理人】
【識別番号】100088672
【弁理士】
【氏名又は名称】吉竹 英俊
(74)【代理人】
【識別番号】100088845
【弁理士】
【氏名又は名称】有田 貴弘
(72)【発明者】
【氏名】水野 雄介
【審査官】 橋本 和志
(56)【参考文献】
【文献】 特開平11−025067(JP,A)
【文献】 特開2010−206301(JP,A)
【文献】 特開2012−089969(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H03H 17/00
H04N 1/393
(57)【特許請求の範囲】
【請求項1】
入力画像データをU/D倍(U、Dは自然数)に変換して出力画像データとする画像の拡大縮小処理で使用される補間係数を格納した係数テーブルの作成方法であって、
(a)U倍と1/D倍の変換を同時に行う伝達関数のフィルタを設計するステップと、
(b)前記フィルタのインパルス応答で規定される補間係数を整数化して整数化済み補間係数を算出するステップと、
(c)前記整数化済み補間係数を前記U/D倍の変換処理での使用順に整列させて前記係数テーブルに格納するステップと、を備え、
前記ステップ(b)は、
(b−1)前記補間係数に所定数の2の累乗を乗算した後、四捨五入、切り捨て、および切り上げの何れかを行って前記補間係数を整数化するステップと、
(b−2)前記入力画像データを構成する複数の画素データのうち予め定めた画素数と同じ個数ずつに前記整数化済み補間係数を区分し、区分された前記整数化済み補間係数の総和が、前記所定数の2の累乗と同じとなるように、区分された前記整数化済み補間係数に1ずつ加算、または1ずつ減算するステップと、を有し、
前記ステップ(c)は、
(c−1)前記複数の画素データに対し、前記予め定めた画素数分ずつ前記整数化済み補間係数がそれぞれ乗算されるように前記整数化済み補間係数を区分するステップと、
(c−2)前記区分された前記整数化済み補間係数が、予め定めた順番で繰り返し前記複数の画素データに対して乗算されるように、前記予め定めた順番に前記区分された前記整数化済み補間係数を前記係数テーブルに格納するステップと、
(c−3)前記複数の画素データに対し、前記区分された前記整数化済み補間係数を所定画素数分スキップさせて乗算するか、またはスキップさせずに乗算するかを規定するスキップ数を、前記区分された前記整数化済み補間係数に対応付けて前記係数テーブルに格納するステップと、を有する、係数テーブルの作成方法。
【請求項2】
入力画像データをU/D倍(U、Dは自然数)に変換して出力画像データとする画像の拡大縮小処理で使用される補間係数を格納した係数テーブルの作成方法であって、
(a)U/D倍の変換を行う補間関数によるフィルタを設計するステップと、
(b)前記補間関数で規定される補間係数を整数化して整数化済み補間係数を算出するステップと、
(c)前記整数化済み補間係数を前記U/D倍の変換処理での使用順に整列させて前記係数テーブルに格納するステップと、を備え、
前記ステップ(b)は、
(b−1)前記補間係数に所定数の2の累乗を乗算した後、四捨五入、切り捨て、および切り上げの何れかを行って前記補間係数を整数化すると共に、当該整数化された補間係数を前記所定数の2の累乗から差し引いて前記補間係数を整数化するステップと、
(b−2)前記入力画像データを構成する複数の画素データのうち予め定めた画素数と同じ個数ずつに前記整数化済み補間係数を区分し、区分された前記整数化済み補間係数の総和が、前記所定数の2の累乗と同じとなるように、区分された前記整数化済み補間係数に1ずつ加算、または1ずつ減算するステップと、を有し、
前記ステップ(c)は、
(c−1)前記複数の画素データに対し、前記予め定めた画素数分ずつ前記整数化済み補間係数がそれぞれ乗算されるように前記整数化済み補間係数を区分するステップと、
(c−2)前記区分された前記整数化済み補間係数が、予め定めた順番で繰り返し前記複数の画素データに対して乗算されるように、前記予め定めた順番に前記区分された前記整数化済み補間係数を前記係数テーブルに格納するステップと、
(c−3)前記複数の画素データに対し、前記区分された前記整数化済み補間係数を所定画素数分スキップさせて乗算するか、またはスキップさせずに乗算するかを規定するスキップ数を、前記区分された前記整数化済み補間係数に対応付けて前記係数テーブルに格納するステップと、を有する、係数テーブルの作成方法。
【請求項3】
前記ステップ(c−2)は、
前記区分された前記整数化済み補間係数の前記予め定めた順番での繰り返し乗算は、前記U倍に相当する周期で繰り返される、請求項1または請求項2記載の係数テーブルの作成方法。
【請求項4】
前記ステップ(b−1)は、
2に累乗される前記所定数を、前記画素データのビット数で規定する、請求項1または請求項2記載の係数テーブルの作成方法。
【請求項5】
入力画像データをU/D倍(U、Dは自然数)に変換して出力画像データとする画像の拡大縮小処理装置であって、
第1または第2の算出方法により算出された補間係数を格納した係数テーブルと、
前記入力画像データを構成する画素データのそれぞれと前記係数テーブルに格納された前記補間係数とを乗算する乗算器と、
前記乗算器から出力される乗算済みデータの加算を繰り返し、前記画素データの所定個数分について前記乗算済みデータの総和を取る加算器と、
前記画素データの所定個数分について前記乗算済みデータの総和が得られるタイミングで前記乗算済みデータの総和を出力するセレクタと、
前記セレクタの出力をシフト演算することで、前記出力画像データのビット数を前記入力画像データのビット数調整するシフト回路と、を備え
前記第1の算出方法は、
(a)U倍と1/D倍の変換を同時に行う伝達関数のフィルタを設計するステップと、
(b)前記フィルタのインパルス応答で規定される補間係数を整数化して整数化済み補間係数を算出するステップと、
(c)前記整数化済み補間係数を前記U/D倍の変換処理での使用順に整列させるステップと、を備え、
前記ステップ(b)は、
(b−1)前記補間係数に所定数の2の累乗を乗算した後、四捨五入、切り捨て、および切り上げの何れかを行って前記補間係数を整数化するステップと、
(b−2)前記入力画像データを構成する複数の画素データのうち予め定めた画素数と同じ個数ずつに前記整数化済み補間係数を区分し、区分された前記整数化済み補間係数の総和が、前記所定数の2の累乗と同じとなるように、区分された前記整数化済み補間係数に1ずつ加算、または1ずつ減算するステップと、を有し、
前記ステップ(c)は、
(c−1)前記複数の画素データに対し、前記予め定めた画素数分ずつ前記整数化済み補間係数がそれぞれ乗算されるように前記整数化済み補間係数を区分するステップと、
(c−2)前記区分された前記整数化済み補間係数が、予め定めた順番で繰り返し前記複数の画素データに対して乗算されるように、前記予め定めた順番に前記区分された前記整数化済み補間係数を前記係数テーブルに格納するステップと、
(c−3)前記複数の画素データに対し、前記区分された前記整数化済み補間係数を所定画素数分スキップさせて乗算するか、またはスキップさせずに乗算するかを規定するスキップ数を、前記区分された前記整数化済み補間係数に対応付けて前記係数テーブルに格納するステップと、を有し、
前記第2の算出方法は、
(a)U/D倍の変換を行う補間関数によるフィルタを設計するステップと、
(b)前記補間関数で規定される補間係数を整数化して整数化済み補間係数を算出するステップと、
(c)前記整数化済み補間係数を前記U/D倍の変換処理での使用順に整列させて前記係数テーブルに格納するステップと、を備え、
前記ステップ(b)は、
(b−1)前記補間係数に所定数の2の累乗を乗算した後、四捨五入、切り捨て、および切り上げの何れかを行って前記補間係数を整数化すると共に、当該整数化された補間係数を前記所定数の2の累乗から差し引いて前記補間係数を整数化するステップと、
(b−2)前記入力画像データを構成する複数の画素データのうち予め定めた画素数と同じ個数ずつに前記整数化済み補間係数を区分し、区分された前記整数化済み補間係数の総和が、前記所定数の2の累乗と同じとなるように、区分された前記整数化済み補間係数に1ずつ加算、または1ずつ減算するステップと、を有し、
前記ステップ(c)は、
(c−1)前記複数の画素データに対し、前記予め定めた画素数分ずつ前記整数化済み補間係数がそれぞれ乗算されるように前記整数化済み補間係数を区分するステップと、
(c−2)前記区分された前記整数化済み補間係数が、予め定めた順番で繰り返し前記複数の画素データに対して乗算されるように、前記予め定めた順番に前記区分された前記整数化済み補間係数を前記係数テーブルに格納するステップと、
(c−3)前記複数の画素データに対し、前記区分された前記整数化済み補間係数を所定画素数分スキップさせて乗算するか、またはスキップさせずに乗算するかを規定するスキップ数を、前記区分された前記整数化済み補間係数に対応付けて前記係数テーブルに格納するステップと、を有する、画像の拡大縮小処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は補間係数テーブル作成方法および当該係数テーブル作成方法に基づいて作成された係数テーブルを有した画像の拡大縮小演算装置に関する。
【背景技術】
【0002】
一般的な画像の拡大縮小処理装置としては、例えば特許文献1に開示されるように、まず、原画像をU倍に拡大した後、1/D倍に縮小するという手順で、整数倍だけでなく有理数倍も含めたU/D倍任意拡大縮小処理を実現している。しかしながら、この方法では、原画像をU倍に拡大するための演算が必要であると共に、U倍に拡大した画像データを格納するためのメモリが必要となり、演算およびメモリが冗長性を含むこととなる。
【0003】
一方、特許文献2には、原画像から中間画像(U倍画像)を求めずにいきなり最終画像(U/D倍画像)を求める技術が開示されており、冗長性が解消されているが、補間処理については従来的な手法を用いており、割り算器や浮動小数点演算器を用いる必要があると考えられる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開平10−63826号公報
【特許文献2】特開2000−165664号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
以上説明したように、従来の画像の拡大縮小処理においては、割り算器や浮動小数点演算器を用いる必要があり、装置構成が複雑になるという問題があった。
【0006】
本発明は上記のような問題点を解消するためになされたもので、割り算器や浮動小数点演算器を用いることなしに画像を任意の倍数で拡大縮小できる方法を提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明に係る係数テーブルの作成方法の第1の態様は、入力画像データをU/D倍(U、Dは自然数)に変換して出力画像データとする画像の拡大縮小処理で使用される補間係数を格納した係数テーブルの作成方法であって、U倍と1/D倍の変換を同時に行う伝達関数のフィルタを設計するステップ(a)と、前記フィルタのインパルス応答で規定される補間係数を整数化して整数化済み補間係数を算出するステップ(b)と、前記整数化済み補間係数を前記U/D倍の変換処理での使用順に整列させて前記係数テーブルに格納するステップ(c)とを備え、前記ステップ(b)は、前記補間係数に所定数の2の累乗を乗算した後、四捨五入、切り捨て、および切り上げの何れかを行って前記補間係数を整数化するステップ(b−1)と、前記入力画像データを構成する複数の画素データのうち予め定めた画素数と同じ個数ずつに前記整数化済み補間係数を区分し、区分された前記整数化済み補間係数の総和が、前記所定数の2の累乗と同じとなるように、区分された前記整数化済み補間係数に1ずつ加算、または1ずつ減算するステップ(b−2)とを有し、前記ステップ(c)は、前記複数の画素データに対し、前記予め定めた画素数分ずつ前記整数化済み補間係数がそれぞれ乗算されるように前記整数化済み補間係数を区分するステップ(c−1)と、前記区分された前記整数化済み補間係数が、予め定めた順番で繰り返し前記複数の画素データに対して乗算されるように、前記予め定めた順番に前記区分された前記整数化済み補間係数を前記係数テーブルに格納するステップ(c−2)と、前記複数の画素データに対し、前記区分された前記整数化済み補間係数を所定画素数分スキップさせて乗算するか、またはスキップさせずに乗算するかを規定するスキップ数を、前記区分された前記整数化済み補間係数に対応付けて前記係数テーブルに格納するステップ(c−3)とを有している。
【0008】
本発明に係る係数テーブルの作成方法の第2の態様は、入力画像データをU/D倍(U、Dは自然数)に変換して出力画像データとする画像の拡大縮小処理で使用される補間係数を格納した係数テーブルの作成方法であって、U/D倍の変換を行う補間関数によるフィルタを設計するステップ(a)と、前記補間関数で規定される補間係数を整数化して整数化済み補間係数を算出するステップ(b)と、前記整数化済み補間係数を前記U/D倍の変換処理での使用順に整列させて前記係数テーブルに格納するステップ(c)とを備え、前記ステップ(b)は、前記補間係数に所定数の2の累乗を乗算した後、四捨五入、切り捨て、および切り上げの何れかを行って前記補間係数を整数化すると共に、当該整数化された補間係数を前記所定数の2の累乗から差し引いて前記補間係数を整数化するステップ(b−1)と、前記入力画像データを構成する複数の画素データのうち予め定めた画素数と同じ個数ずつに前記整数化済み補間係数を区分し、区分された前記整数化済み補間係数の総和が、前記所定数の2の累乗と同じとなるように、区分された前記整数化済み補間係数に1ずつ加算、または1ずつ減算するステップ(b−2)とを有し、前記ステップ(c)は、前記複数の画素データに対し、前記予め定めた画素数分ずつ前記整数化済み補間係数がそれぞれ乗算されるように前記整数化済み補間係数を区分するステップ(c−1)と、前記区分された前記整数化済み補間係数が、予め定めた順番で繰り返し前記複数の画素データに対して乗算されるように、前記予め定めた順番に前記区分された前記整数化済み補間係数を前記係数テーブルに格納するステップ(c−2)と、前記複数の画素データに対し、前記区分された前記整数化済み補間係数を所定画素数分スキップさせて乗算するか、またはスキップさせずに乗算するかを規定するスキップ数を、前記区分された前記整数化済み補間係数に対応付けて前記係数テーブルに格納するステップ(c−3)とを有している。
【0009】
本発明に係る係数テーブルの作成方法の第3の態様は、前記ステップ(c−2)が、前記区分された前記整数化済み補間係数の前記予め定めた順番での繰り返し乗算は、前記U倍に相当する周期で繰り返される。
【0010】
本発明に係る係数テーブルの作成方法の第4の態様は、前記ステップ(b−1)が、2に累乗される前記所定数を、前記画素データのビット数で規定する。
【0011】
本発明に係る画像の拡大縮小処理装置の態様は、入力画像データをU/D倍(U、Dは自然数)に変換して出力画像データとする画像の拡大縮小処理装置であって、第1または第2の算出方法により算出された補間係数を格納した係数テーブルと、前記入力画像データを構成する画素データのそれぞれと前記係数テーブルに格納された前記補間係数とを乗算する乗算器と、前記乗算器から出力される乗算済みデータの加算を繰り返し、前記画素データの所定個数分について前記乗算済みデータの総和を取る加算器と、前記画素データの所定個数分について前記乗算済みデータの総和が得られるタイミングで前記乗算済みデータの総和を出力するセレクタと、前記セレクタの出力をシフト演算することで、前記出力画像データのビット数を前記入力画像データのビット数調整するシフト回路とを備え、前記第1の算出方法は、U倍と1/D倍の変換を同時に行う伝達関数のフィルタを設計するステップ(a)と、前記フィルタのインパルス応答で規定される補間係数を整数化して整数化済み補間係数を算出するステップ(b)と、前記整数化済み補間係数を前記U/D倍の変換処理での使用順に整列させるステップ(c)と、を備え、前記ステップ(b)は、前記補間係数に所定数の2の累乗を乗算した後、四捨五入、切り捨て、および切り上げの何れかを行って前記補間係数を整数化するステップ(b−1)と、前記入力画像データを構成する複数の画素データのうち予め定めた画素数と同じ個数ずつに前記整数化済み補間係数を区分し、区分された前記整数化済み補間係数の総和が、前記所定数の2の累乗と同じとなるように、区分された前記整数化済み補間係数に1ずつ加算、または1ずつ減算するステップ(b−2)と、を有し、前記ステップ(c)は、前記複数の画素データに対し、前記予め定めた画素数分ずつ前記整数化済み補間係数がそれぞれ乗算されるように前記整数化済み補間係数を区分するステップ(c−1)と、前記区分された前記整数化済み補間係数が、予め定めた順番で繰り返し前記複数の画素データに対して乗算されるように、前記予め定めた順番に前記区分された前記整数化済み補間係数を前記係数テーブルに格納するステップ(c−2)と、前記複数の画素データに対し、前記区分された前記整数化済み補間係数を所定画素数分スキップさせて乗算するか、またはスキップさせずに乗算するかを規定するスキップ数を、前記区分された前記整数化済み補間係数に対応付けて前記係数テーブルに格納するステップ(c−3)と、を有し、前記第2の算出方法は、U/D倍の変換を行う補間関数によるフィルタを設計するステップ(a)と、前記補間関数で規定される補間係数を整数化して整数化済み補間係数を算出するステップ(b)と、前記整数化済み補間係数を前記U/D倍の変換処理での使用順に整列させて前記係数テーブルに格納するステップ(c)と、を備え、前記ステップ(b)は、前記補間係数に所定数の2の累乗を乗算した後、四捨五入、切り捨て、および切り上げの何れかを行って前記補間係数を整数化すると共に、当該整数化された補間係数を前記所定数の2の累乗から差し引いて前記補間係数を整数化するステップ(b−1)と、前記入力画像データを構成する複数の画素データのうち予め定めた画素数と同じ個数ずつに前記整数化済み補間係数を区分し、区分された前記整数化済み補間係数の総和が、前記所定数の2の累乗と同じとなるように、区分された前記整数化済み補間係数に1ずつ加算、または1ずつ減算するステップ(b−2)と、を有し、前記ステップ(c)は、前記複数の画素データに対し、前記予め定めた画素数分ずつ前記整数化済み補間係数がそれぞれ乗算されるように前記整数化済み補間係数を区分するステップ(c−1)と、前記区分された前記整数化済み補間係数が、予め定めた順番で繰り返し前記複数の画素データに対して乗算されるように、前記予め定めた順番に前記区分された前記整数化済み補間係数を前記係数テーブルに格納するステップ(c−2)と、前記複数の画素データに対し、前記区分された前記整数化済み補間係数を所定画素数分スキップさせて乗算するか、またはスキップさせずに乗算するかを規定するスキップ数を、前記区分された前記整数化済み補間係数に対応付けて前記係数テーブルに格納するステップ(c−3)と、を有している。
【発明の効果】
【0012】
本発明によれば、割り算器や浮動小数点演算器を用いることなしに画像を任意の倍数で拡大縮小処理を行うことができる。
【図面の簡単な説明】
【0013】
図1】U/D倍任意拡大縮小処理を模式的に示すブロック図である。
図2】画像をU倍に拡大する場合の伝達関数を示す図である。
図3】画像を1/D倍に縮小する場合の伝達関数を示す図である。
図4】画像をU/D倍に拡大する場合の伝達関数を示す図である。
図5】画像をU/D倍に縮小する場合の伝達関数を示す図である。
図6】キュービックコンボリューションによる補間を説明する図である。
図7】本発明に係る実施の形態の画像の拡大縮小処理装置の基本構成を示すブロック図である。
図8】本発明に係る係数テーブルの作成方法を示すフローチャートである。
図9】伝達関数HUD(z)のフィルタ設計を説明するフローチャートである。
図10】周波数特性のベクトルfnと振幅特性のベクトルlnの関係を示す図である。
図11】インパルス応答の一例を示す図である。
図12】補間係数の整数化を説明するフローチャートである。
図13】補間係数の整列処理を説明するフローチャートである。
図14】y(0)の計算結果を示す図である。
図15】y(1)の計算結果を示す図である。
図16】y(2)の計算結果を示す図である。
図17】y(3)の計算結果を示す図である。
図18】係数テーブルの一例を示す図である。
図19】係数テーブルの一例を示す図である。
【発明を実施するための形態】
【0014】
<始めに>
実施の形態の説明に先立って、本発明の前提となる画像の拡大縮小処理について説明する。
【0015】
<伝達関数を用いた例>
まず、伝達関数を用いた画像の拡大縮小処理の例として、冗長性を排除したU/D倍任意拡大縮小処理の手順について説明する。
【0016】
図1は、U/D倍任意拡大縮小処理を模式的に示すブロック図であり、入力画像データx(n)がアップサンプラUPに入力され、アップサンプリングされた画像データがローパスフィルタであるデジタルフィルタDFに与えられ、デジタルフィルタDFで帯域制限を受けた画像データd(n)がダウンサンプラDWに与えられ、ダウンサンプリングされた出力画像データy(n)が出力される構成となっている。
【0017】
ここで、アップサンプラUPは、原画像信号の各信号間に画素U−1個分の0値を挿入する処理を行い、ダウンサンプラDWは、画像データからD画素ごとに残し、残りを間引く処理を行う。また、デジタルフィルタDFのインパルス応答はhUD(n)であり、図1の処理は畳み込み演算を示す以下の数式(1)で表される。
【0018】
【数1】
【0019】
ここで、画像をU倍に拡大する場合の理想的なフィルタのインパルス応答h(n)の伝達関数H(z)は、z軸(z=exp(jωT))上の表現で図2のように表され、また、1/D倍に縮小する場合の理想的なフィルタのインパルス応答h(n)の伝達関数H(z)は図3のように表される。なお。図2および図3において、横軸は正規化角周波数(ω)を表し、縦軸は振幅を表している。
【0020】
これに対し、U/D倍に拡大する場合、すなわちU>Dの場合の理想的なフィルタのインパルス応答hUD(n)の伝達関数HUD(z)は図4のように表される。また、U/D倍に縮小する場合、すなわちU<Dの場合の理想的なフィルタのインパルス応答hUD(n)の伝達関数HUD(z)は図5のように表される。なお、図4および図5において、横軸は正規化角周波数(ω)を表し、縦軸は振幅を表している。
【0021】
なお、図4図2に示す画像をU倍に拡大する場合の伝達関数H(z)は同じであり、共に遮断角周波数はπ/Uであるので、U倍に拡大する場合のフィルタを、U/D倍に拡大する場合のフィルタとして使用可能である。また、図5の画像をU/D倍に縮小する場合の伝達関数HUD(z)の遮断角周波数はπ/Dになる。
【0022】
このように、デジタルフィルタDFをインパルス応答hUD(n)のフィルタとすることで、画像の拡大用フィルタと縮小用フィルタの2つを備える必要がなくなり、演算量を削減することができる。また、一旦、U倍に拡大する必要がないので、U倍に拡大した画像データを格納するためのメモリも不要となる。
【0023】
ここで、画像を任意の倍数で拡大縮小する場合、フィルタを適切に選ばないと画素周期Uで碁盤目状のひずみ(チェス盤ひずみ(checkerboard distortion))が発生する。
【0024】
これに対しては、以下の数式(2)で表されるように、インパルス応答hUD(n)を画素U個ごとの区切りとみなして、それぞれの区切りの0番目の総和、1番目の総和〜U−1番目の総和が、それぞれ一定値になるような伝達関数を設定することでチェス盤ひずみを回避することができる。
【0025】
【数2】
【0026】
<補間関数を用いた例>
伝達関数を用いて、画像の拡大縮小を行う方法の他に、キュービックコンボリューションや線形補間、3次補間、ラグランジュ補間、スプライン補間、ランツォシュ補間などの補間関数を用いて画像データを内挿(補間)し、画像の拡大縮小を行う方法がある。
【0027】
例えば、特開2001−189850号公報では、キュービックコンボリューションを用いた内挿の例が説明されている。以下、キュービックコンボリューションを用いた内挿について説明する。
【0028】
【数3】
【0029】
上記数式(3)はキュービックコンボリューションで用いる補間関数h(t)を表す数式である。
【0030】
数式(3)において、aは補間関数の性質を制御するための変数(−0.5〜−2)であり、tは隣接する画素から内挿点までの距離を表す。
【0031】
また、図6にはキュービックコンボリューションの内挿点の一例を示している。図6においては、直列に等間隔で並んだ4点の画素P、Pi+1、Pi+2およびPi+3がある場合に、画素Pi+1と画素Pi+2との間に内挿点Xが内挿される場合を示している。
【0032】
そして、内挿点Xからの画素P、Pi+1、Pi+2およびPi+3までの距離をそれぞれt、ti+1、ti+2およびti+3とし、画素間の距離を1.0として示している。それぞれの画素に対する補間関数h(t)、h(ti+1)、h(ti+2)およびh(ti+3)は以下の数式(4)で表される。
【0033】
【数4】
【0034】
上記数式(4)で表される補間関数h(t)、h(ti+1)、h(ti+2)およびh(ti+3)を画素P、Pi+1、Pi+2およびPi+3の座標にそれぞれ掛け合わせた総和が内挿点Xの位置となる。これを表す数式が、以下に示す数式(5)である。
【0035】
【数5】
【0036】
<実施の形態>
図7は本発明に係る実施の形態の画像の拡大縮小処理装置100の基本構成を示すブロック図である。なお、以下においては、拡大縮小処理装置100は、図1に示したU/D倍任意拡大縮小処理を行うものとして説明する。
【0037】
図7に示されるように、画像の拡大縮小処理装置100は、DMA(Direct Memory Access)バス19を介して主記憶装置30に格納された入力画像データx(n)を直接に読み出すDMA読み取り装置(DMAR)5と、DMAバス19を介して主記憶装置30に出力画像データy(n)を直接に書き込むDMA書き込み装置(DMAW)6とをデータ入出力部として備えている。
【0038】
DMAR5が読み出した1画素分の入力画像データx(n)は、セレクタ1を介してピンポンバッファ10に書き込まれる。ピンポンバッファ10は、セレクタ1の2つの出力と、セレクタ2の2つの入力との間に互いに並列に接続されたバッファ11およびバッファ12を有しており、バッファ11および12は書き込み用と読み取り用に順番に入れ替わるように制御される。なお、ピンポンバッファ10は、デュアルポートSRAMで構成することも可能である。デュアルポートSRAMは、データを入出力するためのポートを2つ有し、一方のポートからデータを読み出すのと同時に他方のポートからデータを書き込むことが可能であり、バッファ11および12を有する場合と同様の動作が可能である。
【0039】
セレクタ1は、バッファ11および12のうち、書き込み可能な方のバッファを選択し、入力画像データx(n)を書き込む。セレクタ2は、バッファ11および12のうち、入力画像データx(n)が書き込み済みのバッファから画像データを読み出す。
【0040】
従って、例えば、バッファ11に入力画像データx(n)が書き込まれているタイミングでは、バッファ12から、既に書き込まれた入力画像データx(n)が読み出だされていることとなる。
【0041】
なお、セレクタ1による書き込み可能なバッファの選択は制御装置7によりセレクタ1が制御されることで実行され、セレクタ2による書き込み済みのバッファの選択は制御装置7によりセレクタ2が制御されることで実行される。
【0042】
セレクタ2を介してピンポンバッファ10から読み出された入力画像データx(n)は、乗算器8に入力され、また、デジタルフィルタDF(図1)のインパルス応答hUD(n)を補間係数として格納する係数テーブル20からは、セレクタ3を介して補間係数が読み出され、乗算器8に入力される。
【0043】
なお、係数テーブル20としては、拡大、縮小の倍率にそれぞれ対応したもの、例えば、2倍、3倍、あるいは1/2倍、3/4倍などに対応した補間係数のテーブルが準備されており、拡大、縮小の倍率に応じたテーブルを、制御装置7がセレクタ3を制御して選択し、選択したテーブルから補間係数が読み出される。
【0044】
乗算器8では、入力画像データx(n)と補間係数hUD(n)の乗算を行い、乗算済みデータが加算器9に与えられる。加算器9には、フリップフロップ13内に格納されている加算済みデータがセレクタ4を介して与えられ、加算器9で、乗算器8から与えられる乗算済みデータと加算される。
【0045】
乗算済みデータが加算された加算済みデータは、フリップフロップ13に格納されることでフリップフロップ13のデータを更新する。なお、フリップフロップ13の初期値は0であり、1画素分の画像データに対して最初に加算器で乗算済みデータに加算されるのは初期値0である。
【0046】
加算器9での加算は数式(1)で表されるhUD(Dn−Uk)とx(k)の積の累積算である。なお、乗算器8と加算器9とをそれぞれ複数備えることで、演算の並列性が高まり処理速度を高速化することが可能である。
【0047】
セレクタ4は、予め設定された選択範囲の画素数分の画像データに対して数式(1)の累積算が終了するまでは加算器3に対してフリップフロップ13に格納されたデータを与えるが、予め設定された選択範囲の画素数分の画像データに対する累積算が終了した後はフリップフロップ13に格納されたデータをシフト回路14に与え、フリップフロップ13が0に初期化される。なお、セレクタ4の選択動作は制御装置7により制御される。
【0048】
シフト回路14は、シフトレジスタなどで構成され、セレクタ4より出力された累積演算結果のデータをシフト演算することで、出力画像データのビット数を入力画像データのビット数と一致させクリップ回路15に与える。なお、シフト回路14は、出力画像データのビット数は入力画像データのビット数と一致させる場合や演算精度を高くするために出力画像データのビット数が入力画像より大きい場合や演算精度を低くするために出力画像データのビット数が入力画像より小さい場合がある。
【0049】
クリップ回路15は、シフト回路14より出力され、ビット数が調整された演算結果のデータを、予め設定される最小値と最大値の範囲にデータを切り取り、出力画像データy(n)を生成する。出力画像データy(n)はDMAW6からDMAバス19を介して、主記憶装置30に直接に書き込まれる。
【0050】
このようにして得られた出力画像データy(n)は、予め設定された画素数分の入力画像データに基づいて作成された1画素分の画像データであり、同じ処理を異なる選択範囲の予め設定された画素数分の画素に対して行い、次の出力画像データy(n)を得る。
【0051】
これを、1画像の全ての画素に対して繰り返し実行することで、数式(1)に基づいて拡大あるいは縮小された画像が得られる。
【0052】
図7に示す拡大縮小処理装置100においては、伝達関数からインパルス応答hUD(n)を算出し、補間係数として係数テーブル20に格納した構成を採っている。そして、当該補間係数の算出においては、整数化処理を行うことで、拡大縮小処理装置100に割り算器や浮動小数点演算器を用いることなしに、乗算と加減算とデータのシフトのみで、画像の拡大縮小を実現できる。以下、本発明に係る係数テーブルの作成方法について説明する。
【0053】
<係数テーブルの作成方法>
図8は、本発明に係る係数テーブルの作成方法を示すフローチャートである。係数テーブルの作成においては、まず、伝達関数HUD(z)のフィルタ特性を持つフィルタを設計する(ステップS1)。
【0054】
次に、設計したフィルタの補間係数の整数化を行い(ステップS2)、ステップS3では、補間係数の整列処理を行って、補間係数を演算しやすいように並べ変えることで、係数テーブルの作成を終了する。なお、上記ステップS1〜S3の詳細については以下に説明する。
【0055】
<伝達関数HUD(z)のフィルタ設計>
図9は、図8におけるステップS1の伝達関数HUD(z)のフィルタ設計を説明するフローチャートである。フィルタ設計においては、まず、フィルタ特性の決定を行う(ステップS11)。フィルタ特性の決定では、フィルタの周波数特性、タップ数およびフィルタの振幅特性を決定する。
【0056】
次に、ステップS11で決定されたフィルタ特性に基づいて、フィルタ設計処理を行う(ステップS12)。
【0057】
フィルタ設計処理は、例えば、米国のMathWorks社が開発している数値解析ソフトウェアMATLAB(マトラボ)などの数値解析ツールを使用することで、最小二乗線形位相FIR(有限インパルス応答フィルタ)の設計や周波数サンプリングベースのFIRフィルタの設計など、所望の周波数特性およびタップ数のフィルタを、容易に設計することができる。以下、MATLABを用いてフィルタ設計を行う例について説明する。
【0058】
<フィルタ特性の決定>
まず、ステップS11のフィルタ特性の決定について説明する。ここでは、図4および図5に示したような、U/D倍に対応する伝達関数HUD(z)のフィルタ特性を決定するものとして説明する。
【0059】
遮断周波数をfns、周波数0での振幅をflsとした場合、ナイキスト周波数を1として、fnsおよびflsを決定する数式を以下に数式(6)として示す。なお、数式(6)は、MATLABで使用されるプログラミング言語で書かれたプログラムを表している。
【0060】
【数6】
【0061】
また、フィルタのタップ数をkn、周波数特性のベクトルをfn、振幅特性のベクトルをlnとすると、それぞれは以下の数式(7)で表される。
【0062】
【数7】
【0063】
なお、上記数式(7)においてTAPは挿入点を決定するための基準となる画素の個数(基準点数)を表す。
【0064】
そして、周波数特性のベクトルfnと振幅特性のベクトルlnの関係は図10で表される。
【0065】
ここで、図6を用いて説明したキュービックコンボリューションのように、周辺の4画素を基準点として、補間係数を乗算して内挿点を求めるフィルタを設計する例について説明する。
【0066】
U=3、D=2として、3/2倍のフィルタを設計する場合、周辺の4画素を基準点とする場合、TAP=4となるので、数式(7)へ適用すると、タップ数kn、周波数特性のベクトルfn、振幅特性のベクトルlnは以下の数式(8)で表され、タップ数、フィルタの周波数特性およびフィルタの振幅特性を決定することができる。
【0067】
【数8】
【0068】
<フィルタ設計処理>
次に、ステップS12のフィルタ設計処理について説明する。ステップS11で決定したフィルタのタップ数kn、周波数特性のベクトルfn、振幅特性のベクトルlnからフィルタを設計する。
【0069】
例えば、FIRフィルタの場合は、インパルス応答を求める。これをMATLABのfirls関数を使用して説明する。なお、bnをインパルス応答のベクトルとする。
【0070】
MATLABのfirls関数では、線形位相FIRフィルタを設計する。これは、一連の周波数帯域で、理想的な区分的線形関数とフィルタの振幅応答との間の重み付き積分二乗誤差を最小にするフィルタである。
【0071】
b=firls(n,f,a)では、ベクトルfとaで表される周波数−振幅特性を近似するn次FIRフィルタのn+1個の係数を含んだ行ベクトルbが出力される。bに出力されるフィルタ係数、すなわち「タップ」は、対称な関係を有している。
【0072】
ここでは、bn=firls(kn−1,fn,ln)となり、例えば、U=3、D=2の3/2倍のフィルタの場合、インパルス応答のベクトルbnは次のようになり、インパルス応答は図11で表される。
【0073】
bn=[−0.0868,−0.2122,−0.1364,0.1910,0.6366,0.9549,0.9549,0.6366,0.1910,−0.1364,−0.2122,−0.0868]
【0074】
<補間係数の整数化>
図12は、図8におけるステップS2の補間係数の整数化を説明するフローチャートである。補間係数の整数化は、乗算と加減算とデータのシフトのみで小数点の演算が行えるようにするための処理である。
【0075】
図12に示すように、まず、整数化処理を行い(ステップS21)、その後、数式(2)に基づいてU個に分解した係数の和が一定になるように調整する(ステップS22)。
【0076】
<整数化処理>
ステップS21の整数化処理では、まず、2の累乗2(nは係数の精度を表し、正の整数)を係数bnに乗算し、四捨五入もしくは切り捨て、切り上げを行って整数化を行う。ここで、bn、bcおよびbrはベクトルとし、MATLABの四捨五入もしくは切り捨て、切り上げを行う演算式をroundとすると、bcおよびbrを以下のように定義する。
【0077】
bc=2*bn
br=round(2*bn)
【0078】
すなわちbcは2(nは正の整数)を係数bnに乗算した結果であり、brはbcに対して四捨五入もしくは切り捨て、切り上げを行って整数化した結果である。なお、具体例については後に説明する。
【0079】
<係数の和を一定とする処理>
ステップS22の係数の和を一定とする処理では、数式(2)に基づいてU個に分解した係数の和が一定になるように以下の手順で調整する。
【0080】
まず、係数bnに2を乗算した結果bcを四捨五入した係数brを数式(2)と同様にU個に分解し、分解した係数のそれぞれの和を求める。この処理は以下の数式(9)で表される。
【0081】
【数9】
【0082】
次に、分解した係数のそれぞれの和と2との差を求める。この処理は以下の数式(10)で表される。
【0083】
【数10】
【0084】
次に、上記処理を行った各組について、bnに2を乗算した係数bcと係数brとの差を求める。この処理は以下の数式(11)で表される。
【0085】
【数11】
【0086】
そして、数式(10)での各係数の和が2より大きい場合、すなわち以下の数式(12)の関係を満たすか否かを確認する。
【0087】
【数12】
【0088】
そして、数式(12)の関係を満たす場合は、数式(11)で表される係数brと係数bcとの差の大きい係数の組から順に、係数brの和が2になるまで係数brから1ずつ減算する。
【0089】
また、数式(10)での各係数の和が2より小さい場合、すなわち以下の数式(13)の関係を満たすか否かを確認する。
【0090】
【数13】
【0091】
そして、数式(13)の関係を満たす場合は、数式(11)で表される係数brと係数bcとの差の大きい係数の組から順に、係数brの和が2になるまで係数brに1ずつ加算する。
【0092】
ここで、係数の整数化について具体例を挙げて説明する。U=3、D=2として、3/2倍のフィルタを設計する場合、係数データの精度が10ビットであればn=10となり、210=1024となる。そして、インパルス応答のベクトルbnには図11に対応するものを使用することで、係数bcは以下のようになる。
【0093】
bc=210*bn=[−88.8953,−217.2995,−139.6926,195.5696,651.8986,977.8480,977.8480,651.8986,195.5696,−139.6926,−217.2995,−88.8953]
【0094】
ここで係数bcを倍率(U)の数字に合わせて3つに分解すると、以下のように表される。
【0095】
bc(−3k)=[−139.6926,977.8480,195.5696,−88.8953]
bc(1−3k)=[−217.2995,651.8986,651.8986,−217.2995]
bc(2−3k)=[−88.8953,195.5696,977.8480,−139.6926]
【0096】
また、round演算を四捨五入の演算として上記bcに適用することで、係数brは以下のようになる。
【0097】
br=round(210*bn)=[−89,−217,−140,196,652,978,978,652,196,−140,−217,−89]
【0098】
そして、数式(11)で表される係数bcと係数brとの差は以下のようになる。
【0099】
br−bc=[−0.1047,0.2995,−0.3074,0.4304,0.1014,0.1520,0.1520,0.1014,0.4304,−0.3074,0.2995,−0.1047]
【0100】
ここで係数brを倍率(U)の数字に合わせて3つに分解すると、以下のように表される。
【0101】
br(−3k)=[−140,978,196,−89]
br(1−3k)=[−217,652,652,−217]
br(2−3k)=[−89,196,978,−140]
【0102】
上記係数brのそれぞれの総和は、以下の数式(14)で表される。
【0103】
【数14】
【0104】
上記数式(14)から、0番目の総和は945、1番目の総和は870、2番目の総和は945となり、何れも210(=1024)よりも小さいので、1024にまるまで、br(−3k)、br(1−3k)およびbr(2−3k)のそれぞれに1ずつ加算する。ここで、加算する順番は、br−bcで得られた差の値が小さい順とする。
【0105】
すなわち、br(−3k)−bc(−3k)=[−0.3074,0.1520,0.4304,−0.1047]となるので、係数br(−3k)については、1番目の成分、4番目の成分、2番目の成分、3番目の成分の順に加算することとなる。
【0106】
すなわち、br(−3k)=[−140,978,196,−89]となるので、1番目の成分、4番目の成分、2番目の成分、3番目の成分の順に、br(−3k)の総和が1024になるまで79回に渡って1ずつ加算する。
【0107】
同様に、br(1−3k)−bc(1−3k)=[0.2995,0.1014,0.1014,0.2995]となるので、係数br(1−3k)については、2番目の成分、3番目の成分、1番目の成分、4番目の成分の順に加算することとなる。
【0108】
すなわち、br(1−3k)=[−217,652,652,(−217)]となるので、2番目の成分、3番目の成分、1番目の成分、4番目の成分の順に、br(1−3k)の総和が1024になるまで154回に渡って1ずつ加算する。
【0109】
また、br(2−3k)−bc(2−3k)=[−0.1047,0.4304,0.1520,−0.3074]となるので、係数br(2−3k)については、4番目の成分、1番目の成分、3番目の成分、2番目の成分の順に加算することとなる。
【0110】
すなわち、br(2−3k)=[−89,196,978,(−140)]となるので、br(1−3k)の総和が1024になるまで79回に渡って1ずつ加算する。
【0111】
係数br(−3k)、br(1−3k)およびbr(2−3k)に対する加算処理の結果を、それぞれ係数br(−3k)’、br(1−3k)’およびbr(2−3k)’とすると、以下のように表される。
【0112】
br(−3k)’=[−120,978,196,−89]
br(1−3k)’=[−179,691,691,−179]
br(2−3k)’=[−69,215,998,−120]
【0113】
従って、伝達関数HUD(z)のインパルス応答は、hUD=[−69,−179,−120,215,691,998,998,691,215,−120,−179,−69]となる。
【0114】
<補間係数の整列>
補間係数の整列処理は、伝達関数HUD(z)のインパルス応答hUDを、数式(1)の畳み込み演算の実行に合わせて、並べ替えて係数テーブル20(図7)に格納する処理である。
【0115】
この場合、入力された画像に対し、出力される画像の位置がずれないように、0位相のフィルタ作成するようにhUDの並べ替えを行う。
【0116】
図13は、図8におけるステップS3の補間係数の整列処理を説明するフローチャートである。
【0117】
<拡大縮小処理演算式を出力ごとに分解>
まず、ステップS31に示すように、数式(1)で示される拡大縮小処理演算式を出力ごとに分解する。この処理は以下の数式(15)で表される。
【0118】
【数15】
【0119】
上記数式(15)において、mおよびkは整数であり、kの値を調整してインパルス応答hUDとの演算を行う。
【0120】
ここで、拡大縮小処理演算式の出力を具体例を挙げて説明する。U=3、D=2として、3/2倍のフィルタを設計する場合、数式(15)は以下の数式(16)で表される。
【0121】
【数16】
【0122】
ここで、先に説明した3/2倍のフィルタにおける伝達関数HUD(z)の整数化後のインパルス応答hUDを例に採ると、hUDは−6〜5の範囲であり、hUD(−6,5)=[−69,−179,−120,215,691,998,998,691,215,−120,−179,−69]と表すことができる。
【0123】
<総和範囲の決定>
次に、図13のステップS32に示すように、数式(16)で示されるそれぞれの出力について総和を取る範囲を決定する。
【0124】
すなわち、上記数式(16)において、m=0で、hUDが−6〜5の範囲の値を取る場合、数式(16)は以下の数式(17)で表される。
【0125】
【数17】
【0126】
上記数式(17)においては、y(0)、y(1)では、総和(Σ)を取る範囲(kの最小値と最大値の範囲)は−1〜2であり、y(2)では0〜3、y(3)では1〜4となっている。このkの最小値と最大値の範囲の決定方法については後に説明する。
【0127】
<係数の並び替え>
kの最小値と最大値の範囲を決定した後は、図13のステップS33に示すように、伝達関数HUD(z)のインパルス応答hUDの並べ替えを行う。
【0128】
上記数式(17)におけるy(0)の計算結果は図14のように表すことができる。図14においては、入力画像の画素データx(−1)、x(0)、x(1)およびx(2)に基づいて内挿点となる出力画像データy(0)を作成する(補間する)動作を模式的に表しており、画素データx(−1)、x(0)、x(1)およびx(2)に、それぞれ補間係数−120、998、215および−69を乗算している。なお、補間係数−120、998、215および−69は、先に説明した係数br(−3k)’に対応する。
【0129】
なお、画素データx(−1)は、画像でいうと左端の画素のない領域の画素データであり、画像を折り返して使用する対称拡張法により画素データが生成されている。
【0130】
また、数式(17)におけるy(1)の計算結果は図15のように表すことができる。図15においては、入力画像の画素データx(−1)、x(0)、x(1)およびx(2)に基づいて内挿点となる出力画像データy(1)を補間する動作を模式的に表しており、画素データx(−1)、x(0)、x(1)およびx(2)に、それぞれ補間係数−69、215、998および−120を乗算している。なお、補間係数−69、215、998、−120は、先に説明した係数br(2−3k)’に対応する。
【0131】
また、数式(17)におけるy(2)の計算結果は図16のように表すことができる。図16においては、画素データの選択範囲を右に1画素分ずらし(スキップし)、入力画像の画素データx(0)、x(1)、x(2)およびx(3)に基づいて内挿点となる出力画像データy(1)を補間する動作を模式的に表しており、画素データx(0)、x(1)、x(2)およびx(3)に、それぞれ補間係数−179、691、691および−179を乗算している。なお、補間係数−179、691、691、−179は、先に説明した係数br(1−3k)’に対応する。
【0132】
また、数式(17)におけるy(3)の計算結果は図17のように表すことができる。図17においては、画素データの選択範囲を右に1画素分スキップし、入力画像の画素データx(1)、x(2)、x(3)およびx(4)に基づいて内挿点となる出力画像データy(3)を補間する動作を模式的に表しており、画素データx(1)、x(2)、x(3)およびx(4)に、それぞれ補間係数−120、998、215および−69を乗算している。なお、補間係数−120、998、215および−69は、先に説明した係数br(−3k)’に対応する。なお、y(4)の計算に際しては画素データの選択範囲はスキップせず、画素データx(1)、x(2)、x(3)およびx(4)に係数br(2−3k)’を乗算する。
【0133】
このように、補間対象となる入力画像の画素データの選択範囲を、画像の左端から1画素ずつ右にスキップさせたり、あるいはスキップさせずに、係数br(−3k)’、br(1−3k)’およびbr(2−3k)’を繰り返して積算することで出力画像データを補間する。
【0134】
このような係数br(−3k)’、br(1−3k)’およびbr(2−3k)’と、当該係数を乗算する演算の繰り返し順番と、画素データのスキップ数のデータが、テーブルとして係数テーブル20(図7)に格納されている。
【0135】
図18には、図14図16を用いて説明した数式(17)の計算結果に対応する係数テーブルの一例を示す。
【0136】
図18においては、係数br(−3k)’、br(2−3k)’およびbr(1−3k)’に対する演算の繰り返し順番が、それぞれ0番目、1番目および2番目として示され、また、各係数に対応するスキップ数が、それぞれ1回、0回および1回として示されている。
【0137】
このように、例えばhUD(−6,5)=[−69,−179,−120,215,691,998,998,691,215,−120,−179,−69]と表される伝達関数HUD(z)のインパルス応答を図18に示すような配列に並べ替えることで係数テーブルが規定され、補間係数の整列処理が終了する。
【0138】
なお、演算の繰り返し順番の数は、倍率(U)の数で規定され、補間係数の個数は、数式(7)にTAPとして示される、挿入点を決定するための基準となる画素の個数(基準点数)で規定され、4画素を基準点とする場合、TAP=4となるので、補間係数の個数は4個となる。
【0139】
上述したように入力画像の画素データの選択範囲のスキップ数は、予め決められて係数テーブル20に格納されているが、スキップ数は、数式(15)において変数が決まると決定できるが、これについては後に説明する。
【0140】
また、補間係数の読み出しや、画素データの選択範囲のスキップは制御装置(図7)で行うが、この制御では、最初のy(0)の演算(0番目の演算)についてはスキップ数は無視し、スキップは行わずに画像の一番左端の画素データを含むように選択範囲を設定し、以後、1番目、2番目、0番目の順で演算を繰り返し、1画像分の全ての画素データについて補間を行う。
【0141】
なお、補間係数の乗算と、乗算済みデータの累積算(総和)を行うことで得られた出力y(n)は、セレクタ4(図7)を介して出力されるが、出力y(n)は、セレクタ4からシフト回路14(図7)に与えられ、係数の整数化で使用した2の累乗2のnに対応するビット数分(ここでは10ビット)だけシフトしてクリップ回路15に与える。これは10ビットの画素データに10ビットの係数を掛けて20ビットとなったデータを右に10ビットシフトすることで10ビットで割り、10ビットのデータに戻す処理である。
【0142】
クリップ回路15では、シフト回路14より出力された演算結果のデータを、予め設定される最小値と最大値の範囲にデータを切り取り、出力画像データy(n)とする。
【0143】
<補間係数の整列処理の一般化>
上述した補間係数の整列処理については、3/2倍のフィルタを設計する場合に限定しての説明であったが、以下においては、U/D倍のフィルタを設計する場合として、一般化して説明する。
【0144】
U/D倍のフィルタを設計する際に、先に説明したように、挿入点を決定するための基準となるTAP個の画素P、Pi+1、・・・、Pi+TAP−1のそれぞれに補間係数を乗算して内挿点を求める方法を採る場合、インパルス応答hUDの補間係数の個数はU×TAP個となり、伝達関数HUD(z)のインパルス応答hUDは、以下の数式(18)で表される。
【0145】
【数18】
【0146】
上記数式(18)において、“U×TAP/2”を囲む記号はfloor(フロア)関数を表しており、実数をより小さい整数に関連付ける関数である。例えば、−2.5はフロア関数では−3となり、2.5はフロア関数では2となる。
【0147】
また、インパルス応答hUDは、先に説明した整数化および分解係数の和を一定とする処理を行うことでベクトルbr’として与えられる。
【0148】
数式(1)で示される拡大縮小処理演算式を出力ごとに分解した数式(15)を以下に示す数式(19)のように変形して、総和を取る範囲、MAXUm〜MAXUm+U−1、MINUm〜MINUm+U−1を求める。
【0149】
【数19】
【0150】
MAXUm〜MAXUm+U−1、MINUm〜MINUm+U−1は、何れか1つが求まると、残り全てが決定されるので、一例として、まず、最初にMAXUmを求める場合について説明する。
【0151】
数式(19)におけるy(Um)の右辺のDUm−Ukを初期値Initとし、以下に示す数式(20)のように変形して係数kを求め、それをMAXUmとする。
【0152】
【数20】
【0153】
ただし、初期値Initは、以下に示す数式(21)の範囲内にあるものとする。
【0154】
【数21】
【0155】
なお、上記数式(20)で求まるkは、数式(19)におけるy(Um)で使用されるkである。
【0156】
MAXUmを決定すると、以下に示す数式(22)のようにMINUmが決定される。
【0157】
【数22】
【0158】
次に、MAXUm+1について決定する。数式(21)から初期値Initを以下に示す数式(23)のように定義する。
【0159】
【数23】
【0160】
そして、数式(19)におけるy(Um+1)の右辺のD(Um+1)−Ukを以下に示す数式(24)のように定義する。なお、下記数式(24)において%は剰余演算子である。
【0161】
【数24】
【0162】
上記数式(24)を以下に示す数式(25)のように変形してkを求め、それをMAXUm+1とする。
【0163】
なお、上記数式(24)で求まるkは、数式(19)におけるy(Um+1)で使用されるkである。
【0164】
【数25】
【0165】
そして、MAXUm+1が決まると、MINUm+1が以下に示す数式(26)のように決定される。
【0166】
【数26】
【0167】
次に、MAXUm+U−1について決定する。まず、数式(19)におけるy(Um+U−1)の右辺のD(Um+U−1)−Ukを以下に示す数式(27)のように定義する。
【0168】
【数27】
【0169】
上記数式(27)を以下に示す数式(28)のように変形してkを求め、それをMAXUm+U−1とする。
【0170】
【数28】
【0171】
なお、上記数式(28)で求まるkは、数式(19)におけるy(Um+U−1)で使用されるkである。
【0172】
そして、MAXUm+U−1が決まると、MINUm+U−1が以下に示す数式(29)のように決定される。
【0173】
【数29】
【0174】
次に、MAXUm〜MAXUm+U−1、MINUm〜MINUm+U−1を求めるために、数式(20)、数式(22)、数式(25)、数式(26)、数式(28)および数式(29)を、n=0,・・・,U−1とし、MAXUm+n、MINm+nで一般化すると、以下に示す数式(30)のように表される。
【0175】
【数30】
【0176】
次に、一例として、U=3、D=2の3/2倍のフィルタを設計する場合に、m=0,1、n=0,1,2、TAP=4、して数式(30)からMAX、MAX、MAX、MAX、・・・、MIN、MIN、MIN、MIN、・・・を求めた結果を以下の数式(31)に示す。
【0177】
【数31】
【0178】
先に説明した数式(17)は、数式(19)に数式(31)を適用することで得られたものである。
【0179】
以上説明したように、U/D倍のフィルタとして、TAP個の画素に係数を乗算して内挿点を求めるフィルタを設計する場合、一般化された数式(19)を使用でき、数式(30)により総和を取る範囲を決定することができる。これは、図13に示したフローチャートのステップS32に対応する。
【0180】
次に、先に説明した数式(15)に基づいてスッキプ数を決定する方法について説明する。
【0181】
数式(15)を変形した数式(19)の第1式から最終式(第U式)までの右辺のインパルス応答hUDは、それぞれ以下に示す数式(32)のように、係数列0〜U−1を表す。
【0182】
【数32】
【0183】
すなわち、係数列0は、hUD(DUm−Uk)において、kがMIN〜MAXの場合の係数列であり、係数列1は、hUD(D(Um+1)−Uk)において、kがMIN〜MAXの場合の係数列であり、係数列U−1は、hUD(D(Um+U−1)−Uk)において、kがMINU−1〜MAXU−1の場合の係数列である。
【0184】
また、スキップ数は出力画素y(n)の入力範囲が、1つ前の出力画素y(n−1)の入力範囲に対して何画素スキップするかで定義されるので、以下に示す数式(33)で表される。
【0185】
【数33】
【0186】
そして、上記数式(33)は、数式(30)に基づいて係数列nのスキップ数skipnの数式として、以下に示す数式(34)で一般化できる。
【0187】
【数34】
【0188】
上記数式(34)において、例えば、m=0、U=3、D=2、n=0〜2として、スキップ数を求めると、skip0=1、skip1=0、skip2=1となり、図18の係数テーブルと一致する。
【0189】
<補間関数を用いた場合の係数テーブルの作成>
先に説明したように、画像の拡大縮小を行うために補間関数を用いる場合でも係数テーブルを作成することは可能である。
【0190】
例えば、キュービックコンボリューションを用いた内挿法を説明する数式(4)を、整数の乗算と加減算とデータのシフトのみで実現できるように下記の数式(35)のように変形する。
【0191】
【数35】
【0192】
数式(35)においては、補間関数h(t)に2を乗算してround演算した値をh(t)’とし、補間関数h(ti+1)に2を乗算してround演算した値をh(ti+1)’とし、補間関数h(ti+2)に2を乗算してround演算した値をh(ti+2)’とし、2からh(t)’、h(ti+1)’およびh(ti+2)’を差し引いた値をh(ti+3)’としている。
【0193】
そして、図6に示される内挿点Xを出力y(0)とし、その座標をbとし、出力y(j)の座標をbとすると、座標bと座標bの関係は以下の数式(36)の第1式のように表され、また、t、ti+1、ti+2およびti+3は、第2式〜第式のように表される。
【0194】
【数36】
【0195】
なお、上記数式(36)の第3式のINT(b)は、座標bから小数点以下を切り捨てる演算を表し、また、座標bの値は前の座標bj−1の整数部より桁上がりした値で規定される。
【0196】
そして、数式(4)、数式(35)および数式(36)に基づいてh(t)’、h(ti+1)’、h(ti+2)’およびh(ti+3)’を求めることで係数テーブルを作成することができる。
【0197】
ここで、U=3、D=2の3/2倍のフィルタを設計する場合を例に採ると、座標b=1/6、n=10、a=1.2とすると、得られる係数テーブルは図19のようになる。
【0198】
この係数テーブルに格納された補間係数と、対応する画像データとを数式(5)のように乗算し、乗算結果を加算することで、内挿点を得ることができる。
【0199】
このように、画像の拡大縮小を行うために補間関数を用いる場合でも係数テーブルを作成することできる。
【0200】
<変形例>
なお、上記の説明では、数式(35)に示されるように、h(t)’、h(ti+1)’およびh(ti+2)’を個々に求めた後、2からh(t)’、h(ti+1)’およびh(ti+2)’を差し引いた値をh(ti+3)’としていたが、これに限定されるものではない。
【0201】
例えば、以下に示す数式(37)のように、h(ti+1)’、h(ti+2)’、h(ti+3)’を個々に求めた後、2からh(ti+1)’、h(ti+2)’、h(ti+3)’を差し引くことでh(t)’を求めても良い。
【0202】
【数37】
【0203】
また、以下に示す数式(38)のように、h(t)’、h(ti+2)’、h(ti+3)’を個々に求めた後、2からh(t)’、h(ti+2)’、h(ti+3)’を差し引くことでh(ti+1)’を求めても良い。
【0204】
【数38】
【0205】
また、以下に示す数式(39)のように、h(t)’、h(ti+1)’、h(ti+3)’を個々に求めた後、2からh(t)’、h(ti+1)’、h(ti+3)’を差し引くことでh(ti+2)’を求めても良い。
【0206】
【数39】
【0207】
なお、以上の説明では、画像を拡大する場合を例に採って説明したが、画像を縮小する場合も同様に本発明を適用できることは言うまでもない。
【符号の説明】
【0208】
8 乗算器
9 加算器
14 シフト回路
20 係数テーブル
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19