説明

レンズ歪み除去装置、方法およびプログラム

【課題】リアルタイムで高精度に画像の歪みを補正することのできるレンズ歪み除去装置、方法およびプログラムを提供する。
【解決手段】GPU14に、レンズ歪みモデルに基づいて作成したメッシュ43を作成しておく。メッシュ43の各頂点には、テクスチャ座標として元のレンズ歪みのある画像の画素の座標と、これに対応する頂点座標としてレンズ歪みを除去した後の画像の画素の座標とが設定される。さらに、メッシュ43には、メッシュ43の各頂点を接続するための面情報が設定される。このメッシュ43に、カメラ18で撮像された画像52をテクスチャとして貼り付け、GPU14の描画処理を実行させる。これにより、GPU14からレンズ歪み除去された画像56をフレーム毎に得る。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、レンズ歪み除去装置、方法およびプログラムに関し、特に画像の歪みを補正することのできるレンズ歪み除去装置、方法およびプログラムに関する。
【背景技術】
【0002】
カメラ等で撮像した画像には、球面レンズの球面収差による画像のレンズ歪みが発生する。まず、図12を参照して、従来技術による画像のレンズ歪みを除去する流れを説明する。図12は、従来技術による画像のレンズ歪みを除去する過程の画像のイメージである。図12(a)はカメラ等で撮像される撮像対象物のイメージであり、図12(b)は撮像対象物をカメラ等で撮像した画像のイメージであり、図12(c)はレンズ歪みを除去した後の画像のイメージである。
【0003】
例えば、図12(a)に示すような撮像対象物である正方格子模様を撮像すると、図12(b)に示すように球面レンズの球面収差によって撮像された画像にレンズ歪みが発生する。このようなレンズ歪みは、特に広角レンズ等で著しくなる。画像を用いて計測を行う場合等には、このレンズ歪みが原因となり計測値の誤差を招く。このため、図12(c)に示すように歪んだ画像がピンホールカメラモデルに従うよう補正することがよく行われる。レンズ歪みの補正方法には、パラメトリックな方法とノンパラメトリックな方法がある。例えば、非特許文献1の画像のレンズ歪み補正方法においては、パラメトリックな方法によってレンズ歪みを補正している。
【0004】
まず、補正前の画像と補正後の画像とで、全ピクセル(画素)分の座標の対応関係を示すルックアップテーブルを用いて変換を行う。まず歪み補正後の画像の画素座標が横軸、縦軸ともに整数である画素に、補正前の画素座標を与えるためのルックアップテーブルを予め作成しておく。そして、変換処理を実行するときに、そのルックアップテーブルから補正前の画素座標を求める。補正前の画素座標は必ず整数にはならないので、例えばバイリニア補間等の補間方法を用いてレンズ歪み補正後の画素の値を得る。
【0005】
一方、最近ではGPU(Graphics Processing Unit)と呼ばれる3次元グラフィックスを処理する専用のハードウエアを備えたデバイスが、CAD(Computer Aided Design)のシステムだけでなく、パーソナルコンピュータや家庭用ゲーム機等にも標準で搭載されており、身近に利用されるようになっている。
【0006】
このGPUは、演算処理を並列に実行しているため、CPU(Central Processing Unit)に比べて演算速度が格段に速いという特徴をもつ。また、GPUにはピクセルシェーダ、頂点シェーダといった機能を始め、最近ではジオメトリシェーダといった演算ハードウエアが備わっているものがある。さらに、最近のGPUでは、ピクセルシェーダやジオメトリシェーダ、頂点シェーダといった機能でも、ユーザがプログラムすることができるようになっており、GPUが家庭用ゲーム機等の3次元CG(Computer Graphics)の表現力の向上に寄与している。
【0007】
特に、画素単位で画像処理を行うピクセルシェーダでプログラムすることができる機能は画像処理に適していることから、多くの画像処理アルゴリズムがGPUのピクセルシェーダを用いて実装されてきている。これにより、CPUで画像処理を行っていた場合に比べて処理速度を約数十倍以上高速化することができるものがあり、画像処理にかかるCPUの負荷を減らすことができる。例えば、特許文献1の画像のレンズ歪み補正方法においては、このピクセルシェーダを用いて画像のレンズ歪みを除去している。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2009−165106号公報
【非特許文献】
【0009】
【非特許文献1】R. Hartley and A. Zisserman著、”Multiple View Geometry in Computer Vision Second Edition”、Cambridge University Press、2003年
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかしながら、非特許文献1の画像のレンズ歪み補正方法でレンズ歪みを除去する場合、ルックアップテーブルを用いた変換処理と補間処理とを行う必要があり計算量が膨大となる。このため、スペックの低いパーソナルコンピュータ等では処理に多くの時間を要することからリアルタイムでの処理が難しかった。
また、特許文献1の画像の歪み補正方法でレンズ歪みを除去する場合、GPUのピクセルシェーダで実行する場合はリアルタイムでの処理が可能である。但し、レンズ歪みを除去するためのレンズ歪み除去処理と例えば回転などの他の幾何変換処理とを組み合わせて行う場合には、一旦処理結果を画像として保存しておくか、ピクセルシェーダの中に他の幾何変換処理を一緒にプログラムしておく必要がある。このため、レンズ歪み除去処理と他の幾何変換処理とでそれぞれ補間処理をしなければならず、補正された画像の画質が劣化するという問題があった。
そこで、本発明は、上記の課題に鑑み、リアルタイムで高精度に画像の歪みを補正することのできるレンズ歪み除去装置、方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
本発明に係るレンズ歪み除去装置、方法およびプログラムは、上記の目的を達成するために、次のように構成される。
本発明に係る第1のレンズ歪み除去装置は、画像のレンズ歪みを除去するレンズ歪み除去装置であって、前記レンズ歪みを除去する前の画像の画素が前記レンズ歪みを除去することによって移る画素である移動後画素から画面全部または一部のメッシュを作成するメッシュ作成手段と、前記レンズ歪みを除去する前の画像をテクスチャとして前記メッシュに貼り付けることにより前記レンズ歪みを除去した画像を生成する歪み除去画像生成手段と、を備えることを特徴とする。
【0012】
上記のレンズ歪み除去装置によれば、メッシュ作成手段がメッシュを作成し、歪み除去画像生成手段がこのメッシュにカメラ等で撮像した画像をテクスチャとして貼り付けることによりレンズ歪みを除去した画像を得る。つまり、レンズ歪みのある画像の画素単位を直接操作してレンズ歪みを除去するのではなく、レンズ歪みを除去するように作成されたメッシュに、レンズ歪みのある画像が貼り付けられた画像を描画することでレンズ歪みが除去された画像を得る。このため、画素単位での座標変換を直接行うことがなく、リアルタイムで高精度にレンズ歪みを除去した画像を得ることが可能となる。また、レンズ歪み除去処理と例えば回転などの他の幾何変換処理とを組み合わせて行う場合であっても、まずメッシュに対して他の幾何変換を適用してからテクスチャを貼り付けることにより、画素の補間処理は最後に一度しか発生しないので、画質を劣化させずに画像をリアルタイムに補正することが可能となる。
【0013】
本発明に係る第2のレンズ歪み除去装置は、前記メッシュ作成手段は、前記レンズ歪みを除去する前の画像と前記レンズ歪みを除去した後の画像とで対応する画素の各座標を示す頂点情報を設定する頂点情報設定手段と、前記頂点情報設定手段によって設定された前記頂点情報同士の接続関係を示す面情報を設定する面情報設定手段と、を備えることを特徴とする。
上記のレンズ歪み除去装置によれば、レンズ歪みを除去する前の画像の画素とレンズ歪みを除去した後の画像の画素との対応関係をもつ複数の頂点と、その複数の頂点同士の接続関係とから成る、レンズ歪み除去するために用いるメッシュを作成することが可能となる。
【0014】
本発明に係る第3のレンズ歪み除去装置は、前記メッシュ作成手段は、前記頂点情報が設定される頂点バッファを確保する頂点バッファ確保手段を備え、前記頂点情報設定手段は、前記頂点バッファに前記頂点情報を設定することを特徴とする。
上記のレンズ歪み除去装置によれば、頂点情報が設定される頂点バッファを確保し、頂点バッファにレンズ歪みを除去する前の画像の画素とレンズ歪みを除去した後の画像の画素との対応関係を示す頂点情報を設定し、レンズ歪みを除去するために用いるメッシュを作成する。レンズ歪みのある画像の画素単位で直接操作してレンズ歪みを除去するのではなく、そのメッシュにレンズ歪みのある画像をテクスチャとして貼り付け、レンズ歪みを除去する。このため、画素単位での座標変換や補間処理を直接行うことがなく、リアルタイムで高精度にレンズ歪みを除去した画像を得ることが可能となる。
【0015】
本発明に係る第4のレンズ歪み除去装置は、前記メッシュ作成手段は、前記面情報が設定されるインデクスバッファを確保するインデクスバッファ確保手段を備え、前記面情報設定手段は、前記インデクスバッファに前記面情報を設定することを特徴とする。
上記のレンズ歪み除去装置によれば、インデクスバッファを使用しない場合には、同一の頂点の頂点情報を複数回頂点バッファに登録する必要があるが、インデクスバッファを用いて頂点の面情報を表現すれば、同一の頂点の頂点情報は1つだけ登録すれば良い。例えば、メッシュを構成する複数の三角形のうち、隣り合う2つの三角形の頂点の数は全部で6つである。但し、三角形の3つの頂点のうち、2つの頂点は同じであるので、インデクスバッファを用いて4つの頂点のみの頂点情報を登録すれば良い。
【0016】
本発明に係る第5のレンズ歪み除去装置は、前記メッシュ作成手段は、レンズの種類に応じて予め作成され記憶してある前記メッシュを読み込んでくるデータ取得手段を備えることを特徴とする。
上記のレンズ歪み除去装置によれば、多くの3次元グラフィックスのAPI(Application Program Interface)関数で少なくとも頂点バッファを含むメッシュオブジェクトを作成しておくことができるため、後からメッシュオブジェクトを読み出すことが可能となる。まずメッシュオブジェクトを作成し、ファイル等に保存しておく。そして、メッシュオブジェクトをファイルから読み出す処理に置き換えて実行することで、初期設定処理を容易にしてレンズ歪みの除去を行うことが可能となる。
【0017】
本発明に係る第6のレンズ歪み除去装置は、GPUを備え、前記歪み除去画像生成手段は、前記GPUのテクスチャマッピング処理を利用して前記レンズ歪みを除去した画像を生成するようになっていることを特徴とする。
上記のレンズ歪み除去装置によれば、レンズ歪み除去するために用いるメッシュを画像処理専用のハードウエアであるGPUに与えておき、GPUのテクスチャマッピング処理を利用してリアルタイムで高精度に画像の歪みを補正することが可能となる。
【0018】
本発明に係るレンズ歪み除去方法は、画像のレンズ歪みを除去するレンズ歪み除去方法であって、メッシュ作成手段が前記レンズ歪みを除去する前の画像の画素が前記レンズ歪みを除去することによって移る画素である移動後画素から画面全部または一部のメッシュを作成するメッシュ作成ステップ、歪み除去画像生成手段が前記レンズ歪みを除去する前の画像をテクスチャとして前記メッシュに貼り付けることにより前記レンズ歪みを除去した画像を生成する歪み除去画像生成ステップを有することを特徴とする。
【0019】
上記のレンズ歪み除去方法によれば、このレンズ歪み除去方法で動作する第1のレンズ歪み除去装置と同じ作用を得ることが可能となる。
本発明に係るレンズ歪み除去プログラムは、コンピュータで画像のレンズ歪みを除去するレンズ歪み除去プログラムであって、コンピュータを前記レンズ歪みを除去する前の画像の画素が前記レンズ歪みを除去することによって移る画素である移動後画素から画面全部または一部のメッシュを作成するメッシュ作成手段、前記レンズ歪みを除去する前の画像をテクスチャとして前記メッシュに貼り付けることにより前記レンズ歪みを除去した画像を生成する歪み除去画像生成手段として機能させるためのプログラムである。
上記のレンズ歪み除去プログラムによれば、コンピュータのハードディスク等にレンズ歪み除去プログラムをインストールしておき、コンピュータにレンズ歪み除去プログラムに従って処理を実行させることによって、第1のレンズ歪み除去装置と同じ作用を得ることが可能となる。
【発明の効果】
【0020】
本発明によれば、レンズ歪みのある画像の画素を直接操作してレンズ歪みを除去するのではなく、例えばGPUにレンズ歪みを除去することができるようなメッシュを作成しておき、このメッシュにレンズ歪みのある画像をテクスチャとして貼り付けることによって、レンズ歪みが除去された画像を得る。このため、画素単位の変換処理や補間処理を直接行う必要がない。これにより、スペックの低いパーソナルコンピュータ等でもリアルタイムで高精度に画像の歪みを除去することができる。
【0021】
また、画像のレンズ歪みを除去する処理と、例えば画像を回転する等の他の幾何変換処理とを組み合わせて行う場合であっても、まずメッシュに対して他の幾何変換を適用してからテクスチャを貼り付けることにより、補間処理は最後に1度しか発生しない。これにより、画質の劣化を抑えることができる。さらに、リアルタイムで高精度に画像の歪みを除去することができる。
【0022】
また、歪みが目立たない画素部分では、メッシュの頂点数を減らすことにより、GPUの処理負荷や処理時間を軽減することができる。
また、頂点バッファやインデクスバッファを含むメッシュオブジェクトをファイルに保存しておき、初期設定でファイルからメッシュを読み出すことにより、初期設定でレンズ歪みを除去する前の画像の画素とレンズ歪みを除去した後の画像の画素との対応関係をもつ複数の頂点と、その複数の頂点同士の接続関係とを設定するためにかかる手間を省くことができる。
【図面の簡単な説明】
【0023】
【図1】本実施形態に係るレンズ歪み除去装置10の装置構成を示すブロック図である。
【図2】第1実施形態に係るレンズ歪み除去プログラム30の機能構成を示すブロック図である。
【図3】レンズ歪み除去装置10によるレンズ歪み除去処理の流れを示す模式図である。
【図4】メッシュ43を用いてレンズ歪みが生じている画像42からレンズ歪みが除去された画像44が生成される流れを示す模式図である。
【図5】メッシュ43を示すイメージである。
【図6】メッシュ43とメッシュ43に設定される頂点情報とを示した模式図である。
【図7】メッシュ43とメッシュ43に設定される面情報を示した模式図である。
【図8】レンズ歪み除去処理の処理全体の流れを示すフローチャートである。
【図9】第1実施形態に係るレンズ歪み除去プログラム30によるメッシュ43を作成する処理の流れを示すフローチャートである。
【図10】第2実施形態に係るレンズ歪み除去プログラム80の機能構成を示すブロック図である。
【図11】第2実施形態に係るレンズ歪み除去プログラム80によるメッシュ43を作成する処理の流れを示すフローチャートである。
【図12】従来技術による画像のレンズ歪みを除去する過程の画像のイメージである。
【発明を実施するための形態】
【0024】
以下に、本発明の好適な実施形態を添付図面に基づいて説明する。なお、以下の説明において参照する各図では、他の図と同等の構成要素は同一の符号によって示す。
(レンズ歪み除去装置10の装置構成)
まず、図1を参照して、本実施形態に係るレンズ歪み除去装置10の装置構成を説明する。図1は、本実施形態に係るレンズ歪み除去装置10の装置構成を示すブロック図である。
【0025】
図1に示すレンズ歪み除去装置10は、CPU11、メモリ(ROM;Read Only Memory、RAM;Random Access Memory)12、ハードディスクドライブ13、GPU14、マウス15、キーボード16、ディスプレイ17およびカメラ18を備えて構成される。
CPU11は、ハードディスクドライブ13に保存されている各種のプログラムを実行することによって、プログラムに従って各計算処理やデータ処理を行い、各部を統括して制御するものである。
【0026】
メモリ12は、CPU11やGPU14が直接読み書きすることができ、例えば画像データやユーザからの指示データを一時的に記憶するものである。
ハードディスクドライブ13は、例えばレンズ歪み除去装置10でレンズ歪み除去するためのレンズ歪み除去プログラム30がインスールされたり、レンズ歪み除去プログラム30で生成された画像やレンズ歪み除去プログラム30を実行する上で必要な各種の設定ファイルを保存したりするものである。
【0027】
GPU14は、CPU11に代わり、画像データの処理を行う専用の装置である。GPU14に限定されないが、GPU14を用いることによりCPU11のみで画像データを処理するよりも、より高速に処理を行うことができる。
マウス15およびキーボード16は、ユーザがレンズ歪み除去処理の設定画面を操作したり、カメラ18の撮像方向や撮像範囲を設定したりするために用いるものである。
ディスプレイ17は、レンズ歪みが除去された画像を表示したり、レンズ歪み除去の設定画面を表示したりするものである。
【0028】
カメラ18は、レンズ歪み除去装置10で処理するための画像を撮像するためのものである。本実施形態に係るレンズ歪み除去装置10において、カメラ18は動画を撮像するものであるが、静止画を撮像するものであっても良い。また、カメラ18の種類は、例えばUDP(User Datagram Protocol)のプロトコルを用いて画像を送信するネットワークカメラとして説明する。
本実施形態に係るレンズ歪み除去装置10は、ハードディスクドライブ13にインストールされたレンズ歪み除去プログラム30をオペレーティングシステム上で実行する。このレンズ歪み除去プログラム30には、オフィスや駐車場、店舗等の監視場所に設置されたカメラ18で撮像された画像が入力される。
【0029】
(第1実施形態)
(レンズ歪み除去プログラム30の機能構成)
次に、図2を参照して、第1実施形態に係るレンズ歪み除去プログラム30の機能構成を説明する。図2は、第1実施形態に係るレンズ歪み除去プログラム30の機能構成を示すブロック図である。
図2に示すレンズ歪み除去プログラム30は、頂点バッファ確保部31、頂点情報設定部32、インデクスバッファ確保部33、面情報(インデクス情報)設定部34、画像入出力部35、テクスチャ設定部36および描画機能実行部37を備えて構成される。
【0030】
頂点バッファ確保部31は、GPU14にレンズ歪みを除去する画像部分の画素数分の頂点情報を設定するための頂点バッファを確保するための処理を行う。この頂点情報は、少なくとも、頂点座標(xα,yα,zα)としてレンズ歪みを除去した後の画像の座標と、テクスチャ座標(uα,vα)として歪みを除去する前の座標とから成る。これらの合計5つの座標値は、浮動小数点数で表される。このため、頂点バッファ確保部31は、例えば頂点座標メンバとテクスチャ座標メンバとを有する構造体の配列をメモリ12に定義する。
【0031】
頂点情報設定部32は、頂点バッファ確保部31によって確保された頂点バッファに頂点情報を設定するための処理を行う。
インデクスバッファ確保部33は、GPU14に頂点情報の接続関係を示す面情報を設定するためのインデクスバッファを確保する処理を行う。
面情報設定部34は、インデクスバッファ確保部33によって確保されたインデクスバッファに頂点番号(i,j,k)を面情報として設定するための処理を行う。この面情報は、インデクス(頂点番号)の集まりから成る。
【0032】
画像入出力部35は、カメラ18で撮像された画像を入力し、画像をGPU14に渡すためにテクスチャ設定部36に出力する。カメラ18で撮像された画像が圧縮されている場合、画像入出力部35は、デコードを行い、ビットマップ形式の画像に変換し、そのビットマップ形式の画像をテクスチャ設定部36に出力する。また、画像入出力部35は、GPU14でレンズ歪みを除去した後の画像を受け取り、例えば画像ファイルとしてハードディスクドライブ13等に出力するための処理を行う。
【0033】
テクスチャ設定部36は、GPU14に設定された頂点情報と面情報とから成る後述するメッシュに、画像入出力部35から入力したレンズ歪みの生じている画像をテクスチャとして貼り付けるための設定処理を行う。
描画機能実行部37は、レンズ歪みを補正した画像を得るために、メッシュにレンズ歪みの生じている画像が貼り付けられている画像を、GPU14に描画させるための描画処理を実行させる。なお、GPU14で生成されたレンズ歪みを除去した後の画像は、ディスプレイ17に出力するのみならず、例えばハードディスクドライブ13等にファイルとして保存することもできる。また、必要に応じて画像を加工することもできる。
【0034】
なお、本実施形態に係るレンズ歪み除去プログラム30においては、頂点バッファ確保部31、頂点情報設定部32、インデクスバッファ確保部33および面情報設定部34から成る処理部が、メッシュ作成手段(ステップS101)として機能する。また、画像入出力部35、テクスチャ設定部36および描画機能実行部37から成る処理部が、歪み除去画像生成手段(ステップS102〜S104)として機能する。そして、レンズ歪み除去プログラム30により、レンズ歪み除去装置10でレンズ歪みを除去した画像を生成するためのレンズ歪み除去処理が実行される。
【0035】
(レンズ歪み除去処理の流れ)
次に、図3および図4を参照して、レンズ歪み除去プログラム30によるレンズ歪み除去処理の流れを説明する。図3は、レンズ歪み除去装置10によるレンズ歪み除去処理の流れを示す模式図である。図4は、メッシュ43を用いてレンズ歪みが生じている画像42からレンズ歪みが除去された画像44が生成される流れを示す模式図である。
図3に示すように、まずカメラ18で3つの図形が描かれている撮像対象物41を撮像すると、画像42が得られる。この撮像された画像42は、本来であれば撮像対象物41と同じ図形の画像になるはずである。しかしながら、撮像された画像42にはレンズ歪みが生じている。このため、撮像された画像42は、図形が歪んだ画像になる。
このレンズ歪みが生じている画像42はレンズ歪み除去プログラム30に入力される。そして、レンズ歪み除去プログラム30は補正処理に用いられるメッシュ43をGPU14に作成する。
【0036】
次に、レンズ歪み除去プログラム30は、GPU14に作成されたメッシュ43にレンズ歪みが生じている画像42をテクスチャとして貼り付ける。さらに、レンズ歪み除去プログラム30は、GPU14の描画処理を起動する。要するに、レンズ歪み除去プログラム30は、メッシュ43にレンズ歪みが生じている画像42が貼り付けられている画像をGPU14に描画させることで、レンズ歪みが除去された画像を得る。GPU14で描画処理が終了すると、GPU14からレンズ歪みを除去した後の画像44がディスプレイ17に出力される。
【0037】
図4に示すように、レンズ歪み除去プログラム30は、メッシュ43にレンズ歪みが生じている画像42をテクスチャとして貼り付け、GPU14に描画処理を実行させる。すると、メッシュ43上にレンズ歪みを除去した画像44が得られる。
上述したように、レンズ歪み除去プログラム30は、メッシュ43にレンズ歪みが生じている画像42が貼り付けられている画像をGPU14に描画させることで、レンズ歪みが除去された画像を生成する。この処理は、例えばコンピュータグラフィクス上で、立体的な無地な商品の箱の表面に、商品パッケージの絵柄写真をテクスチャとして貼り付け、絵柄写真が貼り付けられた商品の箱の画像を生成するのと同じである。このような方法を応用して、レンズ歪み除去プログラム30は、レンズ歪みが除去された画像44を生成している。つまり、メッシュ43は、レンズ歪みが生じている画像42が貼り付けられさえすれば、レンズ歪みが除去された画像44が得られるようにできている。
【0038】
(メッシュ43の作成方法)
次に、図5〜図7を参照して、メッシュ43を作成する流れを説明する。図5は、メッシュ43を示すイメージである。図6は、メッシュ43とメッシュ43に設定される頂点情報とを示した模式図である。図7は、メッシュ43とメッシュ43に設定される面情報を示した模式図である。
図5に示すメッシュ43は、一例として正方格子模様を複数の三角形の集まりで表したものである。このメッシュ43は、レンズ歪みが生じている模様の曲線部分が、レンズ歪みによる歪み方向とは逆方向に歪んだ形であると考えることができる。
【0039】
メッシュ43を形成する三角形の数や形は、任意であって良い。レンズ歪みが生じている画像42の大きさ、レンズ歪みを除去する向きや量等が異なるため、メッシュ43自体の形や、メッシュ43を構成する三角形の数や形はそれぞれ異なる。例えば、レンズ歪みによる変形が比較的少ない部分では、レンズ歪みによる変形が多い部分よりも三角形の大きさを大きくし、数を少なくすることで、GPU14の処理負荷を軽減することもできる。
また、カメラ18の取り付け位置によっては、レンズ歪みが生じている画像42の視点方向を変換しなければならない場合がある。このような場合、レンズ歪み除去処理と一緒に視点方向を変えることができるように、メッシュを作成すると良い。
【0040】
図6に示すように、メッシュ43を形成する三角形の各頂点には、テクスチャ座標(uα,vα)にレンズ歪みを除去する前の画像42の画素の座標と、頂点座標(xα,yα,zα)にレンズ歪みを除去した後の画像44の画素の座標とが対応付けられて設定されている。レンズ歪みを除去する前の画像42と、レンズ歪みを除去した後の画像44とにおいて、座標(0,0)を原点とし、横方向をx軸とし、縦方向をy軸とする。
【0041】
具体的に、頂点Aには、テクスチャ座標(uα,vα)として、レンズ歪みを除去する前の画像42の座標(75,375)が設定されている。さらに、頂点Aには、頂点座標(xα,yα,zα)として、レンズ歪みを除去した後の画像44の座標(100,375,0)が設定されている。また、頂点Bには、テクスチャ座標(uα,vα)として、レンズ歪みを除去する前の画像42の座標(825,620)が設定されている。さらに、頂点Bには、頂点座標(xα,yα,zα)として、レンズ歪みを除去した後の画像44の座標(800,600,0)が設定されている。
【0042】
なお、レンズ歪み除去前の画素座標を基準にして、それに対応するレンズ歪み除去後の画素座標を与える方法と、レンズ歪み除去後の画素座標を基準にして、それに対応するレンズ歪み除去前の画素座標を与える方法の2通りがある。前者の場合、レンズ歪み除去前の画素座標が整数値であるが、それに対応するレンズ歪み除去後の画素座標は必ずしも整数値になるとは限らない。逆に後者の場合はレンズ歪み除去後の画素座標は整数値であるが、それに対応するレンズ歪み除去前の画素座標は必ずしも整数値になるとは限らない。後者の方が処理精度の点において若干優れているが、本発明は両者のうちどちらを用いるかには限定されない。
また、カメラ画像の一部分のみのレンズ歪みを除去するようにメッシュを作成しても良い。その場合、不要な部分に面を作成しないようにメッシュを作成する。または、一旦カメラ画像全体のメッシュを作成した後、メッシュを編集して不要な部分にある面を削除しても良い。
【0043】
また、メッシュ43の三角形の各頂点には、図7に示すように、頂点番号が設定される。
具体的に、図7に示すように三角形の各頂点には、頂点0〜3184の整数値である頂点番号が一意に設定されている。図7に示すように頂点番号が設定されている場合、三角形57の面情報はその3つの頂点番号から(0,65,66)となる。これにより、頂点番号0の頂点と頂点番号65の頂点と頂点番号66の頂点との接続関係が示される。同様に、三角形58の面情報は(0,66,1)となる。これらの面情報は、「0,65,66,0,66,1,……」のような順番でインデクスバッファに格納される。一般的に、3次元グラフィックスでは、頂点番号が格納される順番によって描画する面の表裏を判別し、裏面には描画を行わない。このため、頂点番号が格納される順番を「時計回り・反時計回り」のように決めておく必要がある。
【0044】
なお、三角形57と三角形58との頂点の数は全部で6つであるが、三角形57と三角形58との頂点のうち、頂点番号の0と66が設定されている頂点は同じである。このため、三角形57と三角形58を表すのに実質必要な頂点番号の数は、6つではなく4つである。このように、メッシュ43を作成する際にインデクスバッファを用いることにより、頂点情報は頂点1箇所につき1つだけ登録すればよい。
【0045】
このように、レンズ歪み除去プログラム30によるレンズ歪み除去処理では、レンズ歪みモデルとなるメッシュ43をGPU14に与えておく。そして、このメッシュ43にレンズ歪みのある画像をテクスチャとして貼り付けるだけである。要するに、従来技術のようにレンズ歪みのある画像をその画素単位で直接操作してレンズ歪みを除去した画像を生成するのではなく、そのメッシュ43を用いて描画処理を行うことで、レンズ歪みを除去した画像44を得るものである。
【0046】
(レンズ歪み除去プログラム30によるレンズ歪み除去処理の流れ)
続いて、図8を参照して、第1実施形態に係るレンズ歪み除去プログラム30によるレンズ歪み除去処理の全体の流れを説明する。図8はレンズ歪み除去処理の処理全体の流れを示すフローチャートである。
図8に示すように、まず頂点バッファ確保部31、頂点情報設定部32、インデクスバッファ確保部33および面情報設定部34は、GPU14にメッシュ43を作成する(ステップS101)。GPU14にメッシュ43を作成したら画像入出力部35は、カメラ18で撮像されたレンズ歪みのある画像を入力する(ステップS102)。
【0047】
そして、テクスチャ設定部36は、画像入出力部35が入力したレンズ歪みのある画像をテクスチャとして設定する(ステップS103)。続いて、描画機能実行部37は、レンズ歪みを除去された画像を得るためにGPU14に描画させる(ステップS104)。描画が終了すると、再び画像入出力部35はカメラ18から次のフレームのレンズ歪みのある画像を入力し、以降各部はステップS102〜ステップS104の各処理を繰り返す。
【0048】
なお、図8に示すレンズ歪み除去処理のうちステップS101の処理は初期設定処理である。このため、これらの各処理は、画像の補正処理を開始する前に一度だけ行っておけば良く、画像を入力する度に行う必要はない。
また、図8に示すレンズ歪み除去処理のうちステップS102〜S104の各処理は、レンズ歪み補正処理が必要なときに実行することができる処理である。レンズ歪み除去装置10が処理する画像は、静止画ではなくカメラ18から出力された動画である。このため、フレーム毎に画像が少しずつ変化する。このため、レンズ歪み除去装置10は、フレームが入力される度に入力した画像をテクスチャとして設定し、GPU14の描画処理を実行させてレンズ歪み除去の処理を行うことで、動画であってもレンズ歪みが除去された画像をリアルタイムに得ることができる。
【0049】
なお、本実施形態に係るレンズ歪み除去装置10では、UDPのプロトコルを用いて映像を送信するネットワークカメラを用いるため、UDPの画像を入力したときに発生する着信イベントのイベントハンドラに、ステップS102〜S104の各処理を定義しておく。これにより、カメラ18から画像が入力される度にステップS102〜S104の各処理を実行し、レンズ歪みを除去した画像が動画として表示される。
【0050】
(レンズ歪み除去プログラム30によるメッシュ43を作成する処理の流れ)
次に、図9を参照して、第1実施形態に係るレンズ歪み除去プログラム30によるステップS101のメッシュ43を作成する処理の流れを詳細に説明する。図9は、第1実施形態に係るレンズ歪み除去プログラム30によるメッシュ43を作成する処理の流れを示すフローチャートである。
図9に示すように、まず頂点情報設定部32は、レンズ歪み除去前の画素座標と、これに対応するレンズ歪み除去後の画素座標とを入力する(ステップS201)。頂点情報設定部32は、必要な画素数分だけステップS201の処理を繰り返す(ステップS202のNO)。頂点情報設定部32が必要な画素数分の座標の対応関係を入力し終えると(ステップS202のYES)、頂点バッファ確保部31は頂点座標(xα,yα,zα)およびテクスチャ座標(uα,vα)を格納できるように、頂点座標メンバとテクスチャ座標メンバとを有する構造体の配列を定義する(ステップS203)。頂点バッファ確保部31は、必要な画素数分の頂点情報を設定することができる頂点バッファをGPU14に確保する(ステップS204)。
【0051】
次に、頂点情報設定部32は、ステップS204で確保された頂点バッファに各頂点情報として頂点座標メンバには頂点座標(xα,yα,zα)としてレンズ歪み除去後の画素座標を設定する(ステップS205)。なお、2次元グラフィクスであるため、z座標には0を設定する。また、頂点情報設定部32は、テクスチャ座標メンバにはテクスチャ座標(uα,vα)として対応するレンズ歪み除去前の画素座標を設定する(ステップS206)。頂点バッファ確保部31および頂点情報設定部32は、全ての頂点バッファに頂点情報を設定し終えるまで(ステップS207のNO)、ステップS205,S206の各処理を繰り返す。そして、頂点バッファ確保部31および頂点情報設定部32は、全ての頂点バッファに頂点情報を設定する(ステップS207のYES)。
【0052】
次に、インデクスバッファ確保部33は、ステップS205,S206で設定された頂点情報の接続関係を表す頂点番号を設定するインデクスバッファをGPU14に確保する(ステップS208)。面情報設定部34は、ステップS208で確保されたインデクスバッファに頂点番号を設定する(ステップS209)。面情報設定部34は、全てのインデクスバッファに頂点番号を設定するまで、ステップS209の処理を繰り返す(ステップS210のNO)。面情報設定部34が全てのインデクスバッファに頂点番号を設定すると(ステップS210のYES)、ステップS101のメッシュ43を作成する処理が終了する。
【0053】
(第2実施形態)
(レンズ歪み除去プログラム80の機能構成)
次に、図10を参照して、第2実施形態に係るレンズ歪み除去プログラム80の機能構成を説明する。図10は、第2実施形態に係るレンズ歪み除去プログラム80の機能構成を示すブロック図である。
図10に示すレンズ歪み除去プログラム80は、図2に示した第1実施形態に係るレンズ歪み除去プログラム30と同一の機能構成を有して構成されるものである。但し、レンズ歪み除去プログラム80は、頂点バッファ確保部31、頂点情報設定部32、インデクスバッファ確保部33および面情報設定部34を有していない代わりに、メッシュオブジェクト入力部81を有している。また、レンズ歪み除去プログラム80は、レンズ歪み除去プログラム30と同様に、ハードディスクドライブ13にインストールされる。
【0054】
メッシュオブジェクト入力部81は、上述した頂点バッファのデータとインデクスバッファのデータとを格納することができるオブジェクトであるメッシュオブジェクトのデータを、例えばハードディスクドライブ13に保存されているファイルから読み出すための処理を行う。
なお、第2実施形態に係るレンズ歪み除去プログラム80においては、メッシュオブジェクト入力部81が、メッシュ作成手段として機能する。
【0055】
(レンズ歪み除去プログラム80によるメッシュ43を作成する処理の流れ)
次に、図11を参照して、第2実施形態に係るレンズ歪み除去プログラム80によるステップS101のメッシュ43を作成する処理の流れを説明する。図11は、第2実施形態に係るレンズ歪み除去プログラム80によるメッシュ43を作成する処理の流れを示すフローチャートである。
第2実施形態に係るレンズ歪み除去プログラム80によるレンズ歪み除去処理においても、レンズ歪み除去処理の処理全体の流れは、図8で示したレンズ歪み除去処理と同じである。但し、ステップS101で定義されるメッシュ43を作成する処理の流れが異なる。
【0056】
レンズ歪み除去プログラム30によるレンズ歪み除去処理においては、ステップS101で頂点バッファとインデクスバッファとを確保した。しかしながら、多くの3次元グラフィックスシステムのAPI(Application Program Interface)関数を使用して、頂点バッファとインデクスバッファを含むメッシュオブジェクトを作成することができる。このため、第2実施形態におけるレンズ歪み除去プログラム80によるレンズ歪み除去処理においては、メッシュオブジェクトを作成し、作成したメッシュオブジェクトをファイルに保存しておく。そして、メッシュオブジェクト入力部81は、GPU14に直接頂点バッファとインデクスバッファを確保する代わりに、ファイルからメッシュオブジェクトを読み出して取得し、GPU14にメッシュ43を作成する。
【0057】
図11に示すように、まずメッシュオブジェクト入力部81が、ハードディスクドライブ13に保存されているメッシュオブジェクトのファイルを開く(ステップS301)。次に、メッシュオブジェクト入力部81は、ファイルからメッシュオブジェクトを読み出し、そのメッシュオブジェクトをGPU14に与える(ステップS302)。最後に、メッシュオブジェクト入力部81は、開いているファイルを閉じると(ステップS303)、ステップS101で定義されるメッシュ43を作成する処理が終了する。
【0058】
上述したように、頂点バッファとインデクスバッファとを含むメッシュオブジェクトを作成したら、作成したメッシュオブジェクトをファイルに保存したり、保存したファイルからメッシュオブジェクトを読み出したりすることが可能である。予めメッシュオブジェクトがファイルに保存されている場合には、頂点バッファとインデクスバッファを確保する処理の代わりに、メッシュオブジェクトをファイルから読み出す処理に置き換えて実行する。これにより、初期設定処理を容易にして画像のレンズ歪みの除去を行うことができる。
【0059】
(変形例)
なお、第1実施形態におけるレンズ歪み除去処理で、頂点の面情報を表現するためにインデクスバッファを使用する例を示したが、これに限定されるものではない。例えば、設定ファイルに頂点の接続順に頂点番号を記述して保存しておくことで、インデクスバッファを使用せずに頂点の面情報を表現することも可能である。但し、この方法では、同一の頂点の頂点情報を複数回頂点バッファに登録する必要が生じる。このため、全体的に見ればインデクスバッファを使う方法に比べるとバッファ容量を多く必要とするが、インデクスバッファを使用しなくともリアルタイムでレンズ歪み除去を行うことができる。
【0060】
(まとめ)
本実施形態によれば、レンズ歪みのある画像の画素を直接操作してレンズ歪みを除去するのではなく、レンズ歪みを除去する前の画像の画素とレンズ歪みを除去した後の画像の画素との対応関係をもつ複数の頂点と、その複数の頂点同士の接続関係とから成るメッシュを例えばGPUに与えておく。そして、このメッシュにレンズ歪みのある画像をテクスチャとして貼り付けた画像を描画することで、レンズ歪みを除去した画像を得る。このため、レンズ歪みを除去する処理と他の幾何変換処理とを組み合わせた場合であっても、まずメッシュに対して他の幾何変換を適用してからテクスチャを貼り付けることにより、画素単位の補間処理は最後に1度しか発生しない。よって、スペックの低いパーソナルコンピュータ等でもリアルタイムで高精度に画像のレンズ歪みを除去することができる。
【産業上の利用可能性】
【0061】
特に、広範囲を鮮明な画像で撮像することが望まれる防犯・監視システム等で、撮像された動画のレンズ歪みを除去するのに最適なレンズ歪み除去装置、方法およびプログラムとして利用される。
【符号の説明】
【0062】
10 レンズ歪み除去装置
11 CPU
12 メモリ
13 ハードディスクドライブ
14 GPU
15 マウス
16 キーボード
17 ディスプレイ
18 カメラ
30,80 レンズ歪み除去プログラム
31 頂点バッファ確保部
32 頂点情報設定部
34 インデクスバッファ確保部
33 面情報設定部
35 画像入出力部
36 テクスチャ設定部
37 描画機能実行部
81 メッシュオブジェクト入力部

