【文献】
彌冨 仁、尾川 浩一,“劣化の少ない2値画像回転手法”,画像ラボ,日本,日本工業出版株式会社,2010年 5月10日,Vol.21, No.5,pp.51-55
【文献】
飯倉 善和,“IDLと3次元画像処理入門”,共立出版株式会社、南條 光章,2007年 7月10日,Vol.1,pp.79-82
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0025】
以下、本発明のデジタル画像リサンプリング装置及び方法並びにプログラム(以下、単にリサンプリング装置、リサンプリング方法、リサンプリングプログラムと略記する)に係る好適な実施形態について図面を参照しながら説明する。なお、本発明のリサンプリング装置及び方法並びにプログラムは、以下の記述に限定されるものではなく、本発明の要旨を逸脱しない範囲において適宜変更可能である。以下、詳述する。
【0027】
図1には本発明の第1の実施形態に係るリサンプリング装置の構成を示し説明する。
【0028】
この
図1に示されるように、リサンプリング装置1は、パーソナルコンピュータ10と表示装置20、変形パラメータ入力装置30等からなる。
【0029】
パーソナルコンピュータ10は、マルチタスク対応プロセッサ等からなる中央制御部11と、一時記憶装置としてのRAM(Random Access Memory)等からなるメインメモリ12、グラフィックカード等の画像制御部13、入出力制御部14、内蔵不揮発性記憶媒体15、メディア読み書きインターフェイス16を含む。
【0030】
画像制御部13は、ビデオメモリ13aも備えている。ビデオメモリ13aとは、パーソナルコンピュータ10本体のメインメモリ12と同じく、一時的にデータを保存する場所であり、グラフィックカードについているメモリはVRAM(Video RAM)とも称される。画面に3Dグラフィック画像を表示する場合、その際に必要となるデータ量は大きくなる。画像制御部13で処理を終えたデータはビデオメモリ13aに保存されて随時使われていく。ビデオメモリ13aの容量が多いほど、細かい3Dグラフィック画像でも、スムーズに不良もなく表示することができるようになる。尚、昨今ではVRAMの高速化が進み、GDDRと称される高速処理専用のメモリ規格も登場し、3次元グラフィックス描画における莫大なデータの高速転送が実現されている。
【0031】
表示装置20は、液晶ディスプレイ等に代表される、画像を表示することができる装置である。変形パラメータ入力装置30は、後述する変形方法定義データ42を用いて画像を変形するためのパラメータ(例えば、拡縮率や3次元回転角度等)をユーザが任意に指定可能とする装置であり、即ちマウスやタッチパネル、ペンタブレットに代表される、座標入力及び/又はボタン入力が可能な装置、並びにキーボードに代表される、キー入力が可能な装置である。
【0032】
プログラムデータ50や変形方法定義データ42、変形元画像入力データ40はメディア読み書きインターフェイス16を介して入力され、変形先画像出力データ41はメディア読み書きインターフェィス16を介して出力される。
【0033】
プログラムデータ50とは、本発明が動作可能なソフトウェアである。後述するリサンプリングプログラムのデータ等がこれに該当する。
【0034】
変形方法定義データ42とは、テーブルや数式等に代表される、変形パラメータを基に変形元画像の座標と変形先画像の座標を相互かつ一意的に対応付けるデータである。ポリゴンモデルを用いる場合は、ポリゴンモデルデータがこれに相当し、3次元形状のオブジェクトとなる。この変形方法定義データ42は、プログラムデータ50に付随してもよいし、外部で定義されたデータを読み込んでもよい。
【0035】
変形元画像入力データ40は、ソフトウェアが扱う画像である。例えば、ポリゴンモデルを用いる場合は、テクスチャ画像がこれに相当する。入力されたテクスチャ画像(変形元画像)等はメインメモリ12に一時記憶される。変形先画像出力データ41は、変形元画像入力データ40と同様、ソフトウェアが扱う画像である。メインメモリ12に一時記憶されていた変形済み画像等が変形先画像として出力される。
【0036】
変形元画像入力データ40及びプログラムデータ50は、不図示の外部記憶媒体から読み込んでもよく、通信ネットワークを介して不図示の外部コンピュータから不図示の通信制御部により受信し、入出力制御部14を介して内蔵不揮発性記憶媒体15に取り込んでもよい。出力データは、不図示の外部記憶媒体へ書き込んでもよく、通信ネットワークを介して不図示の外部コンピュータに送信してもよい。
【0037】
ここで、
図2には、リサンプリングを行う場合に使用するメインメモリ12のメモリマップの一例を示し説明する。
【0038】
同図に示されるように、リサンプリングを行う場合、メインメモリ12には、リサンプリングプログラム、変形元画像、座標マップ、変形先画像、蓄積マップの各データが一時記憶されることになる。
【0039】
以下、
図3の概念図を参照して、蓄積マップ、座標マップについて更に詳述する。
【0040】
リサンプリングにおいて、変形元画像とは入力側の画像を示し、変形先画像とは出力側の画像を示す。変形元画像及び変形先画像は、不透明度と色とを含む画素情報(a:アルファ,r:赤,g:緑,b:青)を2次元的な配列として持つ。「アルファ」とは、不透明度情報を示している。例としてパーソナルコンピュータは、1つのピクセルの色情報を24ビット(1色につき8ビット、赤・緑・青の3色で8×3=24ビット)という単位で記録している。赤・緑・青のような情報の値はそれぞれ「濃度値」とも称され、8ビット型では256段階の記録ができる。アルファ付きPNG(32ビットPNG)形式では色情報の他に、各ピクセルの不透明度も8ビット型の256段階で記録できる。アルファ値がゼロで完全な透明、255で完全な不透明であることを意味する。なお、画像処理で色情報を精度良く扱う用途の例として、濃度値が16ビット型の65536段階に拡張された形式等が用いられる場合もある。
【0041】
そして、蓄積マップは、影響値と不透明度と色とを含む画素情報(w:影響値,a:アルファ,r:赤,g:緑,b:青)を2次元的な配列とし、変形先画像と共通の系列を持つものとし、即ち出力側の座標系である。「影響値」とは、詳細は後述するが、画素数をカウント、または画素の重み値を順次加算し、蓄積マップの画素に対応する変形先画像の画素の色情報を決定付ける平均計算等に用いるための情報を示す。
【0042】
蓄積マップの画素情報における各値については、変形元画像から複数の画素情報等を順次加算することに用いるため、各値の型は、変形元画像の画素情報よりも充分に大きな値を扱える型(特に、重み値を実数とする場合は浮動小数点数型)が望ましい。
【0043】
極端な例として、蓄積マップにおける濃度値は、「変形元画像の画素数(例:1000×1000)」に「変形元画像の濃度値の最大(例:255)」「変形元画像のアルファ値の最大(例:255)」および「重み値の最大(例:1.0)」を乗算した値(1000×1000×255×255×1.0)を扱うこともあり得る。
【0044】
そして、座標マップは、座標情報(x:水平座標,y:垂直座標)を2次元的な配列とし、変形元画像の系列と共通の系列を持つものとし、即ち入力側の座標系である。「座標情報」とは、変形元画像から変形先画像への座標変換を行う際、変換された座標、即ち出力側の座標を記録することに用いる。座標情報の各値の型は、記録する座標の精度に応じた型(例えば浮動小数点数型)が望ましい。座標マップは、リサンプリングの品質には貢献しないが、本発明の第2の実施形態に係るリサンプリングを高速にする用途に用いる。
【0045】
以下、
図4のフローチャートを参照して、本発明の第1の実施形態に係るリサンプリング装置による処理の流れを説明する。この処理は、第1の実施形態に係るリサンプリング方法にも相当する。また、中央制御部11が、メインメモリ12のリサンプリングプログラムを実行した場合の処理の流れにも相当する。
【0046】
処理を開始すると、先ず変形元画像を走査し、変形元画像を基に蓄積マップを更新する処理を実行し(ステップS1)、続いて変形先画像を走査し、蓄積マップを基に変形先画像を更新する処理を実行し(ステップS2)、処理を終了する。
【0047】
このように、本発明の実施形態に係るリサンプリング装置によるリサンプリングの特徴として、変形先画像の走査だけでなく、変形元画像の走査も含まれる。尚、各処理の詳細については、後に詳述する。
【0048】
以下、
図5を参照して、リサンプリングに用いる座標変換について詳述する。
【0049】
座標の順変換(入力→出力)、逆変換(出力→入力)は次式で定義される。
座標の順変換(入力→出力): Pos_OUT = 11 / (9 - Pos_IN) - 1.5
座標の逆変換(出力→入力): Pos_IN = 9 - 11 / (1.5 + Pos_OUT)
【0050】
図5には、本発明の実施形態によるリサンプリングに用いる座標変換をわかりやすく図示するため、1次元の変形を例示する。
【0051】
同図において、入力されるデータの配列構造を変形元マップと称する。これは、2次元では変形元画像に相当する。出力されるデータの配列構造を変形先マップと称する。これは、2次元では変形先画像に相当する。
【0052】
円形は変形元マップの各要素を表し、ここでは例として9要素(0〜8)の1次元配列とする。二重円形は変形先マップの各要素を表し、ここでは例として11要素(0〜10)の1次元配列とする。楕円形は蓄積マップの各要素を表している。二重円形と楕円形の接点「・」は、蓄積マップが変形先マップの系列と共通する系列を持つことを表し、例として11要素の1次元配列とする。
【0053】
円形に接する水平線は、変形元マップの要素の位置に結びつく整数の座標系を表している。円形の下方の水平線は、変形元マップに関する実数の座標系を表している。楕円形の上方の水平線は、蓄積マップに関する実数の座標系を表している。楕円形に接する水平線は、蓄積マップの要素の位置に結びつく整数の座標系を表している。
【0054】
円形と楕円形を繋ぐ折れ線に関して、実線は、変形元マップの要素の位置に対応する蓄積マップまたは変形先マップの要素の位置を導出する変換、即ち順変換の例を表し、破線は、蓄積マップまたは変形先マップの要素の位置に対応する変形元マップの要素の位置を導出する変換、即ち逆変換の例を表している。変形元マップの座標と変形先マップの座標は、相互かつ一意的な対応付けとなるように数式で定義している。
【0055】
図5の例では、変形先マップの要素の位置に対応する変形元マップの要素の位置だけを見た場合、結果的に対応付けされていない位置(0、1、3、4)が存在している。これは画像変形において縮小に相当する部分であり、参照の漏れによってエイリアシングが発生する要因である。
【0056】
これに対して、変形元マップの要素の位置に対応する変形先マップの要素の位置を重ねて見た場合、対応付けされていなかった部分を補うことができている。これを実現する方法として、本発明は変形元マップを隔たりなく走査する手段を用いる。
【0057】
後述するが、本発明におけるリサンプリングは2次元以上の配列においても実施可能であり、画像処理の分野等にも利用できる。
【0058】
以下、
図6のフローチャートを参照して、本発明の第1の実施形態に係るリサンプリング装置による、変形元画像を走査し、変形元画像を基に蓄積マップを更新する処理の流れを説明する。これは、
図4のステップS1の処理の詳細に相当する。リサンプリング方法の一部にも相当し、中央制御部11がメインメモリ12のリサンプリングプログラムを実行した場合の処理の一部にも相応する。
【0059】
このフローチャートの処理は、ポリゴンモデルを用いたテクスチャマッピングの例であり、変形元画像を走査し、それぞれの画素で位置の順変換を行うものである。テクスチャマップは変形元画像に相当する。リターン時、蓄積マップは完成となり、後の変形先画像を更新する処理に用いられる。
【0060】
即ち、本処理を開始すると、蓄積マップを初期化し(ステップS11)、全ポリゴン面の抽出が完了したか否かを判断する(ステップS12)。ここで、全ポリゴン面の抽出が完了していなければ(ステップS12をNoに分岐)、次のポリゴン面を抽出し(ステップS13)、テクスチャマップにおいてポリゴン面に含まれる全画素の抽出が完了したか否かを判断する(ステップS14)。ここで、全画素の抽出を完了していなければ(ステップS14をNoに分岐)、テクスチャマップの次画素を抽出し(ステップS15)、テクスチャマップの画素に対応する蓄積マップ画素群を更新する処理を行い(ステップS16)、ステップS14に戻る。そして、テクスチャマップにおいてポリゴン面に含まれる全画素の抽出が完了するまでステップS14乃至S16の処理を繰り返し、抽出を完了すると(ステップS14をYesに分岐)、ステップS12に戻る。こうして、全ポリゴン面の抽出を完了するまでステップS12乃至S16の処理を繰り返し、抽出を完了すると(ステップS12をYesに分岐)、リターンする。
【0061】
ただし、
図6のフローチャートは複数のポリゴンからなるポリゴンモデル(即ち、変形方法が複数)を想定した例であり、ポリゴンが単一の場合や、変形方法定義データ42にて単一のテーブルや数式を用いる場合、ステップS12乃至S13は省略可能である。即ち、本処理を開始すると、ステップS14乃至S16の処理を繰り返し、抽出を完了すると(ステップS14をYesに分岐)、リターンしてもよい。
【0062】
なお、「テクスチャマップ」とは、「変形元画像」と同義であり、「ポリゴン面」とは、変形元画像において「変形を行う範囲」と同義であることに留意する。
【0063】
以下、
図7の概念図を参照して、変形元画像を走査し、変形元画像を基に蓄積マップを更新する過程を更に詳述する。
【0064】
ここでは、本発明における2次元座標の逆変換が可能な画像変形として、ポリゴンモデルを用いたテクスチャマッピングの例を示す。3次元空間上の任意な姿勢および位置を設定した長方形モデルを描画する例であり、即ち射影変換および回転を含んだ変形に相当する。長方形モデルは2つの3角形ポリゴンと見なし、それぞれをポリゴンP、ポリゴンQとする。同図の右上は、ポリゴンモデルのテクスチャマップを表し、即ち変形元画像に相当する。同図の左上は、蓄積マップを表し、後述する変形先画像に相当するターゲットマップと共通の座標系である。
【0065】
テクスチャマップの画素は不透明度と色とを含む画素情報(a_src:アルファ,r_src:赤,g_src:緑,b_src:青)を持っているものとする。蓄積マップの画素は影響値と不透明度と色とを含む加算可能な画素情報(w_sum:影響値,a_sum:アルファ,r_sum:赤,g_sum:緑,b_sum:青)を持つものとする。テクスチャマップ及び蓄積マップのそれぞれにおいて、画素は2次元で配置され、座標(水平方向,垂直方向)の単位は1画素を1とし、便宜上、画素の領域の境界を破線の格子で表している。
【0066】
始めに、蓄積マップの初期化、即ち蓄積マップの全画素において影響値および色情報を0にクリアしておく。次に、テクスチャマップ側において各ポリゴンに囲まれる範囲を隔たりなく走査する。ここで、走査対象画素の位置を(i,j)とし、iは水平位置、jは垂直位置とする。テクスチャマップにおけるポリゴンPに関する走査対象画素を黒塗り三角印、ポリゴンQに関する走査対象画素を黒塗り四角印でそれぞれ表している。画素情報の入出力関係は破線の矢印で表しており、テクスチャマップから蓄積マップへの転送を意味する。
【0067】
続いて、走査対象画素に関して、まず当該画素の位置から図のような変形方法に従って蓄積マップ側の注目座標を導出する。ここでは、蓄積マップにおけるポリゴンPに関する注目座標を黒塗り三角印、ポリゴンQに関する注目座標を黒塗り四角印でそれぞれ表している。この段階において導出された注目座標は、画素単位とは限らない(例えば、実数である)ことに留意する。
【0068】
次いで、注目座標に関連する蓄積マップの画素を更新対象画素として決定する。ここでは、従来の最近傍法における位置の導出方法に倣い、注目座標に最も近い位置にある1つの画素、即ち注目座標が含まれる領域にある1つの画素を更新対象画素とすることを例とする。ただし、従来の最近傍補間と異なる点として、求める位置の画素が入力側ではなく出力側であることに留意する。ここで、(i,j)に対応する蓄積マップにおける更新対象画素の位置を(x,y)とし、xは水平位置、yは垂直位置とする。
【0069】
次にテクスチャマップの走査対象画素における画素情報であるa_src(i,j)、r_src(i,j)、g_src(i,j)、及びb_src(i,j)を用い、以下のように蓄積マップの更新対象画素における画素情報であるw_sum(x,y)、a_sum(x,y)、r_sum(x,y)、g_sum(x,y)、及びb_sum(x,y)をそれぞれ更新する(以降、位置(i,j)および(x,y)の記述は省略する)。
すなわち、
w_sumに対しては、一定値(たとえば、1)だけ加算する。
a_sumに対しては、a_srcだけ加算する。
r_sumに対しては、a_srcにr_srcを乗算した値だけ加算する。
g_sumに対しては、a_srcにg_srcを乗算した値だけ加算する。
b_sumに対しては、a_srcにb_srcを乗算した値だけ加算する。
【0070】
なお、完全に不透明な画像のみを扱う場合、a_srcは一定値(たとえば、1)に置き換えることができ、a_sumは、w_sumで代用可能である。
即ち、蓄積マップの更新対象画素の更新は以下のように簡略化することが出来る。
w_sumに対しては、一定値(たとえば、1)だけ加算する。
r_sumに対しては、r_srcだけ加算する。
g_sumに対しては、g_srcだけ加算する。
b_sumに対しては、b_srcだけ加算する。
【0071】
以上のような処理を伴い、各ポリゴンのテクスチャマップの走査を完了させる。
【0072】
図7の左下は、テクスチャマップの走査結果として、蓄積マップで加算された影響値w_sumの分布を数値で表している。説明の便宜上、斜線で示す領域は影響値が一定値(たとえば、2)以上の画素を示しているが、詳細は後述する。
【0073】
灰色の領域は、テクスチャマップと蓄積マップの対応付けの一部の例であり、テクスチャマップにおける位置(7,9)(8,9)および(7,10)の3画素が、蓄積マップにおける位置(9,5)の画素の更新に携わった例を示している。
【0074】
図7の右下は、テクスチャマップの走査結果、蓄積マップにおける位置(9,5)の画素に対して行われた加算の例を表している。
【0075】
前述した規則に従い、以下のように加算される。
w_sum(9,5)= 1+1+1=3
a_sum(9,5)= 1×a_src(7,9)
+1×a_src(8,9)
+1×a_src(7,10)
r_sum(9,5)= 1×a_src(7,9)×r_src(7,9)
+1×a_src(8,9)×r_src(8,9)
+1×a_src(7,10)×r_src(7,10)
g_sum(9,5)及びb_sum(9,5)はr_sum(9,5)と同様に求めることができる。
【0076】
図8の例のように、もしテクスチャマップがラッピング(繰り返し)の場合、前述のテクスチャマップ側において各ポリゴンに囲まれる範囲を隔たりなく走査する際には、繰り返しを考慮して走査することに留意する。たとえば、位置(2,2)の画素はポリゴンPで3回、ポリゴンQで1回、合計4回走査対象となる。
【0077】
次に、
図9のフローチャートを参照して、本発明の第1の実施形態に係るリサンプリング装置により、テクスチャマップの画素に対応する蓄積マップ画素群を更新する処理の流れを説明する。これは、
図6のステップS16の処理の詳細に相当する。リサンプリング方法の一部にも相当し、中央制御部11がメインメモリ12のリサンプリングプログラムを実行した場合の処理の一部にも相応する。
【0078】
本フローチャートは、縮小による重心のずれを抑える手段の一部を示している。
この処理に入ると、テクスチャマップの画素の位置(A)に対応する蓄積マップ注目座標(B)から、「蓄積マップ位置(B1〜B4)」と「重み値(KB1〜KB4)」を作成する(ステップS21)。続いて、テクスチャマップ画素情報(DA)および重み値(KB1〜KB4)から蓄積マップ画素情報群(SB1〜SB4)を更新し(ステップS22)、リターンする。
【0079】
なお、「テクスチャマップ」とは、「変形元画像」と同義であることに留意する。
【0080】
以下、
図10の概念図を参照して、テクスチャマップの画素に対応する蓄積マップ画素群を更新する処理の流れを更に詳述する。
【0081】
前述の例では、従来の最近傍法における位置の導出方法に倣い、注目座標に最も近い位置にある1つの画素を更新対象画素とした。
【0082】
図10の例では、変形における重心のずれを抑える方法として、従来のバイリニア法における位置の導出方法および重みづけ方法に倣い、注目座標に近い位置にある複数(たとえば、水平2つと垂直2つとで、2×2=4)の画素を更新対象画素とする。ただし、従来のバイリニア補間と異なる点として、重み付けを行う複数の画素が入力側ではなく出力側であることに留意する。以下、詳述する。
【0083】
先ず、テクスチャマップにおける走査対象画素の位置Aに対応する蓄積マップの注目座標Bを順変換により求める。AからBへの破線の矢印は、座標の順変換を表している。ここで、座標マップを用いる場合、Bの水平座標及び垂直座標を、座標マップの位置Aの要素に記憶しておく。これにより、位置Aに対応する注目座標Bを後から再び求める必要がなくなる。
【0084】
次に、注目座標に近い4つの画素の位置をそれぞれB1、B2、B3、およびB4とする。4つの位置それぞれにおいて、Bとの距離に応じて重みづけを行い、重み値KB1、KB2、KB3、およびKB4を導出する。4つの重み値の合計は一定値(たとえば、1)とする。
【0085】
ここで、位置Aに関する画素情報をDAとし、位置B1に関する画素情報SB1については現在の値から「KB1を考慮したDA」だけ加算する。
【0086】
即ち、テクスチャマップの走査対象画素における画素情報であるa_src(A)、r_src(A)、g_src(A)、及びb_src(A)を用い、以下のように蓄積マップの更新対象画素における画素情報であるw_sum(B1)、a_sum(B1)、r_sum(B1)、g_sum(B1)、及びb_sum(B1)をそれぞれ更新する(以降、位置(A)及び(B)の記述は省略する)。
すなわち、
w_sumに対しては、KB1だけ加算する。
a_sumに対しては、KB1にa_srcを乗算した値だけ加算する。
r_sumに対しては、KB1にa_src及びr_srcを乗算した値だけ加算する。
g_sumに対しては、KB1にa_src及びg_srcを乗算した値だけ加算する。
b_sumに対しては、KB1にa_src及びb_srcを乗算した値だけ加算する。
この演算については、簡易的な表現として「SB1+=KB1・DA」と表す。
「+=」は、左辺自身に対する加算を表し、即ち「SB1+KB1・DA」の結果をSB1に代入することを示す。
【0087】
なお、完全に不透明な画像のみを扱う場合、a_srcは一定値(たとえば、1)に置き換えることができ、a_sumは、w_sumで代用可能である。
即ち、蓄積マップの更新対象画素の更新は以下のように簡略化することが出来る。
w_sumに対しては、KB1だけ加算する。
r_sumに対しては、KB1にr_srcを乗算した値だけ加算する。
g_sumに対しては、KB1にg_srcを乗算した値だけ加算する。
b_sumに対しては、KB1にb_srcを乗算した値だけ加算する。
【0088】
位置B2、B3、B4に関する画素情報SB2、SB3、SB4についても、それぞれ同様に上記のような加算を行う。
【0089】
このように、位置の導出及び重み付けの目的が更新対象画素における画素情報の加算でありながら、従来の参照を目的とした画素の位置の導出方法および重みづけ方法の適用が可能である。同様の例としてバイキュービック法等の適用も可能である。
【0090】
以下、
図11のフローチャートを参照して、本発明の第1の実施形態に係るリサンプリング装置による、変形先画像を走査し、蓄積マップを基に変形先画像を更新する処理の流れを説明する。尚、この処理は、
図4のステップS2に相当するものである。リサンプリング方法の一部にも相当し、中央制御部11がメインメモリ12のリサンプリングプログラムを実行した場合の処理の一部にも相応する。
【0091】
本フローチャートはポリゴンモデルを用いたテクスチャマッピングの例であり、変形先画像を走査する旨の説明である。ターゲットマップは変形先画像に相当する。
【0092】
即ち、本処理に入ると、全ポリゴン面の抽出を完了したか否かを判断し(ステップS31)、抽出を完了していなければ(ステップS31をNoに分岐)、次のポリゴン面を抽出し(ステップS32)、続いてターゲットマップにおいてポリゴン面に含まれる全画素抽出を完了したか否かを判断し(ステップS33)、完了していなければ(ステップS33をNoに分岐)、ターゲットマップの次画素を抽出し(ステップS34)、蓄積マップを基にターゲットマップ画素を更新する処理を行い(ステップS35)、ステップS33に戻る。こうして、ステップS33乃至S35の処理を、ターゲットマップにおいてポリゴン面に含まれる全画素抽出を完了するまで繰り返し、全画素抽出を完了すると(ステップS33をYesに分岐)、ステップS31に戻る。こうして、全ポリゴン面の抽出を完了するまでステップS31乃至S35の処理を繰り返し、抽出を完了すると(ステップS31をYesに分岐)、リターンする。
【0093】
ただし、
図11のフローチャートは複数のポリゴンからなるポリゴンモデル(即ち、変形方法が複数)を想定した例であり、ポリゴンが単一の場合や、変形方法定義データ42にて単一のテーブルや数式を用いる場合、ステップS31乃至S32は省略可能である。
即ち、本処理を開始すると、ステップS33乃至S35の処理を繰り返し、抽出を完了すると(ステップS33をYesに分岐)、リターンしてもよい。
【0094】
なお、「ターゲットマップ」とは、「変形先画像」と同義であり、「ポリゴン面」とは、変形元画像において「変形を行う範囲」と同義であることに留意する。
【0095】
ここで、
図12のフローチャートを参照して、蓄積マップを基にターゲットマップ画素を更新する処理の流れを説明する。これは、
図11のステップS35の処理の詳細に相当するものである。リサンプリング方法の一部にも相当し、中央制御部11がメインメモリ12のリサンプリングプログラムを実行した場合の処理の一部にも相応する。本フローチャートは、簡易的にターゲットマップ画素を更新する例であり、縮小の場合に重心のずれを抑える手段を示している。なお、画像の基準点において縮小と拡大が複合する変形に適した手段についてはここでは述べず、後述する。
【0096】
この処理に入ると、先ず、蓄積マップ画素の位置(P)に関する画素情報(SP)の影響値(w_sum)は一定値以上であるか否かを判断する(ステップS41)。ここで、影響値(w_sum)が一定値以上であれば(ステップS41をYesに分岐)、蓄積マップ画素情報(SP)からターゲットマップ画素情報(DP)を生成し(ステップS42)、リターンする。一方、影響値(w_sum)が一定値以上でなければ(ステップS41をNoに分岐)、従来の補間方法でテクスチャマップ画素情報DA1〜DA4からターゲットマップ画素情報(DP)を生成し(ステップS43)、リターンする。
【0097】
なお、「ターゲットマップ」とは、「変形先画像」と同義であり、「テクスチャマップ」とは、「変形元画像」と同義であることに留意する。
【0098】
以下、
図13の概念図を参照して、本発明の第1の実施形態に係るリサンプリング装置により、変形先画像を走査し、蓄積マップを基に変形先画像を更新する処理について詳細に説明する。
【0099】
図13の右の図は、変形元画像に相当する前述のテクスチャマップである。
図13の左上の図は、前述の蓄積マップであり、前述のテクスチャマップ側の走査が完了した状態とする。
図13の左下の図は、変形先画像に相当するターゲットマップを表している。
【0100】
ターゲットマップの画素は不透明度と色とを含む画素情報(a_dst:アルファ,r_dst:赤,g_dst:緑,b_dst:青)を持つものとする。
【0101】
テクスチャマップ、ターゲットマップ、および蓄積マップのそれぞれにおいて、画素は2次元で配置され、座標(水平方向,垂直方向)の単位は1画素を1とし、便宜上、画素の領域の境界を破線の格子で表している。
【0102】
ターゲットマップ側において、各ポリゴンに囲まれる範囲を隔たりなく走査する。ここで、走査対象画素の位置を(i,j)とし、iは水平位置、jは垂直位置とする。ちなみに、前述のとおり、蓄積マップはターゲットマップと共通の座標系としているので、すなわち(i,j)は走査対象画素の位置に対応する蓄積マップの画素の位置としても表すことができる。ターゲットマップにおけるポリゴンPに関する走査対象画素を黒塗り三角印又は白抜き三角印とし、ポリゴンQに関する走査対象画素を黒塗り四角印又は白抜き四角印としてそれぞれ表している。
【0103】
画素情報の入出力関係は破線の矢印で表しており、蓄積マップからターゲットマップへの転送、またはテクスチャマップからターゲットマップへの転送を意味する。ここで、白抜き三角印又は白抜き四角印は、影響値w_sum(i,j)が一定値(たとえば、2)以上であることを表し、黒塗り三角印又は黒塗り四角印は、影響値w_sum(i,j)が一定値(たとえば、2)未満であることを表している。影響値w_sum(i,j)が2以上である場合と2未満である場合で異なる更新対象画素の更新方法を用いる。
【0104】
走査対象画素に関して、まず当該画素の位置に対応する蓄積マップの画素の影響値w_sum(i,j)を読み出す。蓄積マップにおける影響値w_sum(i,j)が2以上の場合、局部的に縮小相当と考え、当該画素に携わったテクスチャマップの画素の数が充分と見なし、携わった画素の平均を用いることとする。
即ち、蓄積マップにおける画素情報w_sum(i,j)、a_sum(i,j)、r_sum(i,j)、g_sum(i,j)、b_sum(i,j)を用いて、以下に示すようにターゲットマップの更新対象画素における画素情報a_dst(i,j)、r_dst(i,j)、g_dst(i,j)、b_dst(i,j)をそれぞれ更新する(以降、位置(i,j)の記述は省略する)。
すなわち、
a_dstに対しては、a_sumからw_sumを除算した値を代入する。
r_dstに対しては、r_sumからa_sumを除算した値を代入する。
g_dstに対しては、g_sumからa_sumを除算した値を代入する。
b_dstに対しては、b_sumからa_sumを除算した値を代入する。
蓄積マップの画素情報をS(i,j)とし、この演算については簡易的な表現として「S(i,j)/w_sum(i,j)」と表す。
【0105】
なお、必ず不透明な画像を扱う場合、a_sumは、w_sumで代用可能な事は前述の説明のとおりである。即ち、ターゲットマップの更新対象画素の更新は以下のように置き換えることが出来る。
すなわち、
r_dstに対しては、r_sumからw_sumを除算した値を代入する。
g_dstに対しては、g_sumからw_sumを除算した値を代入する。
b_dstに対しては、b_sumからw_sumを除算した値を代入する。
【0106】
走査対象画素の位置に対応する蓄積マップの画素の影響値w_sum(i,j)が2未満の場合、局部的に拡大相当と考え、当該画素に携わったテクスチャマップの画素の数が不充分と見なす。この場合、当該画素の画素情報を用いず、従来のテクスチャマッピングに基づいた補間(たとえば、バイリニア補間)により算出した値を用いてターゲットマップの更新対象画素における画素情報を更新する。
【0107】
即ち、走査対象画素に関して、まず当該画素に関する位置から図のような変形方法に従ってテクスチャマップ側の注目座標を導出する。テクスチャマップにおけるポリゴンPに関する注目座標を黒塗り三角印、ポリゴンQに関する注目座標を黒塗り四角印としてそれぞれ表している。この段階において導出された注目座標は画素単位とは限らない(たとえば、実数である)ことに留意する。
【0108】
次に、注目座標に関連するテクスチャマップの画素を被参照画素として決定する。ここでは、注目座標に近い2×2の画素、即ち注目座標が含まれる領域の画素及び近傍の画素を被参照画素とする。以下、詳述する。
【0109】
図14には、従来のテクスチャマッピングに基づいた補間の例を示す。
ターゲットマップに関する、位置Pに応じた画素情報DPの生成例は次式で示される。
DP=(KA1・DA1+KA2・DA2+KA3・DA3+KA4・DA4)
/(KA1+KA2+KA3+KA4)
【0110】
すなわち、先ずターゲットマップの位置Pに対応するテクスチャマップの注目座標Aを逆変換により求める。PからAへの破線の矢印は、座標の逆変換を表している。Aに近い4つの画素の位置A1、A2、A3、およびA4において、それぞれAとの距離に応じて重みづけを行い、重み値KA1、KA2、KA3、およびKA4を導出する。4つの重み値の合計は一定値(たとえば、1)とする。そして、位置A1〜A4に関する画素情報をDA1〜DA4とし、位置Pに関する画素情報DPについては「KA1〜KA4を考慮したDA1〜DA4」を合成して生成する。
【0111】
なお、
図15には、変形例として、従来の補間から算出した値と蓄積マップから算出した値とを重み付けによる合成の考え方を示し説明する。
【0112】
前述の例(
図12の処理)では、蓄積マップにおける画素の影響値w_sumが一定値以上である場合と一定値未満である場合で異なる更新対象画素の更新方法を用いたが、両方の方法から値をそれぞれ算出し、影響値w_sumの値に応じた割合を用いて合成した画素情報を更新対象画素の画素情報としてもよい。即ち、影響値w_sumの値が大きいとき、蓄積マップの位置Pにおける画素情報SPを用いる割合も高くする。これにより、拡大部分と縮小部分の境目がなめらかになる。
【0113】
図16には、リサンプリング結果の例を示し説明する。
【0114】
図16は、奥行きが非常に長い直方体の内部を投影する際のテクスチャマッピングについて従来手段の異方性フィルタと比較した例である。
図16(a)が従来の異方性フィルタ(16xサンプル設定)、
図16(b)が本発明の手段であり、それぞれ遠方部分、即ち縮小を含む変形を強調している。市松模様や直線模様に着目し、本発明の結果として、特に画素の平均や重心といった観点から遠方部分の品質が高く保たれていることを示している。
【0116】
第2の実施形態に係るリサンプリング装置による処理では、第1の実施形態に係るリサンプリング装置による
図12の処理を
図17に示されるように変更している。
【0117】
以下、
図17のフローチャートを参照して、本発明の第2の実施形態に係るリサンプリング装置による、蓄積マップを基にターゲットマップ画素を更新する処理の流れを説明する。本フローチャートは、縮小による重心のずれを抑える手段に加え、画像の基準点において縮小と拡大が複合する変形に適した手段を示している。これは、第2の実施形態に係るリサンプリング方法の一部にも相当し、中央制御部11がメインメモリ12のリサンプリングプログラムを実行した場合の処理の一部にも相応する。
以下、詳述する。
【0118】
すなわち、この処理に入ると、蓄積マップの画素の位置(P)に対応するテクスチャマップ注目座標(A)から、「テクスチャマップ位置(A1〜A4)」と「重み値(KA1〜KA4)」とを作成し(ステップS51)、テクスチャマップ位置(A1〜A4)に対応する蓄積マップ注目座標(B1〜B4)から、「蓄積マップ位置(B11〜B44)」と「重み値(KB11〜KB44)」とを作成し(ステップS52)、蓄積マップの画素情報(DB11〜DB44)および重み値(KA1〜KA4,KB11〜KB44)からターゲットマップの位置(P)の画素情報(DP)を生成し(ステップS53)、リターンすることになる。
【0119】
なお、「ターゲットマップ」とは、「変形先画像」と同義であり、「テクスチャマップ」とは、「変形元画像」と同義であることに留意する。
【0120】
ここで、
図18の概念図を参照して、蓄積マップを基にターゲットマップ画素を更新する処理について更に詳述する。
【0121】
先ず、蓄積マップの位置Pに対応するテクスチャマップの注目座標Aを逆変換により求める。PからAへの破線の矢印は、座標の逆変換を表している。次いで、注目座標Aに近い4つの画素の位置A1、A2、A3、およびA4において、それぞれAとの距離に応じて重み付けを行い、重み値KA1、KA2、KA3、およびKA4を導出する。4つの重み値の合計は一定値(たとえば、1)とする。
【0122】
さらに、位置A1に対応する蓄積マップの注目座標B1を順変換により求める。A1からB1への破線の矢印は、座標の順変換を表している。次いで、注目座標B1に近い4つの画素の位置B11、B12、B13、およびB14において、それぞれB1との距離に応じて重み付けを行い、重み値KB11、KB12、KB13、およびKB14を導出する。4つの重み値の合計は一定値(たとえば、1)とする。
【0123】
なお、座標マップを用いている場合、座標マップの位置A1の要素である座標情報が存在するならば、その座標情報をB1としてもよい。
【0124】
A2、A3、およびA4に対応する座標や位置等は、図示を省略しているが、これらも同様に導出する。
【0125】
そして、位置B11〜B44に関する画素情報をDB11〜DB44とし、位置Pに関する画素情報DPについては「KB11〜KB44およびKA1〜KA4を考慮したDB11〜DB44」を合成して生成する。
【0126】
ところで、前述したテクスチャマップ側の走査が完了した状態において、拡大部分では蓄積マップの画素の更新に隔たりが生じ、位置によっては画素が一切更新されていない場合もある。ただし、ここで説明した方法における蓄積マップを参照するための座標変換は既にテクスチャマップ側の走査の際に行われ、さらには関連する蓄積マップの画素が更新されている。すなわち、更新が一切されていない画素の位置は導出されないものと考えてよい。よって、縮小と拡大で処理を分ける必要がないので、この方法は画像の基準点において縮小と拡大が複合する変形に適したリサンプリングと言える。
【0127】
図19には、第2の実施形態によるリサンプリング結果の例を示す。
【0128】
座標の順変換(入力→出力)、座標の逆変換(出力→入力)は次式で示される。
座標の順変換(入力→出力):
X_OUT = (w / 2) + cos(X_IN / w * 2 * PI) * Y_IN / h * (w / 2)
Y_OUT = (h / 2) + sin(X_IN / w * 2 * PI) * Y_IN / h * (h / 2)
座標の逆変換(出力→入力):
X_IN = atan2((Y_OUT - h / 2) / h, (X_OUT - w / 2) / w) / (2 * PI) * w
Y_IN = sqrt(((X_OUT - w / 2) / (w / 2)) ^ 2 + ((Y_OUT - h / 2) / (h / 2)) ^ 2) * h
【0129】
図19は、本発明の第2の実施形態に係るリサンプリング装置の手段で極座標変換による変形を行った結果の例である。
【0130】
図19(b)は変形元画像であり、正方形をパターンとして格子状に配置した例である。変形元画像の最上部は変形先画像の中心に対応し、変形元画像の左下から右下への線分は、変形先画像の右端から時計回りで1周する円に対応するものとする。
図19(a)は蓄積マップにおいて、変形元画像の各画素の位置から順変換により求めた座標を表しており、黒色の画素に対しては黒塗り丸印、白色の画素に対しては白抜き丸印でそれぞれ表している。
図19(d)は変形元画像において、変形先画像となる各画素の位置から逆変換により求めた座標を白抜き丸印で表している。
【0131】
また
図19(a)の例は、円の端付近において、半径方向については座標群が密であるため縮小になるが、円周方向については座標群が疎であるため拡大になるような変形である。変形の結果として、
図19(c)のように、拡大の方向では補間によりジャギーが抑制され、かつ、縮小の方向では平均によりエイリアシングが抑制されている。
【0132】
以上、本発明の第1、第2の実施形態について詳述したが、本発明はこれらに限定されることなく、その主旨を逸脱しない範囲で種々の改良・変更が可能である。
【0133】
例えば、本発明は、同一発明者の先願である、特願2011−096940後の明細書及び図面に記載の全方位画像編集装置に記載の描画処理に適用してもよい。この場合、視野角を極端に小さくした状態、即ち表示を拡大した状態での細かな描き込みにおいて、縮小による重心のずれを抑えるリサンプリングが期待できる。また、視野角を極端に大きくした状態、即ち表示を広範囲にした状態での遠近感を表現する描き込みにおいて、画像の基準点において縮小と拡大が複合する変形に適したリサンプリングが期待できる。
【0134】
また、本発明は、2次元までに限定される手段を用いない。したがって、いずれの処理も3次元への拡張(たとえば、ボクセルを用いる3次元データの変形等)が可能である。