(57)【要約】【課題】リアルタイムで高精度に画像の歪みを補正することのできるレンズ歪み除去装置、方法およびプログラムを提供する。【解決手段】ＧＰＵ１４に、レンズ歪みモデルに基づいて作成したメッシュ４３を作成しておく。メッシュ４３の各頂点には、テクスチャ座標として元のレンズ歪みのある画像の画素の座標と、これに対応する頂点座標としてレンズ歪みを除去した後の画像の画素の座標とが設定される。さらに、メッシュ４３には、メッシュ４３の各頂点を接続するための面情報が設定される。このメッシュ４３に、カメラ１８で撮像された画像５２をテクスチャとして貼り付け、ＧＰＵ１４の描画処理を実行させる。これにより、ＧＰＵ１４からレンズ歪み除去された画像５６をフレーム毎に得る。【選択図】図３
2011217057.tif 000002
【特許請求の範囲】
【請求項１】
画像のレンズ歪みを除去するレンズ歪み除去装置であって、
前記レンズ歪みを除去する前の画像の画素が前記レンズ歪みを除去することによって移る画素である移動後画素から画面全部または一部のメッシュを作成するメッシュ作成手段と、
前記レンズ歪みを除去する前の画像をテクスチャとして前記メッシュに貼り付けることにより前記レンズ歪みを除去した画像を生成する歪み除去画像生成手段と、
を備えることを特徴とするレンズ歪み除去装置。
【請求項２】
前記メッシュ作成手段は、前記レンズ歪みを除去する前の画像と前記レンズ歪みを除去した後の画像とで対応する画素の各座標を示す頂点情報を設定する頂点情報設定手段と、
前記頂点情報設定手段によって設定された前記頂点情報同士の接続関係を示す面情報を設定する面情報設定手段と、
を備えることを特徴とする請求項１記載のレンズ歪み除去装置。
【請求項３】
前記メッシュ作成手段は、前記頂点情報が設定される頂点バッファを確保する頂点バッファ確保手段を備え、
前記頂点情報設定手段は、前記頂点バッファに前記頂点情報を設定することを特徴とする請求項１または２記載のレンズ歪み除去装置。
【請求項４】
前記メッシュ作成手段は、前記面情報が設定されるインデクスバッファを確保するインデクスバッファ確保手段を備え、
前記面情報設定手段は、前記インデクスバッファに前記面情報を設定することを特徴とする請求項１〜３のいずれか１項に記載のレンズ歪み除去装置。
【請求項５】
前記メッシュ作成手段は、レンズの種類に応じて予め作成され記憶してある前記メッシュを読み込んでくるデータ取得手段を備えることを特徴とする請求項１〜４のいずれか１項に記載のレンズ歪み除去装置。
【請求項６】
ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｓｅｓｓｉｎｇｕ  Ｕｎｉｔ）を備え、
前記歪み除去画像生成手段は、前記ＧＰＵのテクスチャマッピング処理を利用して前記レンズ歪みを除去した画像を生成するようになっていることを特徴とする請求項１〜５のいずれか１項に記載のレンズ歪み除去装置。
【請求項７】
画像のレンズ歪みを除去するレンズ歪み除去方法であって、
メッシュ作成手段が前記レンズ歪みを除去する前の画像の画素が前記レンズ歪みを除去することによって移る画素である移動後画素から画面全部または一部のメッシュを作成するメッシュ作成ステップ、
歪み除去画像生成手段が前記レンズ歪みを除去する前の画像をテクスチャとして前記メッシュに貼り付けることにより前記レンズ歪みを除去した画像を生成する歪み除去画像生成ステップを有することを特徴とするレンズ歪み除去方法。
【請求項８】
コンピュータで画像のレンズ歪みを除去するレンズ歪み除去プログラムであって、
コンピュータを前記レンズ歪みを除去する前の画像の画素が前記レンズ歪みを除去することによって移る画素である移動後画素から画面全部または一部のメッシュを作成するメッシュ作成手段、
前記レンズ歪みを除去する前の画像をテクスチャとして前記メッシュに貼り付けることにより前記レンズ歪みを除去した画像を生成する歪み除去画像生成手段として機能させるためのレンズ歪み除去プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、レンズ歪み除去装置、方法およびプログラムに関し、特に画像の歪みを補正することのできるレンズ歪み除去装置、方法およびプログラムに関する。
【背景技術】
【０００２】
カメラ等で撮像した画像には、球面レンズの球面収差による画像のレンズ歪みが発生する。まず、図１２を参照して、従来技術による画像のレンズ歪みを除去する流れを説明する。図１２は、従来技術による画像のレンズ歪みを除去する過程の画像のイメージである。図１２（ａ）はカメラ等で撮像される撮像対象物のイメージであり、図１２（ｂ）は撮像対象物をカメラ等で撮像した画像のイメージであり、図１２（ｃ）はレンズ歪みを除去した後の画像のイメージである。
【０００３】
例えば、図１２（ａ）に示すような撮像対象物である正方格子模様を撮像すると、図１２（ｂ）に示すように球面レンズの球面収差によって撮像された画像にレンズ歪みが発生する。このようなレンズ歪みは、特に広角レンズ等で著しくなる。画像を用いて計測を行う場合等には、このレンズ歪みが原因となり計測値の誤差を招く。このため、図１２（ｃ）に示すように歪んだ画像がピンホールカメラモデルに従うよう補正することがよく行われる。レンズ歪みの補正方法には、パラメトリックな方法とノンパラメトリックな方法がある。例えば、非特許文献１の画像のレンズ歪み補正方法においては、パラメトリックな方法によってレンズ歪みを補正している。
【０００４】
まず、補正前の画像と補正後の画像とで、全ピクセル（画素）分の座標の対応関係を示すルックアップテーブルを用いて変換を行う。まず歪み補正後の画像の画素座標が横軸、縦軸ともに整数である画素に、補正前の画素座標を与えるためのルックアップテーブルを予め作成しておく。そして、変換処理を実行するときに、そのルックアップテーブルから補正前の画素座標を求める。補正前の画素座標は必ず整数にはならないので、例えばバイリニア補間等の補間方法を用いてレンズ歪み補正後の画素の値を得る。
【０００５】
一方、最近ではＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と呼ばれる３次元グラフィックスを処理する専用のハードウエアを備えたデバイスが、ＣＡＤ（Ｃｏｍｐｕｔｅｒ  Ａｉｄｅｄ  Ｄｅｓｉｇｎ）のシステムだけでなく、パーソナルコンピュータや家庭用ゲーム機等にも標準で搭載されており、身近に利用されるようになっている。
【０００６】
このＧＰＵは、演算処理を並列に実行しているため、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に比べて演算速度が格段に速いという特徴をもつ。また、ＧＰＵにはピクセルシェーダ、頂点シェーダといった機能を始め、最近ではジオメトリシェーダといった演算ハードウエアが備わっているものがある。さらに、最近のＧＰＵでは、ピクセルシェーダやジオメトリシェーダ、頂点シェーダといった機能でも、ユーザがプログラムすることができるようになっており、ＧＰＵが家庭用ゲーム機等の３次元ＣＧ（Ｃｏｍｐｕｔｅｒ  Ｇｒａｐｈｉｃｓ）の表現力の向上に寄与している。
【０００７】
特に、画素単位で画像処理を行うピクセルシェーダでプログラムすることができる機能は画像処理に適していることから、多くの画像処理アルゴリズムがＧＰＵのピクセルシェーダを用いて実装されてきている。これにより、ＣＰＵで画像処理を行っていた場合に比べて処理速度を約数十倍以上高速化することができるものがあり、画像処理にかかるＣＰＵの負荷を減らすことができる。例えば、特許文献１の画像のレンズ歪み補正方法においては、このピクセルシェーダを用いて画像のレンズ歪みを除去している。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００９−１６５１０６号公報
【非特許文献】
【０００９】
【非特許文献１】Ｒ.  Ｈａｒｔｌｅｙ  ａｎｄ  Ａ.  Ｚｉｓｓｅｒｍａｎ著、”Ｍｕｌｔｉｐｌｅ  Ｖｉｅｗ  Ｇｅｏｍｅｔｒｙ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｖｉｓｉｏｎ  Ｓｅｃｏｎｄ  Ｅｄｉｔｉｏｎ”、Ｃａｍｂｒｉｄｇｅ  Ｕｎｉｖｅｒｓｉｔｙ  Ｐｒｅｓｓ、２００３年
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、非特許文献１の画像のレンズ歪み補正方法でレンズ歪みを除去する場合、ルックアップテーブルを用いた変換処理と補間処理とを行う必要があり計算量が膨大となる。このため、スペックの低いパーソナルコンピュータ等では処理に多くの時間を要することからリアルタイムでの処理が難しかった。
また、特許文献１の画像の歪み補正方法でレンズ歪みを除去する場合、ＧＰＵのピクセルシェーダで実行する場合はリアルタイムでの処理が可能である。但し、レンズ歪みを除去するためのレンズ歪み除去処理と例えば回転などの他の幾何変換処理とを組み合わせて行う場合には、一旦処理結果を画像として保存しておくか、ピクセルシェーダの中に他の幾何変換処理を一緒にプログラムしておく必要がある。このため、レンズ歪み除去処理と他の幾何変換処理とでそれぞれ補間処理をしなければならず、補正された画像の画質が劣化するという問題があった。
そこで、本発明は、上記の課題に鑑み、リアルタイムで高精度に画像の歪みを補正することのできるレンズ歪み除去装置、方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明に係るレンズ歪み除去装置、方法およびプログラムは、上記の目的を達成するために、次のように構成される。
本発明に係る第１のレンズ歪み除去装置は、画像のレンズ歪みを除去するレンズ歪み除去装置であって、前記レンズ歪みを除去する前の画像の画素が前記レンズ歪みを除去することによって移る画素である移動後画素から画面全部または一部のメッシュを作成するメッシュ作成手段と、前記レンズ歪みを除去する前の画像をテクスチャとして前記メッシュに貼り付けることにより前記レンズ歪みを除去した画像を生成する歪み除去画像生成手段と、を備えることを特徴とする。
【００１２】
上記のレンズ歪み除去装置によれば、メッシュ作成手段がメッシュを作成し、歪み除去画像生成手段がこのメッシュにカメラ等で撮像した画像をテクスチャとして貼り付けることによりレンズ歪みを除去した画像を得る。つまり、レンズ歪みのある画像の画素単位を直接操作してレンズ歪みを除去するのではなく、レンズ歪みを除去するように作成されたメッシュに、レンズ歪みのある画像が貼り付けられた画像を描画することでレンズ歪みが除去された画像を得る。このため、画素単位での座標変換を直接行うことがなく、リアルタイムで高精度にレンズ歪みを除去した画像を得ることが可能となる。また、レンズ歪み除去処理と例えば回転などの他の幾何変換処理とを組み合わせて行う場合であっても、まずメッシュに対して他の幾何変換を適用してからテクスチャを貼り付けることにより、画素の補間処理は最後に一度しか発生しないので、画質を劣化させずに画像をリアルタイムに補正することが可能となる。
【００１３】
本発明に係る第２のレンズ歪み除去装置は、前記メッシュ作成手段は、前記レンズ歪みを除去する前の画像と前記レンズ歪みを除去した後の画像とで対応する画素の各座標を示す頂点情報を設定する頂点情報設定手段と、前記頂点情報設定手段によって設定された前記頂点情報同士の接続関係を示す面情報を設定する面情報設定手段と、を備えることを特徴とする。
上記のレンズ歪み除去装置によれば、レンズ歪みを除去する前の画像の画素とレンズ歪みを除去した後の画像の画素との対応関係をもつ複数の頂点と、その複数の頂点同士の接続関係とから成る、レンズ歪み除去するために用いるメッシュを作成することが可能となる。
【００１４】
本発明に係る第３のレンズ歪み除去装置は、前記メッシュ作成手段は、前記頂点情報が設定される頂点バッファを確保する頂点バッファ確保手段を備え、前記頂点情報設定手段は、前記頂点バッファに前記頂点情報を設定することを特徴とする。
上記のレンズ歪み除去装置によれば、頂点情報が設定される頂点バッファを確保し、頂点バッファにレンズ歪みを除去する前の画像の画素とレンズ歪みを除去した後の画像の画素との対応関係を示す頂点情報を設定し、レンズ歪みを除去するために用いるメッシュを作成する。レンズ歪みのある画像の画素単位で直接操作してレンズ歪みを除去するのではなく、そのメッシュにレンズ歪みのある画像をテクスチャとして貼り付け、レンズ歪みを除去する。このため、画素単位での座標変換や補間処理を直接行うことがなく、リアルタイムで高精度にレンズ歪みを除去した画像を得ることが可能となる。
【００１５】
本発明に係る第４のレンズ歪み除去装置は、前記メッシュ作成手段は、前記面情報が設定されるインデクスバッファを確保するインデクスバッファ確保手段を備え、前記面情報設定手段は、前記インデクスバッファに前記面情報を設定することを特徴とする。
上記のレンズ歪み除去装置によれば、インデクスバッファを使用しない場合には、同一の頂点の頂点情報を複数回頂点バッファに登録する必要があるが、インデクスバッファを用いて頂点の面情報を表現すれば、同一の頂点の頂点情報は１つだけ登録すれば良い。例えば、メッシュを構成する複数の三角形のうち、隣り合う２つの三角形の頂点の数は全部で６つである。但し、三角形の３つの頂点のうち、２つの頂点は同じであるので、インデクスバッファを用いて４つの頂点のみの頂点情報を登録すれば良い。
【００１６】
本発明に係る第５のレンズ歪み除去装置は、前記メッシュ作成手段は、レンズの種類に応じて予め作成され記憶してある前記メッシュを読み込んでくるデータ取得手段を備えることを特徴とする。
上記のレンズ歪み除去装置によれば、多くの３次元グラフィックスのＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）関数で少なくとも頂点バッファを含むメッシュオブジェクトを作成しておくことができるため、後からメッシュオブジェクトを読み出すことが可能となる。まずメッシュオブジェクトを作成し、ファイル等に保存しておく。そして、メッシュオブジェクトをファイルから読み出す処理に置き換えて実行することで、初期設定処理を容易にしてレンズ歪みの除去を行うことが可能となる。
【００１７】
本発明に係る第６のレンズ歪み除去装置は、ＧＰＵを備え、前記歪み除去画像生成手段は、前記ＧＰＵのテクスチャマッピング処理を利用して前記レンズ歪みを除去した画像を生成するようになっていることを特徴とする。
上記のレンズ歪み除去装置によれば、レンズ歪み除去するために用いるメッシュを画像処理専用のハードウエアであるＧＰＵに与えておき、ＧＰＵのテクスチャマッピング処理を利用してリアルタイムで高精度に画像の歪みを補正することが可能となる。
【００１８】
本発明に係るレンズ歪み除去方法は、画像のレンズ歪みを除去するレンズ歪み除去方法であって、メッシュ作成手段が前記レンズ歪みを除去する前の画像の画素が前記レンズ歪みを除去することによって移る画素である移動後画素から画面全部または一部のメッシュを作成するメッシュ作成ステップ、歪み除去画像生成手段が前記レンズ歪みを除去する前の画像をテクスチャとして前記メッシュに貼り付けることにより前記レンズ歪みを除去した画像を生成する歪み除去画像生成ステップを有することを特徴とする。
【００１９】
上記のレンズ歪み除去方法によれば、このレンズ歪み除去方法で動作する第１のレンズ歪み除去装置と同じ作用を得ることが可能となる。
本発明に係るレンズ歪み除去プログラムは、コンピュータで画像のレンズ歪みを除去するレンズ歪み除去プログラムであって、コンピュータを前記レンズ歪みを除去する前の画像の画素が前記レンズ歪みを除去することによって移る画素である移動後画素から画面全部または一部のメッシュを作成するメッシュ作成手段、前記レンズ歪みを除去する前の画像をテクスチャとして前記メッシュに貼り付けることにより前記レンズ歪みを除去した画像を生成する歪み除去画像生成手段として機能させるためのプログラムである。
上記のレンズ歪み除去プログラムによれば、コンピュータのハードディスク等にレンズ歪み除去プログラムをインストールしておき、コンピュータにレンズ歪み除去プログラムに従って処理を実行させることによって、第１のレンズ歪み除去装置と同じ作用を得ることが可能となる。
【発明の効果】
【００２０】
本発明によれば、レンズ歪みのある画像の画素を直接操作してレンズ歪みを除去するのではなく、例えばＧＰＵにレンズ歪みを除去することができるようなメッシュを作成しておき、このメッシュにレンズ歪みのある画像をテクスチャとして貼り付けることによって、レンズ歪みが除去された画像を得る。このため、画素単位の変換処理や補間処理を直接行う必要がない。これにより、スペックの低いパーソナルコンピュータ等でもリアルタイムで高精度に画像の歪みを除去することができる。
【００２１】
また、画像のレンズ歪みを除去する処理と、例えば画像を回転する等の他の幾何変換処理とを組み合わせて行う場合であっても、まずメッシュに対して他の幾何変換を適用してからテクスチャを貼り付けることにより、補間処理は最後に１度しか発生しない。これにより、画質の劣化を抑えることができる。さらに、リアルタイムで高精度に画像の歪みを除去することができる。
【００２２】
また、歪みが目立たない画素部分では、メッシュの頂点数を減らすことにより、ＧＰＵの処理負荷や処理時間を軽減することができる。
また、頂点バッファやインデクスバッファを含むメッシュオブジェクトをファイルに保存しておき、初期設定でファイルからメッシュを読み出すことにより、初期設定でレンズ歪みを除去する前の画像の画素とレンズ歪みを除去した後の画像の画素との対応関係をもつ複数の頂点と、その複数の頂点同士の接続関係とを設定するためにかかる手間を省くことができる。
【図面の簡単な説明】
【００２３】
【図１】本実施形態に係るレンズ歪み除去装置１０の装置構成を示すブロック図である。
【図２】第１実施形態に係るレンズ歪み除去プログラム３０の機能構成を示すブロック図である。
【図３】レンズ歪み除去装置１０によるレンズ歪み除去処理の流れを示す模式図である。
【図４】メッシュ４３を用いてレンズ歪みが生じている画像４２からレンズ歪みが除去された画像４４が生成される流れを示す模式図である。
【図５】メッシュ４３を示すイメージである。
【図６】メッシュ４３とメッシュ４３に設定される頂点情報とを示した模式図である。
【図７】メッシュ４３とメッシュ４３に設定される面情報を示した模式図である。
【図８】レンズ歪み除去処理の処理全体の流れを示すフローチャートである。
【図９】第１実施形態に係るレンズ歪み除去プログラム３０によるメッシュ４３を作成する処理の流れを示すフローチャートである。
【図１０】第２実施形態に係るレンズ歪み除去プログラム８０の機能構成を示すブロック図である。
【図１１】第２実施形態に係るレンズ歪み除去プログラム８０によるメッシュ４３を作成する処理の流れを示すフローチャートである。
【図１２】従来技術による画像のレンズ歪みを除去する過程の画像のイメージである。
【発明を実施するための形態】
【００２４】
以下に、本発明の好適な実施形態を添付図面に基づいて説明する。なお、以下の説明において参照する各図では、他の図と同等の構成要素は同一の符号によって示す。
（レンズ歪み除去装置１０の装置構成）
まず、図１を参照して、本実施形態に係るレンズ歪み除去装置１０の装置構成を説明する。図１は、本実施形態に係るレンズ歪み除去装置１０の装置構成を示すブロック図である。
【００２５】
図１に示すレンズ歪み除去装置１０は、ＣＰＵ１１、メモリ（ＲＯＭ；Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ、ＲＡＭ；Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２、ハードディスクドライブ１３、ＧＰＵ１４、マウス１５、キーボード１６、ディスプレイ１７およびカメラ１８を備えて構成される。
ＣＰＵ１１は、ハードディスクドライブ１３に保存されている各種のプログラムを実行することによって、プログラムに従って各計算処理やデータ処理を行い、各部を統括して制御するものである。
【００２６】
メモリ１２は、ＣＰＵ１１やＧＰＵ１４が直接読み書きすることができ、例えば画像データやユーザからの指示データを一時的に記憶するものである。
ハードディスクドライブ１３は、例えばレンズ歪み除去装置１０でレンズ歪み除去するためのレンズ歪み除去プログラム３０がインスールされたり、レンズ歪み除去プログラム３０で生成された画像やレンズ歪み除去プログラム３０を実行する上で必要な各種の設定ファイルを保存したりするものである。
【００２７】
ＧＰＵ１４は、ＣＰＵ１１に代わり、画像データの処理を行う専用の装置である。ＧＰＵ１４に限定されないが、ＧＰＵ１４を用いることによりＣＰＵ１１のみで画像データを処理するよりも、より高速に処理を行うことができる。
マウス１５およびキーボード１６は、ユーザがレンズ歪み除去処理の設定画面を操作したり、カメラ１８の撮像方向や撮像範囲を設定したりするために用いるものである。
ディスプレイ１７は、レンズ歪みが除去された画像を表示したり、レンズ歪み除去の設定画面を表示したりするものである。
【００２８】
カメラ１８は、レンズ歪み除去装置１０で処理するための画像を撮像するためのものである。本実施形態に係るレンズ歪み除去装置１０において、カメラ１８は動画を撮像するものであるが、静止画を撮像するものであっても良い。また、カメラ１８の種類は、例えばＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）のプロトコルを用いて画像を送信するネットワークカメラとして説明する。
本実施形態に係るレンズ歪み除去装置１０は、ハードディスクドライブ１３にインストールされたレンズ歪み除去プログラム３０をオペレーティングシステム上で実行する。このレンズ歪み除去プログラム３０には、オフィスや駐車場、店舗等の監視場所に設置されたカメラ１８で撮像された画像が入力される。
【００２９】
（第１実施形態）
（レンズ歪み除去プログラム３０の機能構成）
次に、図２を参照して、第１実施形態に係るレンズ歪み除去プログラム３０の機能構成を説明する。図２は、第１実施形態に係るレンズ歪み除去プログラム３０の機能構成を示すブロック図である。
図２に示すレンズ歪み除去プログラム３０は、頂点バッファ確保部３１、頂点情報設定部３２、インデクスバッファ確保部３３、面情報（インデクス情報）設定部３４、画像入出力部３５、テクスチャ設定部３６および描画機能実行部３７を備えて構成される。
【００３０】
頂点バッファ確保部３１は、ＧＰＵ１４にレンズ歪みを除去する画像部分の画素数分の頂点情報を設定するための頂点バッファを確保するための処理を行う。この頂点情報は、少なくとも、頂点座標（ｘα，ｙα，ｚα）としてレンズ歪みを除去した後の画像の座標と、テクスチャ座標（ｕα，ｖα）として歪みを除去する前の座標とから成る。これらの合計５つの座標値は、浮動小数点数で表される。このため、頂点バッファ確保部３１は、例えば頂点座標メンバとテクスチャ座標メンバとを有する構造体の配列をメモリ１２に定義する。
【００３１】
頂点情報設定部３２は、頂点バッファ確保部３１によって確保された頂点バッファに頂点情報を設定するための処理を行う。
インデクスバッファ確保部３３は、ＧＰＵ１４に頂点情報の接続関係を示す面情報を設定するためのインデクスバッファを確保する処理を行う。
面情報設定部３４は、インデクスバッファ確保部３３によって確保されたインデクスバッファに頂点番号（ｉ，ｊ，ｋ）を面情報として設定するための処理を行う。この面情報は、インデクス（頂点番号）の集まりから成る。
【００３２】
画像入出力部３５は、カメラ１８で撮像された画像を入力し、画像をＧＰＵ１４に渡すためにテクスチャ設定部３６に出力する。カメラ１８で撮像された画像が圧縮されている場合、画像入出力部３５は、デコードを行い、ビットマップ形式の画像に変換し、そのビットマップ形式の画像をテクスチャ設定部３６に出力する。また、画像入出力部３５は、ＧＰＵ１４でレンズ歪みを除去した後の画像を受け取り、例えば画像ファイルとしてハードディスクドライブ１３等に出力するための処理を行う。
【００３３】
テクスチャ設定部３６は、ＧＰＵ１４に設定された頂点情報と面情報とから成る後述するメッシュに、画像入出力部３５から入力したレンズ歪みの生じている画像をテクスチャとして貼り付けるための設定処理を行う。
描画機能実行部３７は、レンズ歪みを補正した画像を得るために、メッシュにレンズ歪みの生じている画像が貼り付けられている画像を、ＧＰＵ１４に描画させるための描画処理を実行させる。なお、ＧＰＵ１４で生成されたレンズ歪みを除去した後の画像は、ディスプレイ１７に出力するのみならず、例えばハードディスクドライブ１３等にファイルとして保存することもできる。また、必要に応じて画像を加工することもできる。
【００３４】
なお、本実施形態に係るレンズ歪み除去プログラム３０においては、頂点バッファ確保部３１、頂点情報設定部３２、インデクスバッファ確保部３３および面情報設定部３４から成る処理部が、メッシュ作成手段（ステップＳ１０１）として機能する。また、画像入出力部３５、テクスチャ設定部３６および描画機能実行部３７から成る処理部が、歪み除去画像生成手段（ステップＳ１０２〜Ｓ１０４）として機能する。そして、レンズ歪み除去プログラム３０により、レンズ歪み除去装置１０でレンズ歪みを除去した画像を生成するためのレンズ歪み除去処理が実行される。
【００３５】
（レンズ歪み除去処理の流れ）
次に、図３および図４を参照して、レンズ歪み除去プログラム３０によるレンズ歪み除去処理の流れを説明する。図３は、レンズ歪み除去装置１０によるレンズ歪み除去処理の流れを示す模式図である。図４は、メッシュ４３を用いてレンズ歪みが生じている画像４２からレンズ歪みが除去された画像４４が生成される流れを示す模式図である。
図３に示すように、まずカメラ１８で３つの図形が描かれている撮像対象物４１を撮像すると、画像４２が得られる。この撮像された画像４２は、本来であれば撮像対象物４１と同じ図形の画像になるはずである。しかしながら、撮像された画像４２にはレンズ歪みが生じている。このため、撮像された画像４２は、図形が歪んだ画像になる。
このレンズ歪みが生じている画像４２はレンズ歪み除去プログラム３０に入力される。そして、レンズ歪み除去プログラム３０は補正処理に用いられるメッシュ４３をＧＰＵ１４に作成する。
【００３６】
次に、レンズ歪み除去プログラム３０は、ＧＰＵ１４に作成されたメッシュ４３にレンズ歪みが生じている画像４２をテクスチャとして貼り付ける。さらに、レンズ歪み除去プログラム３０は、ＧＰＵ１４の描画処理を起動する。要するに、レンズ歪み除去プログラム３０は、メッシュ４３にレンズ歪みが生じている画像４２が貼り付けられている画像をＧＰＵ１４に描画させることで、レンズ歪みが除去された画像を得る。ＧＰＵ１４で描画処理が終了すると、ＧＰＵ１４からレンズ歪みを除去した後の画像４４がディスプレイ１７に出力される。
【００３７】
図４に示すように、レンズ歪み除去プログラム３０は、メッシュ４３にレンズ歪みが生じている画像４２をテクスチャとして貼り付け、ＧＰＵ１４に描画処理を実行させる。すると、メッシュ４３上にレンズ歪みを除去した画像４４が得られる。
上述したように、レンズ歪み除去プログラム３０は、メッシュ４３にレンズ歪みが生じている画像４２が貼り付けられている画像をＧＰＵ１４に描画させることで、レンズ歪みが除去された画像を生成する。この処理は、例えばコンピュータグラフィクス上で、立体的な無地な商品の箱の表面に、商品パッケージの絵柄写真をテクスチャとして貼り付け、絵柄写真が貼り付けられた商品の箱の画像を生成するのと同じである。このような方法を応用して、レンズ歪み除去プログラム３０は、レンズ歪みが除去された画像４４を生成している。つまり、メッシュ４３は、レンズ歪みが生じている画像４２が貼り付けられさえすれば、レンズ歪みが除去された画像４４が得られるようにできている。
【００３８】
（メッシュ４３の作成方法）
次に、図５〜図７を参照して、メッシュ４３を作成する流れを説明する。図５は、メッシュ４３を示すイメージである。図６は、メッシュ４３とメッシュ４３に設定される頂点情報とを示した模式図である。図７は、メッシュ４３とメッシュ４３に設定される面情報を示した模式図である。
図５に示すメッシュ４３は、一例として正方格子模様を複数の三角形の集まりで表したものである。このメッシュ４３は、レンズ歪みが生じている模様の曲線部分が、レンズ歪みによる歪み方向とは逆方向に歪んだ形であると考えることができる。
【００３９】
メッシュ４３を形成する三角形の数や形は、任意であって良い。レンズ歪みが生じている画像４２の大きさ、レンズ歪みを除去する向きや量等が異なるため、メッシュ４３自体の形や、メッシュ４３を構成する三角形の数や形はそれぞれ異なる。例えば、レンズ歪みによる変形が比較的少ない部分では、レンズ歪みによる変形が多い部分よりも三角形の大きさを大きくし、数を少なくすることで、ＧＰＵ１４の処理負荷を軽減することもできる。
また、カメラ１８の取り付け位置によっては、レンズ歪みが生じている画像４２の視点方向を変換しなければならない場合がある。このような場合、レンズ歪み除去処理と一緒に視点方向を変えることができるように、メッシュを作成すると良い。
【００４０】
図６に示すように、メッシュ４３を形成する三角形の各頂点には、テクスチャ座標（ｕα，ｖα）にレンズ歪みを除去する前の画像４２の画素の座標と、頂点座標（ｘα，ｙα，ｚα）にレンズ歪みを除去した後の画像４４の画素の座標とが対応付けられて設定されている。レンズ歪みを除去する前の画像４２と、レンズ歪みを除去した後の画像４４とにおいて、座標（０，０）を原点とし、横方向をｘ軸とし、縦方向をｙ軸とする。
【００４１】
具体的に、頂点Ａには、テクスチャ座標（ｕα，ｖα）として、レンズ歪みを除去する前の画像４２の座標（７５，３７５）が設定されている。さらに、頂点Ａには、頂点座標（ｘα，ｙα，ｚα）として、レンズ歪みを除去した後の画像４４の座標（１００，３７５，０）が設定されている。また、頂点Ｂには、テクスチャ座標（ｕα，ｖα）として、レンズ歪みを除去する前の画像４２の座標（８２５，６２０）が設定されている。さらに、頂点Ｂには、頂点座標（ｘα，ｙα，ｚα）として、レンズ歪みを除去した後の画像４４の座標（８００，６００，０）が設定されている。
【００４２】
なお、レンズ歪み除去前の画素座標を基準にして、それに対応するレンズ歪み除去後の画素座標を与える方法と、レンズ歪み除去後の画素座標を基準にして、それに対応するレンズ歪み除去前の画素座標を与える方法の２通りがある。前者の場合、レンズ歪み除去前の画素座標が整数値であるが、それに対応するレンズ歪み除去後の画素座標は必ずしも整数値になるとは限らない。逆に後者の場合はレンズ歪み除去後の画素座標は整数値であるが、それに対応するレンズ歪み除去前の画素座標は必ずしも整数値になるとは限らない。後者の方が処理精度の点において若干優れているが、本発明は両者のうちどちらを用いるかには限定されない。
また、カメラ画像の一部分のみのレンズ歪みを除去するようにメッシュを作成しても良い。その場合、不要な部分に面を作成しないようにメッシュを作成する。または、一旦カメラ画像全体のメッシュを作成した後、メッシュを編集して不要な部分にある面を削除しても良い。
【００４３】
また、メッシュ４３の三角形の各頂点には、図７に示すように、頂点番号が設定される。
具体的に、図７に示すように三角形の各頂点には、頂点０〜３１８４の整数値である頂点番号が一意に設定されている。図７に示すように頂点番号が設定されている場合、三角形５７の面情報はその３つの頂点番号から（０，６５，６６）となる。これにより、頂点番号０の頂点と頂点番号６５の頂点と頂点番号６６の頂点との接続関係が示される。同様に、三角形５８の面情報は（０，６６，１）となる。これらの面情報は、「０，６５，６６，０，６６，１，……」のような順番でインデクスバッファに格納される。一般的に、３次元グラフィックスでは、頂点番号が格納される順番によって描画する面の表裏を判別し、裏面には描画を行わない。このため、頂点番号が格納される順番を「時計回り・反時計回り」のように決めておく必要がある。
【００４４】
なお、三角形５７と三角形５８との頂点の数は全部で６つであるが、三角形５７と三角形５８との頂点のうち、頂点番号の０と６６が設定されている頂点は同じである。このため、三角形５７と三角形５８を表すのに実質必要な頂点番号の数は、６つではなく４つである。このように、メッシュ４３を作成する際にインデクスバッファを用いることにより、頂点情報は頂点１箇所につき１つだけ登録すればよい。
【００４５】
このように、レンズ歪み除去プログラム３０によるレンズ歪み除去処理では、レンズ歪みモデルとなるメッシュ４３をＧＰＵ１４に与えておく。そして、このメッシュ４３にレンズ歪みのある画像をテクスチャとして貼り付けるだけである。要するに、従来技術のようにレンズ歪みのある画像をその画素単位で直接操作してレンズ歪みを除去した画像を生成するのではなく、そのメッシュ４３を用いて描画処理を行うことで、レンズ歪みを除去した画像４４を得るものである。
【００４６】
（レンズ歪み除去プログラム３０によるレンズ歪み除去処理の流れ）
続いて、図８を参照して、第１実施形態に係るレンズ歪み除去プログラム３０によるレンズ歪み除去処理の全体の流れを説明する。図８はレンズ歪み除去処理の処理全体の流れを示すフローチャートである。
図８に示すように、まず頂点バッファ確保部３１、頂点情報設定部３２、インデクスバッファ確保部３３および面情報設定部３４は、ＧＰＵ１４にメッシュ４３を作成する（ステップＳ１０１）。ＧＰＵ１４にメッシュ４３を作成したら画像入出力部３５は、カメラ１８で撮像されたレンズ歪みのある画像を入力する（ステップＳ１０２）。
【００４７】
そして、テクスチャ設定部３６は、画像入出力部３５が入力したレンズ歪みのある画像をテクスチャとして設定する（ステップＳ１０３）。続いて、描画機能実行部３７は、レンズ歪みを除去された画像を得るためにＧＰＵ１４に描画させる（ステップＳ１０４）。描画が終了すると、再び画像入出力部３５はカメラ１８から次のフレームのレンズ歪みのある画像を入力し、以降各部はステップＳ１０２〜ステップＳ１０４の各処理を繰り返す。
【００４８】
なお、図８に示すレンズ歪み除去処理のうちステップＳ１０１の処理は初期設定処理である。このため、これらの各処理は、画像の補正処理を開始する前に一度だけ行っておけば良く、画像を入力する度に行う必要はない。
また、図８に示すレンズ歪み除去処理のうちステップＳ１０２〜Ｓ１０４の各処理は、レンズ歪み補正処理が必要なときに実行することができる処理である。レンズ歪み除去装置１０が処理する画像は、静止画ではなくカメラ１８から出力された動画である。このため、フレーム毎に画像が少しずつ変化する。このため、レンズ歪み除去装置１０は、フレームが入力される度に入力した画像をテクスチャとして設定し、ＧＰＵ１４の描画処理を実行させてレンズ歪み除去の処理を行うことで、動画であってもレンズ歪みが除去された画像をリアルタイムに得ることができる。
【００４９】
なお、本実施形態に係るレンズ歪み除去装置１０では、ＵＤＰのプロトコルを用いて映像を送信するネットワークカメラを用いるため、ＵＤＰの画像を入力したときに発生する着信イベントのイベントハンドラに、ステップＳ１０２〜Ｓ１０４の各処理を定義しておく。これにより、カメラ１８から画像が入力される度にステップＳ１０２〜Ｓ１０４の各処理を実行し、レンズ歪みを除去した画像が動画として表示される。
【００５０】
（レンズ歪み除去プログラム３０によるメッシュ４３を作成する処理の流れ）
次に、図９を参照して、第１実施形態に係るレンズ歪み除去プログラム３０によるステップＳ１０１のメッシュ４３を作成する処理の流れを詳細に説明する。図９は、第１実施形態に係るレンズ歪み除去プログラム３０によるメッシュ４３を作成する処理の流れを示すフローチャートである。
図９に示すように、まず頂点情報設定部３２は、レンズ歪み除去前の画素座標と、これに対応するレンズ歪み除去後の画素座標とを入力する（ステップＳ２０１）。頂点情報設定部３２は、必要な画素数分だけステップＳ２０１の処理を繰り返す（ステップＳ２０２のＮＯ）。頂点情報設定部３２が必要な画素数分の座標の対応関係を入力し終えると（ステップＳ２０２のＹＥＳ）、頂点バッファ確保部３１は頂点座標（ｘα，ｙα，ｚα）およびテクスチャ座標（ｕα，ｖα）を格納できるように、頂点座標メンバとテクスチャ座標メンバとを有する構造体の配列を定義する（ステップＳ２０３）。頂点バッファ確保部３１は、必要な画素数分の頂点情報を設定することができる頂点バッファをＧＰＵ１４に確保する（ステップＳ２０４）。
【００５１】
次に、頂点情報設定部３２は、ステップＳ２０４で確保された頂点バッファに各頂点情報として頂点座標メンバには頂点座標（ｘα，ｙα，ｚα）としてレンズ歪み除去後の画素座標を設定する（ステップＳ２０５）。なお、２次元グラフィクスであるため、ｚ座標には０を設定する。また、頂点情報設定部３２は、テクスチャ座標メンバにはテクスチャ座標（ｕα，ｖα）として対応するレンズ歪み除去前の画素座標を設定する（ステップＳ２０６）。頂点バッファ確保部３１および頂点情報設定部３２は、全ての頂点バッファに頂点情報を設定し終えるまで（ステップＳ２０７のＮＯ）、ステップＳ２０５，Ｓ２０６の各処理を繰り返す。そして、頂点バッファ確保部３１および頂点情報設定部３２は、全ての頂点バッファに頂点情報を設定する（ステップＳ２０７のＹＥＳ）。
【００５２】
次に、インデクスバッファ確保部３３は、ステップＳ２０５，Ｓ２０６で設定された頂点情報の接続関係を表す頂点番号を設定するインデクスバッファをＧＰＵ１４に確保する（ステップＳ２０８）。面情報設定部３４は、ステップＳ２０８で確保されたインデクスバッファに頂点番号を設定する（ステップＳ２０９）。面情報設定部３４は、全てのインデクスバッファに頂点番号を設定するまで、ステップＳ２０９の処理を繰り返す（ステップＳ２１０のＮＯ）。面情報設定部３４が全てのインデクスバッファに頂点番号を設定すると（ステップＳ２１０のＹＥＳ）、ステップＳ１０１のメッシュ４３を作成する処理が終了する。
【００５３】
（第２実施形態）
（レンズ歪み除去プログラム８０の機能構成）
次に、図１０を参照して、第２実施形態に係るレンズ歪み除去プログラム８０の機能構成を説明する。図１０は、第２実施形態に係るレンズ歪み除去プログラム８０の機能構成を示すブロック図である。
図１０に示すレンズ歪み除去プログラム８０は、図２に示した第１実施形態に係るレンズ歪み除去プログラム３０と同一の機能構成を有して構成されるものである。但し、レンズ歪み除去プログラム８０は、頂点バッファ確保部３１、頂点情報設定部３２、インデクスバッファ確保部３３および面情報設定部３４を有していない代わりに、メッシュオブジェクト入力部８１を有している。また、レンズ歪み除去プログラム８０は、レンズ歪み除去プログラム３０と同様に、ハードディスクドライブ１３にインストールされる。
【００５４】
メッシュオブジェクト入力部８１は、上述した頂点バッファのデータとインデクスバッファのデータとを格納することができるオブジェクトであるメッシュオブジェクトのデータを、例えばハードディスクドライブ１３に保存されているファイルから読み出すための処理を行う。
なお、第２実施形態に係るレンズ歪み除去プログラム８０においては、メッシュオブジェクト入力部８１が、メッシュ作成手段として機能する。
【００５５】
（レンズ歪み除去プログラム８０によるメッシュ４３を作成する処理の流れ）
次に、図１１を参照して、第２実施形態に係るレンズ歪み除去プログラム８０によるステップＳ１０１のメッシュ４３を作成する処理の流れを説明する。図１１は、第２実施形態に係るレンズ歪み除去プログラム８０によるメッシュ４３を作成する処理の流れを示すフローチャートである。
第２実施形態に係るレンズ歪み除去プログラム８０によるレンズ歪み除去処理においても、レンズ歪み除去処理の処理全体の流れは、図８で示したレンズ歪み除去処理と同じである。但し、ステップＳ１０１で定義されるメッシュ４３を作成する処理の流れが異なる。
【００５６】
レンズ歪み除去プログラム３０によるレンズ歪み除去処理においては、ステップＳ１０１で頂点バッファとインデクスバッファとを確保した。しかしながら、多くの３次元グラフィックスシステムのＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）関数を使用して、頂点バッファとインデクスバッファを含むメッシュオブジェクトを作成することができる。このため、第２実施形態におけるレンズ歪み除去プログラム８０によるレンズ歪み除去処理においては、メッシュオブジェクトを作成し、作成したメッシュオブジェクトをファイルに保存しておく。そして、メッシュオブジェクト入力部８１は、ＧＰＵ１４に直接頂点バッファとインデクスバッファを確保する代わりに、ファイルからメッシュオブジェクトを読み出して取得し、ＧＰＵ１４にメッシュ４３を作成する。
【００５７】
図１１に示すように、まずメッシュオブジェクト入力部８１が、ハードディスクドライブ１３に保存されているメッシュオブジェクトのファイルを開く（ステップＳ３０１）。次に、メッシュオブジェクト入力部８１は、ファイルからメッシュオブジェクトを読み出し、そのメッシュオブジェクトをＧＰＵ１４に与える（ステップＳ３０２）。最後に、メッシュオブジェクト入力部８１は、開いているファイルを閉じると（ステップＳ３０３）、ステップＳ１０１で定義されるメッシュ４３を作成する処理が終了する。
【００５８】
上述したように、頂点バッファとインデクスバッファとを含むメッシュオブジェクトを作成したら、作成したメッシュオブジェクトをファイルに保存したり、保存したファイルからメッシュオブジェクトを読み出したりすることが可能である。予めメッシュオブジェクトがファイルに保存されている場合には、頂点バッファとインデクスバッファを確保する処理の代わりに、メッシュオブジェクトをファイルから読み出す処理に置き換えて実行する。これにより、初期設定処理を容易にして画像のレンズ歪みの除去を行うことができる。
【００５９】
（変形例）
なお、第１実施形態におけるレンズ歪み除去処理で、頂点の面情報を表現するためにインデクスバッファを使用する例を示したが、これに限定されるものではない。例えば、設定ファイルに頂点の接続順に頂点番号を記述して保存しておくことで、インデクスバッファを使用せずに頂点の面情報を表現することも可能である。但し、この方法では、同一の頂点の頂点情報を複数回頂点バッファに登録する必要が生じる。このため、全体的に見ればインデクスバッファを使う方法に比べるとバッファ容量を多く必要とするが、インデクスバッファを使用しなくともリアルタイムでレンズ歪み除去を行うことができる。
【００６０】
（まとめ）
本実施形態によれば、レンズ歪みのある画像の画素を直接操作してレンズ歪みを除去するのではなく、レンズ歪みを除去する前の画像の画素とレンズ歪みを除去した後の画像の画素との対応関係をもつ複数の頂点と、その複数の頂点同士の接続関係とから成るメッシュを例えばＧＰＵに与えておく。そして、このメッシュにレンズ歪みのある画像をテクスチャとして貼り付けた画像を描画することで、レンズ歪みを除去した画像を得る。このため、レンズ歪みを除去する処理と他の幾何変換処理とを組み合わせた場合であっても、まずメッシュに対して他の幾何変換を適用してからテクスチャを貼り付けることにより、画素単位の補間処理は最後に１度しか発生しない。よって、スペックの低いパーソナルコンピュータ等でもリアルタイムで高精度に画像のレンズ歪みを除去することができる。
【産業上の利用可能性】
【００６１】
特に、広範囲を鮮明な画像で撮像することが望まれる防犯・監視システム等で、撮像された動画のレンズ歪みを除去するのに最適なレンズ歪み除去装置、方法およびプログラムとして利用される。
【符号の説明】
【００６２】
１０                    レンズ歪み除去装置
１１                    ＣＰＵ
１２                    メモリ
１３                    ハードディスクドライブ
１４                    ＧＰＵ
１５                    マウス
１６                    キーボード
１７                    ディスプレイ
１８                    カメラ
３０，８０              レンズ歪み除去プログラム
３１                    頂点バッファ確保部
３２                    頂点情報設定部
３４                    インデクスバッファ確保部
３３                    面情報設定部
３５                    画像入出力部
３６                    テクスチャ設定部
３７                    描画機能実行部
８１                    メッシュオブジェクト入力部
【図１】
2011217057.tif 000003
【図２】
2011217057.tif 000004
【図３】
2011217057.tif 000005
【図４】
2011217057.tif 000006
【図５】
2011217057.tif 000007
【図６】
2011217057.tif 000008
【図７】
2011217057.tif 000009
【図８】
2011217057.tif 000010
【図９】
2011217057.tif 000011
【図１０】
2011217057.tif 000012
【図１１】
2011217057.tif 000013
【図１２】
2011217057.tif 000014