【特許請求の範囲】
【請求項1】
画像のレンズ歪みを除去するレンズ歪み除去装置であって、
前記レンズ歪みを除去する前の画像の画素が前記レンズ歪みを除去することによって移る画素である移動後画素から画面全部または一部のメッシュを作成するメッシュ作成手段と、
前記レンズ歪みを除去する前の画像をテクスチャとして前記メッシュに貼り付けることにより前記レンズ歪みを除去した画像を生成する歪み除去画像生成手段と、
を備えることを特徴とするレンズ歪み除去装置。
【請求項2】
前記メッシュ作成手段は、前記レンズ歪みを除去する前の画像と前記レンズ歪みを除去した後の画像とで対応する画素の各座標を示す頂点情報を設定する頂点情報設定手段と、
前記頂点情報設定手段によって設定された前記頂点情報同士の接続関係を示す面情報を設定する面情報設定手段と、
を備えることを特徴とする請求項1記載のレンズ歪み除去装置。
【請求項3】
前記メッシュ作成手段は、前記頂点情報が設定される頂点バッファを確保する頂点バッファ確保手段を備え、
前記頂点情報設定手段は、前記頂点バッファに前記頂点情報を設定することを特徴とする請求項1または2記載のレンズ歪み除去装置。
【請求項4】
前記メッシュ作成手段は、前記面情報が設定されるインデクスバッファを確保するインデクスバッファ確保手段を備え、
前記面情報設定手段は、前記インデクスバッファに前記面情報を設定することを特徴とする請求項1〜3のいずれか1項に記載のレンズ歪み除去装置。
【請求項5】
前記メッシュ作成手段は、レンズの種類に応じて予め作成され記憶してある前記メッシュを読み込んでくるデータ取得手段を備えることを特徴とする請求項1〜4のいずれか1項に記載のレンズ歪み除去装置。
【請求項6】
GPU(Graphics Prosessingu Unit)を備え、
前記歪み除去画像生成手段は、前記GPUのテクスチャマッピング処理を利用して前記レンズ歪みを除去した画像を生成するようになっていることを特徴とする請求項1〜5のいずれか1項に記載のレンズ歪み除去装置。
【請求項7】
画像のレンズ歪みを除去するレンズ歪み除去方法であって、
メッシュ作成手段が前記レンズ歪みを除去する前の画像の画素が前記レンズ歪みを除去することによって移る画素である移動後画素から画面全部または一部のメッシュを作成するメッシュ作成ステップ、
歪み除去画像生成手段が前記レンズ歪みを除去する前の画像をテクスチャとして前記メッシュに貼り付けることにより前記レンズ歪みを除去した画像を生成する歪み除去画像生成ステップを有することを特徴とするレンズ歪み除去方法。
【請求項8】
コンピュータで画像のレンズ歪みを除去するレンズ歪み除去プログラムであって、
コンピュータを前記レンズ歪みを除去する前の画像の画素が前記レンズ歪みを除去することによって移る画素である移動後画素から画面全部または一部のメッシュを作成するメッシュ作成手段、
前記レンズ歪みを除去する前の画像をテクスチャとして前記メッシュに貼り付けることにより前記レンズ歪みを除去した画像を生成する歪み除去画像生成手段として機能させるためのレンズ歪み除去プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2011−217057(P2011−217057A)
【公開日】平成23年10月27日(2011.10.27)
【国際特許分類】
【出願番号】特願2010−82271(P2010−82271)
【出願日】平成22年3月31日(2010.3.31)
【出願人】(000000033)旭化成株式会社 (901)
【Fターム(参考)】