(57)【要約】      （修正有）【課題】魚眼カメラで撮影した画像中の注目点を、ユーザの操作によりユーザの所望する方向からみた正視画像を生成し表示する。【解決手段】ＣＰＵ２は、ＤＲＡＭ３上に展開された魚眼画像データＩｍａをディスプレイ９のウィンドウＷｉ１に表示する。ユーザがマウス８の操作により注目点を指定すると、ＣＰＵ２は注目点を中心とした正視画像データＩｍｂ１を生成しディスプレイ９に表示する。ユーザが方向キー７１を操作することにより、ＣＰＵ２は操作に応じた角度α視線軸を上下方向に回転し、角度β視線軸を水平方向に回転し、平行移動量を補正し、さらにスケーリング倍率を補正した正視画像データＩｍｂ２をＤＲＡＭ３上に生成し、ディスプレイ９のウィンドウＷｉ２に表示する。【選択図】図１３
2018206205.tif 000002
【特許請求の範囲】
【請求項１】
魚眼レンズを用いて撮影された魚眼画像を、コンピュータを用いて補正する方法であって、
魚眼画像データをメモリに展開するステップと、
前記メモリ上に展開された魚眼画像データをディスプレイに表示するステップと、
ユーザインタフェースを介して、ディスプレイに表示された魚眼画像内の注目点の指定を受け付けるステップと、
前記注目点を中心となるように視線軸を回転させ、回転させた視線軸に直交し、半径Ｒの仮想球面に接する投影面に魚眼画像を投影して第１の正視画像データを前記メモリ上に生成するステップと、
第１の正視画像データを前記ディスプレイに表示するステップと、
前記ユーザインタフェースからの入力に基づき、視線移動量を決定するステップと、
決定された視線移動量に基づき、魚眼画像データより第２の正視画像データを前記メモリ上に生成するステップと、
第２の正視画像データをディスプレイに表示するステップを備えたことを特徴とする魚眼画像補正方法。
【請求項２】
請求項１に記載の魚眼画像補正方法において、第１の正視画像データを生成するステップは、
前記魚眼画像の中心を通る視線軸が水平であり、前記注目点の座標から上下方向の回転角度θの値、左右方向の回転角度φの値を算出するステップと
前記回転角度θ、φの値に行列演算式を適用して第１の正視画像データ内の座標点に対応する点の画素データを前記メモリ上に展開された魚眼画像データから求めるステップを備えた魚眼画像補正方法。
【請求項３】
請求項２に記載の魚眼画像補正方法において、前記視線移動量を決定するステップは、
前記ユーザインタフェースにより第１の正視画像の視線軸を上下方向に角度α回転させる指示を受け付けるステップ、
前記ユーザインタフェースにより第１の正視画像の視線軸を左右方向に角度β回転させる指示を受け付けるステップ、
決定された角度より、視線軸の平行移動量を算出するステップと、
前記決定された角度より、スケーリング倍率を算出するステップを備えている魚眼画像補正方法。
【請求項４】
請求項３記載の魚眼画像補正方法において、前記第２の正視画像データを生成するステップは、
前記視線軸の平行移動量及びスケーリング倍率Ｓｃを考慮しつつ、上下方向の回転角度（θ＋α）、左右方向の回転角度（φ＋β）に行列演算式を適用し、前記魚眼画像データから第２の正視画像データを生成する魚眼画像補正方法。
【請求項５】
請求項４記載の魚眼画像補正方法において、前記魚眼画像データから第２の正視画像データを生成するステップは、
第２の正視画像の座標点（ｕ，ｖ）について、第２の正視画像の中心座標点（ｕ０，ｖ０）からの距離がスケーリング倍率分大きくなる座標点（ｕ’，ｖ’）を算出するステップと、
座標点（ｕ’，ｖ’）に前記行列演算式を適用し、左右方向の平行移動量Δｕ，上下方向の平行移動量Δｖを減算し、魚眼画像中の対応点（ｘ，ｙ）を決定するステップと、
前記対応点（ｘ、ｙ）の画素値を算出するステップと、
算出された画素値を第２の正視画像の座標点（ｕ，ｖ）の画素値とするステップを備えた魚眼画像補正方法。
【請求項６】
請求項５記載の魚眼画像補正方法において、
前記左右方向の平行移動量Δｕは、
Δｕ＝−Ｒ×tanαで算出され、
前記左右方向の平行移動量Δｕは、
Δｖ＝−Ｒ×ＳＱＲＴ（１＋（tanα）＾２）×tanβで算出され、
前記スケーリング倍率Ｓｃは
Ｓｃ＝ＳＱＲＴ（１＋（tanα）＾２＋（tanβ）＾２）で算出される魚眼画像補正方法。
【請求項７】
プロセッサ、メモリ、ユーザインタフェース、ビデオインタフェースを備えたコンピューターにより、魚眼レンズを用いて撮影された魚眼画像を補正する魚眼画像補正プログラムであって、
魚眼画像データを前記メモリに展開し、
前記メモリ上に展開された魚眼画像データを前記ビデオインタフェースから出力し、
ユーザインタフェースを介して、魚眼画像内の注目点の指定を受け付け、
前記注目点を中心となるように視線軸を回転させ、視線軸に直交し、半径Ｒの仮想球面に接する投影面に魚眼画像を投影して第１の正視画像データを前記メモリ上に生成し、
第１の正視画像データを前記ビデオインタフェースから出力し、
前記ユーザインタフェースからの入力に基づき、視線移動量を決定し、
決定された視線移動量に基づき、魚眼画像データより第２の正視画像データを前記メモリ上に生成し、
第２の正視画像データをビデオインタフェースから出力することを前記プロセッサに実行させる魚眼画像補正プログラム。
【請求項８】
請求項７に記載の魚眼画像補正プログラムにおいて、
前記魚眼画像の中心を通る視線軸が水平であり、前記注目点の座標から上下方向の回転角度θの値、左右方向の回転角度φの値を算出し、
前記回転角度θ、φの値に行列演算式を適用して第１の正視画像データ内の座標点に対応する点の画素データを前記メモリ上に展開された魚眼画像データから求めることを前記プロセッサに実行させる魚眼補正プログラム。
【請求項９】
請求項８に記載の魚眼画像補正プログラムにおいて、
前記ユーザインタフェースにより第１の正視画像の視線軸を上下方向に角度α回転させる指示を受け付け、
前記ユーザインタフェースにより第１の正視画像の視線軸を左右方向に角度β回転させる指示を受け付け、
決定された角度より、視線軸の平行移動量を算出し、
前記決定された角度より、スケーリング倍率を算出することを前記プロセッサに実行させる魚眼画像補正プログラム。
【請求項１０】
請求項９記載の魚眼画像補正プログラムにおいて、
前記ユーザインタフェースにより第１の正視画像の視線軸を上下方向に角度α回転させる指示を受け付け、
前記ユーザインタフェースにより第１の正視画像の視線軸を左右方向に角度β回転させる指示を受け付け、
前記視線軸の平行移動量及びスケーリング倍率を考慮しつつ、上下方向の回転角（φ＋α）、左右方向の回転角（θ＋β）に行列演算式を適用し、前記魚眼画像データから第２の正視画像データを生成することを前記プロセッサに実行させる魚眼画像補正プログラム。
【請求項１１】
請求項１０記載の魚眼画像補正プログラムにおいて、
第２の正視画像の座標点（ｕ，ｖ）について、第２の正視画像の中心座標（ｕ０，ｖ０）からの距離がスケーリング倍率分大きくなる座標点（ｕ’，ｖ’）を算出し、
座標点（ｕ’，ｖ’）に前記行列演算式を適用し、左右方向の平行移動量Δｕ，上下方向の平行移動量Δｖを減算し、魚眼画像中の対応点（ｘ，ｙ）を決定し、
前記対応点（ｘ、ｙ）の画素値を算出し、
算出された画素値を第２の正視画像の座標点（ｕ，ｖ）の画素値とすることを前記プロセッサに実行させる魚眼画像補正プログラム。
【請求項１２】
請求項１１記載の魚眼画像補正プログラムにおいて、
前記左右方向の平行移動量Δｕは、
Δｕ＝−Ｒ×tanαで算出し、
前記左右方向の平行移動量Δｕは、
Δｖ＝−Ｒ×ＳＱＲＴ（１＋（tanα）＾２）×tanβで算出し、
前記スケーリング倍率Ｓｃは
Ｓｃ＝ＳＱＲＴ（１＋（tanα）＾２＋（tanβ）＾２）で算出することを前記プロセッサに実行させる魚眼画像補正プログラム。
【請求項１３】
プロセッサ、メモリ、ユーザインタフェース、ビデオインタフェースを備え、魚眼画像を補正する魚眼画像補正装置であって、
前記プロセッサは、
魚眼画像データを前記メモリに展開し、
前記メモリ上に展開された魚眼画像データを前記ビデオインタフェースから出力し、
ユーザインタフェースを介して、魚眼画像内の注目点の指定を受け付け、
前記注目点を中心となるように視線軸を回転させ、視線軸に直交し、半径Ｒの仮想球面に接する投影面に魚眼画像を投影して第１の正視画像データを前記メモリ上に生成し、
第１の正視画像データを前記ビデオインタフェースから出力し、
前記ユーザインタフェースからの入力に基づき、視線移動量を決定し、
決定された視線移動量に基づき、魚眼画像データより第２の正視画像データを前記メモリ上に生成し、
第２の正視画像データをビデオインタフェースから出力するよう構成されることを特徴とする魚眼画像補正装置。
【請求項１４】
請求項１３記載の魚眼画像補正装置において、前記プロセッサは、
前記魚眼画像の中心を通る視線軸が水平であり、前記注目点の座標から上下方向の回転角度θの値、左右方向の回転角度θの値を算出し、
第１の値及び第２の値に行列演算式を適用して第１の正視画像データ内の座標点に対応する点の画素データを前記メモリ上に展開された魚眼画像データから求めるよう構成される魚眼画像補正装置。
【請求項１５】
請求項１４に記載の魚眼画像補正装置において、前記プロセッサは、
前記ユーザインタフェースからの入力に基づき、前記視線軸の回転角度を決定し、
決定された角度より、視線軸の平行移動量を算出し、
前記決定された角度より、スケーリング倍率を算出するよう構成される魚眼画像補正装置。
【請求項１６】
請求項１５記載の魚眼画像補正装置において、前記プロセッサは、
前記ユーザインタフェースにより第１の正視画像の視線軸を上下方向に角度α回転させる指示を受け付け、
前記ユーザインタフェースにより第１の正視画像の視線軸を左右方向に角度β回転させる指示を受け付け、
前記視線軸の平行移動量及びスケーリング倍率を考慮しつつ、上下方向の回転角度（θ＋α）、左右方向の回転角度（φ＋β）に行列演算式を適用し、前記魚眼画像データから第２の正視画像データを生成するよう構成される魚眼画像補正装置。
【請求項１７】
請求項１６記載の魚眼画像補正装置において、前記プロセッサは、
第２の正視画像の座標点（ｕ，ｖ）をについて、第２の正視画像の中心座標（ｕ０，ｖ０）からの距離がスケーリング倍率分大きくなる座標点（ｕ’，ｖ’）を算出し、
座標点（ｕ’，ｖ’）に前記行列演算式を適用し、左右方向の平行移動量Δｕ，上下方向の平行移動量Δｖを減算し、魚眼画像中の対応点（ｘ，ｙ）を決定し、
対応点（ｘ、ｙ）の画素値を算出し、
算出された画素値を第２の正視画像の座標点（ｕ，ｖ）の画素値とするよう構成される魚眼画像補正装置。
【請求項１８】
請求項１７記載の魚眼画像補正装置において、前記プロセッサは、
前記左右方向の平行移動量Δｕは、
Δｕ＝−Ｒ×tanαで算出し、
前記左右方向の平行移動量Δｕは、
Δｖ＝−Ｒ×ＳＱＲＴ（１＋（tanα）＾２）×tanβで算出し、
前記スケーリング倍率Ｓｃは
Ｓｃ＝ＳＱＲＴ（１＋（tanα）＾２＋（tanβ）＾２）で算出するよう構成される魚眼画像補正装置。
【請求項１９】
請求項１３ないし１８いずれか１項に記載の魚眼画像補正装置において、
魚眼レンズを通して魚眼画像を撮影するカメラを備えた魚眼画像補正装置。
【請求項２０】
請求項１３ないし１９いずれか１項に記載の魚眼画像補正装置において、
前記ビデオインタフェースから出力されるビデオ信号を表示するディスプレイを備えたことを特徴とする魚眼画像補正装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は魚眼カメラで撮影した魚眼画像を正視図に補正する画像処理に関する。
【背景技術】
【０００２】
広角カメラは一つのカメラで広い範囲が撮影できるので、周辺を監視するために車両等に搭載されている。広角カメラで撮影した画像を、特定の視点から見た俯瞰図に変換する技術が知られている（特許文献１）。特許文献１では、車体後方に取り付けられた広角カメラで撮影されたが画像を、車体後部上方の仮想視点から見下ろす画像に変換して、モニタに表示している。
【０００３】
特許文献１の画像の変換では、撮影画像を三次元投影モデルに従って仮想視点から見た出力画像に変換する。これには、撮影画像の画素の位置座標と出力画像の画素の位置座標との対応を示す変換アドレス（マッピングメモリテーブル）を格納したアドレスメモリを用いることが開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２１３０７号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
広角カメラよりさらに画角の広い魚眼カメラでは、より大きな範囲が一つのカメラで撮影できる。魚眼撮影画像に含まれる任意の被写体を、任意の視点から見ることができれば便利である。しかし、特許文献１では、仮想視点と仮想視点から見る方向は１つに固定されており、撮影画像をマッピングテーブルで出力画像に変換していたが、この方法は任意の視点、任意の方向から見た画像に変換する際には適用が困難である。
【０００６】
この発明は上記に鑑みなされたもので、コンピュータを用いて魚眼カメラで撮影された画像（以下、魚眼画像という）を、コンピュータを用いて任意の視点、任意の方向からみた画像に変換する魚眼画像処理方法、魚眼画像補正プログラム及び魚眼画像補正装置を提供すること目的としている。
【課題を解決するための手段】
【０００７】
この発明の一観点にかかる魚眼画像補正方法はコンピュータを用いて実現するものであり下記のステップ（ａ）〜（ｈ）を備えている。
（ａ）魚眼画像データをメモリに展開するステップ、
（ｂ）前記メモリ上に展開された魚眼画像データをディスプレイに表示するステップ、
（ｃ）ユーザインタフェースを介して、ディスプレイに表示された魚眼画像内の注目点の指定を受け付けるステップ、
（ｄ）前記注目点を中心となるように視線軸を回転させ、回転させた視線軸に直交し、半径Ｒの仮想球面に接する投影面に魚眼画像を投影して第１の正視画像データを前記メモリ上に生成するステップ、
（ｅ）第１の正視画像データを前記ディスプレイに表示するステップ、
（ｆ）前記ユーザインタフェースからの入力に基づき、視線移動量を決定するステップと、
（ｇ）決定された視線移動量に基づき、魚眼画像データより第２の正視画像データを前記メモリ上に生成するステップと、
（ｈ）第２の正視画像データをディスプレイに表示するステップ
上記（ｆ）〜（ｈ）の処理を繰り返すことにより、ユーザは注目点を所望する方向から見た正視画像を生成することができる。
【０００８】
一実施形態においては、第１の正視画像データを生成するステップ（ｄ）が、下記のステップ（ｄ１）及び（ｄ２）を含んでいる。
（ｄ１）前記魚眼画像の中心を通る視線軸が水平であり、前記注目点の座標から上下方向の回転角度θの値、左右方向の回転角度φの値を算出するステップ、
（ｄ２）前記回転角度θ、φの値に行列演算式を適用して第１の正視画像データ内の座標点に対応する点の画像データを前記メモリ上に展開された魚眼画像データから求めるステップ。
【０００９】
一実施形態においては、前記ステップ（ｆ）のステップが以下の（ｆ１）〜（ｆ４）のステップを含んでいる。
（ｆ１）前記ユーザインタフェースにより第１の正視画像の視線軸を上下方向に角度α回転させる指示を受け付けるステップ、
（ｆ２）前記ユーザインタフェースにより第１の正視画像の視線軸を左右方向に角度β回転させる指示を受け付けるステップ、
（ｆ３）決定された角度α、βより、視線軸の平行移動量を算出するステップと、
（ｆ４）  前記決定された角度より、スケーリング倍率Ｓｃを算出するステップ  ここで、角度α、βは共に正又は負の値をとるものとする。
【００１０】
一実施形態においては、前記第２の正視画像データを生成するステップは、
前記視線軸の平行移動量及びスケーリング倍率Ｓｃを考慮しつつ、上下方向の回転角度（θ＋α）、左右方向の回転角度（φ＋β）に行列演算式を適用し、前記魚眼画像データから第２の正視画像データを生成する。
【００１１】
一実施形態において、前記ステップ（ｇ）は、
（ｇ１）第２の正視画像の座標点（ｕ，ｖ）について、第２の正視画像の中心座標（ｕ０，ｖ０）からの距離がスケーリング倍率分大きくなる座標点（ｕ’，ｖ’）を算出するステップと、
（ｇ２）座標点（ｕ’，ｖ’）に前記行列演算式を適用し、左右方向の平行移動量Δｕ，上下方向の平行移動量Δｖを減算し、魚眼画像中の対応点（ｘ，ｙ）を決定するステップと、
（ｇ３）前記対応点（ｘ、ｙ）の画素値を算出するステップと、
（ｇ４）算出された画素値を第２の正視画像の座標点（ｕ，ｖ）の画素値とするステップを備えている。
【００１２】
一実施形態においては、ステップ（ｇ）において
前記左右方向の平行移動量Δｕは、
Δｕ＝−Ｒ×tanαで算出され、
前記左右方向の平行移動量Δｕは、
Δｖ＝−Ｒ×ＳＱＲＴ（１＋（tanα）＾２）×tanβで算出され、
前記スケーリング倍率Ｓｃは
Ｓｃ＝ＳＱＲＴ（１＋（tanα）＾２＋（tanβ）＾２）で算出される
ここで、ＳＱＲＴ（）は引数の平方根を求める関数であり、（）＾２は引数の２乗を求める関数である。
【００１３】
この発明の一観点にかかる魚眼画像補正プログラムは、プロセッサ、メモリ、ユーザインタフェース、ビデオインタフェースを備えたコンピュータに適用され、魚眼画像データを前記メモリに展開し、前記メモリ上に展開された魚眼画像データを前記ビデオインタフェースから出力し、ユーザインタフェースを介して、魚眼画像内の注目点の指定を受け付け、前記注目点を中心となるように視線軸を回転させ、視線軸に直交し、半径Ｒの仮想球面に接する投影面に魚眼画像を投影して第１の正視画像データを前記メモリ上に生成し、第１の正視画像データを前記ビデオインタフェースから出力し、前記ユーザインタフェースからの入力に基づき、視線移動量を決定し、決定された視線移動量に基づき、魚眼画像データより第２の正視画像データを前記メモリ上に生成し、第２の正視画像データをビデオインタフェースから出力することを前記プロセッサに実行させる。
【００１４】
この明細書において、ユーザインタフェースはコンピュータに直接接続される入力機器であってもよいし、コンピュータにＬＡＮ（Local Area Network）やインターネットによって接続される他のコンピュータ（クライアント）に接続される入力機器も含むものとする。またビデオインタフェースは、ディスプレイケーブルを介してディスプレイに画像データ（又はアナログ画像信号）を出力することのみならず、ＬＡＮやインターネットを介してクライアントのディスプレイに画像データを出力することも含むものとする。
【００１５】
この発明の一観点にかかる魚眼画像補正装置は、プロセッサ、メモリ、ユーザインタフェース、ビデオインタフェースを備え、魚眼画像を補正する魚眼画像補正装置であり、前記プロセッサは、魚眼画像データを前記メモリに展開し、前記メモリ上に展開された魚眼画像データを前記ビデオインタフェースから出力し、ユーザインタフェースを介して、魚眼画像内の注目点の指定を受けつけ、前記注目点を中心となるように視線軸を回転させ、視線軸に直交し、半径Ｒの仮想球面に接する投影面に魚眼画像を投影して第１の正視画像データを前記メモリ上に生成し、前記ユーザインタフェースからの入力に基づき、視線移動量を決定し、決定された視線移動量に基づき、魚眼画像データより第２の正視画像データを前記メモリ上に生成し、第２の正視画像データをビデオインタフェースから出力するよう構成される。
【発明の効果】
【００１６】
本発明によれば、ユーザはユーザインタフェースを操作することによりディスプレイに表示された魚眼画像に写っている注目点を指定し、さらにユーザインタフェースを操作することにより、注目点をユーザの所望する方向より見た正視画像を得ることができる。
【図面の簡単な説明】
【００１７】
【図１】正射影魚眼レンズの仮想球面モデルを説明する図である。
【図２】魚眼カメラで撮影しようとする被写体を説明する図である。
【図３】図２の被写体を魚眼カメラで撮影した画像である。
【図４】（ａ）は光軸が水平な場合の仮想球面モデルにおける視線軸の回転を説明する図であり、（ｂ）はその変換式を示す図である。
【図５】（ａ）投影面に投射された像の拡大を説明する図、（ｂ）はその倍率を導くための式を示す図である。
【図６】（ａ）図３の魚眼カメラで撮影した画像から、視線軸を回転して描画した正視図の一例を示し、（ｂ）はその変換式を示す図である。
【図７】（ａ）は光軸が垂直上方向きの場合の仮想球面モデルにおける視線軸の回転を説明する図であり、（ｂ）はその変換式を示す図である。
【図８】（ａ）はＸ軸回りに視線軸を角度α回転した状態を説明する図、（ｂ）はその変換式を説明する図である。
【図９】（ａ）はＹ軸回りに視線軸を角度β回転した状態を説明する図、（ｂ）はその変換式を説明する図である。
【図１０】投影面に射影された像の大きさの変化を説明する図である。
【図１１】（ａ）は、図１０での各点の位置関係を説明する図、（ｂ）はスケーリング倍率を導出する計算式を説明する図である。
【図１２】（ａ）は視線軸回転を行った後の状態での正視図であり、（ｂ）は（ａ）の正視図から視線軸の平行移動を行って注目点が中心に位置する状態での正視図である。
【図１３】この発明の実施例で使用するパーソナルコンピュータの構成を説明するブロック図である。
【図１４】実施例に係るパーソナルコンピュータのディスプレイに表示される魚眼画像のウィンドウを示す図である。
【図１５】（ａ）は実施例に係るパーソナルコンピュータのディスプレイに表示される注目点を中心とした正視図を表示するウィンドウの図、（ｂ）は視線軸移動が施された正視図を表示するウィンドウの図である。
【図１６】実施例に係る魚眼補正アプリケーションの動作を説明するフロー図である。
【図１７】実施例に係る魚眼補正アプリケーションの動作を説明するフロー図である。
【図１８】実施例に係る魚眼補正アプリケーションの動作を説明するフロー図である。
【図１９】（ａ）スケーリング倍率補正のための座標変換を説明する図、（ｂ）は座標変換式を示す図である。
【図２０】実施例に係る演算処理のための数式をまとめて示す図である。
【図２１】等距離射影方式を説明する図である。
【図２２】画角が１８０°を超える場合を説明する図である。
【発明を実施するための形態】
【００１８】
発明の実施の形態を、図１〜図２２を参照しながら以下に説明する。まず、この発明の画像処理の原理について説明する。
魚眼カメラに用いられる魚眼レンズには、正射影方式、等距離射影方式、立体射影方式、等立体角射影方式の４つの方式のレンズが知られている。この発明は、方式の違いを補正することでいずれの方式の魚眼レンズにも適用可能であるが、ここでは正射影方式の魚眼レンズについて図１を参照しながら説明する。
【００１９】
（正射影方式の説明）
図１は、レンズの表面（半球面）Ｓに入射した光がレンズで屈折し、平面Ｈ上に投影されているというモデルを示している。このモデルは「仮想球面モデル」と呼ばれている。図１中、符号Ｒは半球面の半径、符号Ａｘはレンズの光軸である。光軸Ａｘと平面Ｈとの交差する点をＯ、光軸Ａｘと仮想球面Ｓが交差する点をＰとする。光軸Ａｘに対して角度ψで入射する光線Ｌは、レンズにより屈折して光軸Ａｘと平行な光線Ｌ’ として平面Ｈに投射される。光線Ｌ’ が平面Ｈに投射された点Ａとすれば、点Ｏと点Ａを結ぶ距離ｒは、魚眼レンズの焦点距離ｆとするとｆsinψで表される。以下、説明を簡単にするためにｆはＲに等しいものとする。
ｒ  =  Ｒsinψ                                              ・・・・（０）
【００２０】
平面Ｈに投影された画像を仮想球面Ｓ上に配置し、その一部を平面に投影して、魚眼画像から正視画像を生成することができる。図１では、仮想球面Ｓと光軸Ａｘの交点Ｐで仮想球面Ｓに接する投影面ＰＬを示しており、投影面ＰＬは平面Ｈと平行となる。平面Ｈに投影されたＡ点に対応する投影面ＰＬ上の点Ａ’は、入射光Ｌと投影面ＰＬとの交点となる。
【００２１】
（視線軸回転：前提）
図１では、表面Ｓと光軸Ａｘとの交点Ｐで仮想球面Ｓに接する平面ＰＬについて考察したが、任意の点で仮想球面Ｓに接する平面について、正視画像を描画することができる。すなわち、レンズの光軸Ａｘは変わらないが、見かけ上カメラを回転したようにして任意の方向の正視画像を生成することができる。
【００２２】
この場合光軸Ａｘを水平又は垂直に据え付けると、正視画像を生成する処理が簡単となる。ここでは、光軸Ａｘを水平に設定した例を説明する。図２は、被写体の正視画像を示している。被写体は廊下がＴ字状に交差するところを見ており、廊下の左右の壁面Ｗ１、Ｗ２、中央の壁面Ｗ３、天井Ｃ及び床Ｆが見えている。向かって右の壁面Ｗ２には矩形のパネル状の物体Ｄが配置されている。この状態では、物体Ｄは斜め方向から見ていることとなる。図２中Ｘは左右方向の水平軸、Ｙは上下方向の垂直軸を示している。Ｚ軸はＯ点を通って紙面垂直方向（前後方向）に伸びており、レンズの光軸と一致している。
【００２３】
図３は、図２の被写体を視野角１８０°の魚眼レンズで撮影した画像を示している。魚眼レンズは、二次元ＣＣＤ（Charge Coupled Device、図示せず）上に円形の像を結ぶが、画像データとしては矩形状のラスタ画像として出力されるため、円形の像（イメージサークル）の外方部分は黒として処理されている。
【００２４】
図３では、撮影画像の上下・左右が絶対的に決まっているので、カメラの視線軸回転は、Ｘ軸回りの回転Ｔｘ（見上げる、見下ろす）とＹ軸回りの回転Ｔｙ（左を向く、右を向く）だけを考慮すればよいこととなる。Ｘ軸回りの回転が「上下方向」の回転となり、Ｙ軸回りの回転が「左右方向」の回転となる。なお、光軸を垂直になるようレンズをセットした場合については後述する。
【００２５】
図４（ａ）は、図１の仮想球面モデルを斜め後方から見た図であり、仮想球面Ｓ上のＰ点において投影面ＰＬ０が点接触している状態を表している。Ｐ点は、Ｏ点を中心としてＸ軸回りに角度θ、Ｙ軸回りに角度φ回転した位置にある。Ｐ点及びＯ点を通る直線は投影面ＰＬ０の法線ｎとなる。投影面ＰＬ０には、Ｕ軸、Ｖ軸による直交座標が設定されている。
【００２６】
投影面ＰＬ上に仮想球面Ｓの正射影を投影した場合には、座標（ｕ，ｖ）及び仮想球面Ｓの半径Ｒと仮想球面Ｓの座標（ｘ, ｙ, ｚ）との間には、図４（ｂ）に示す（１）式の関係があることが知られているので、座標（ｕ，ｖ）から元の座標（ｘ，ｙ）を求め、求めた座標（ｘ，ｙ）の画素値を投影面ＰＬの座標（ｕ，ｖ）にマッピングすることで、正射影の画像を得ることができる。つまり、Ｐ点が光軸上に来るように仮想球面Ｓを回転した状態の正射影画像を得ることができる。ただし、この状態では魚眼レンズ固有の見え方の歪が残っている。そこで、人の目で見た時と同じような自然な見え方にするために、中心射影による正視画像を生成する。
【００２７】
点Ｐを中心とした正視画像について図５（ａ）（ｂ）を参照しながら説明する。まず、点Ｐで仮想球面Ｓに接触する投影面ＰＬ０を想定する。この投影面ＰＬ０上には２次元直交座標系ＵＶがある。仮想球面Ｓ上の点Ｐ１の像は、投影面ＰＬ０上のＰ１’ に投影される。点Ｐ１’ の座標を（ｕ１，ｖ１，Ｒ）とし、Ｐ点からのオフセットｕ*, ｖ*をそれぞれ、
ｕ*＝ｕ１−ｕ                              ・・・・（１．２ａ）
ｖ*＝ｖ１−ｖ                               ・・・・（１．２ｂ）
とする。
【００２８】
投影面ＰＬ０における点Ｐと点Ｐ１’ との距離Ｌ１は、三平方の定理により、
Ｌ１＝ＳＱＲＴ（（ｕ*）＾２＋（ｖ*）＾２）                ・・・・（１．２）
と表される。ＳＱＲＴ（）は、引数の平方根を示す関数であり、（）＾２は引数の２乗を示す関数である。なお、図面中の式で平方根を表すには根号√を使用している。一方仮想球面Ｓ上の点Ｐ１と仮想球面Ｓの中心点Ｏとの距離Ｌ２は、三平方の定理により、式（１．３）で表される。
Ｌ２＝ＳＱＲＴ（（Ｌ１）＾２＋（Ｒ）＾２）
＝ＳＱＲＴ（（ｕ*）＾２＋（ｖ*）＾２＋（Ｒ）＾２）  ・・・・（１．３）
【００２９】
点Ｏと点Ｐを結ぶ線分から点Ｐ１の距離をＬ０とすると、三角形の相似の関係からＬ０とＬ１との比Ｌ１／Ｌ０は、点Ｏと点Ｐとの距離Ｒと、点Ｏと点Ｐ１’ との距離Ｌ２とで表せ、この値をＳｃ０とすると（１．４）式の関係がある。
Ｓｃ０  ＝Ｌ１／Ｌ０＝Ｌ２／Ｒ
＝ＳＱＲＴ（（ｕ*）＾２＋（ｖ*）＾２＋（Ｒ）＾２）／Ｒ・・・（１．４）
【００３０】
このＳｃ０を以下、倍率と呼ぶ。倍率Ｓｃ０の値は投影画像の中心（ｕ*＝０，ｖ*＝０）でのみ１となり、その他の点（ｕ，ｖ）では１より大きくなる（１≦Ｓｃ０）。そこで、投影面ＰＬ０上の中心からの距離を１／Ｓｃ０倍すれば、元のＸＹ平面に投影された画像と同じ大きさにすることができる。倍率Ｓｃ０は、（１，４）式で示されるように、ｕ*, ｖ*の関数であり、中心点Ｐから離れるほど大きくなる。
（ｘ、ｙ、ｚ）＝（１／Ｓｃ０）（ｕ*, ｖ*，Ｒ）・・・（１．５）
倍率Ｓｃ０を考慮した（１）式を、（１．６）式として図５（ｂ）に示す。なお、後述の図６（ａ）のように投影画像の中心点にＵＶ座標の原点を一致させると、オフセット値ｕ*, ｖ*は座標値ｕ，ｖと同じとなる。
【００３１】
（１．５）式の関係を（１）式に適用すれば、（１，６）式となる。この（１，６）式を用いて、投影面ＰＬ０上の点（ｕ，ｖ）に対応するＸＹ平面上の点（ｘ、ｙ）を求め、その位置での画素の値を投影面ＰＬ０上にマッピングすれば、点Ｐを中心とした正視画像を描画することができる。
【００３２】
図３に示した画像において、物体Ｄを中心にした正視画像を生成したい場合には、物体ＤはＸ軸上にあるのでＹ軸回りの回転Ｔｙだけを考慮すればよい。Ｘ軸回りの回転Ｔｘはなく角度θは０となり、Ｙ軸回りに角度φ１回転させることになるので、sinθ＝０、cosθ=１となり、図６（ｂ）に示す（２）式で表すことができる。この（２）式は、（１．４）式で表される倍率Ｓｃ０を考慮したものとなっている。図６（ａ）は、（２）式を用いて生成された正視画像を示しており、物体Ｄの像ｄ１が正視画像の中央に位置するようになっている。
【００３３】
次に、Ｚ軸（光軸）が垂直な場合について図７を参照しながら説明する。この場合はＸＹ平面が水平であって、Ｚ軸回りの回転（周囲を見回す）角度ψとＸ軸回りの回転（レンズの向きが上向きならば見下ろす、レンズの向きが下向きならば見上げる）角度θのみを考慮すればよい。仮想球面Ｓ上のＰ点が、Ｚ軸回りに角度ψ、Ｘ軸回りに角度θと回転したものであるとするならば、Ｐ点で仮想球面Ｓに接する投影面ＰＬ０’ 上の正視画像の座標ｕ，ｖと仮想球面Ｓの座標（ｘ、ｙ、ｚ）との関係は、（１．１）式で表すことができる。
【００３４】
（視線軸移動：Ｘ軸回りの回転）
図６（ａ）において、物体Ｄの像ｄ１は正視画像の中央には来ているが、物体Ｄはもともと斜め前方に存在していたものであるから傾斜した状態で生成されている。物体Ｄに垂直な方向からみた正視画像を見たい場合には、視線軸回転と平行移動とを行う必要がある（以下、視線軸の回転と平行移動をまとめて「視線軸移動」という場合がある）。視線軸移動についてＸ軸回りの回転を角度α、Ｙ軸回りの回転を角度β、Ｕ軸方向の平行移動量をΔｕ、Ｖ軸方向の平行移動量をΔｖとする。
【００３５】
まず、Ｘ軸回りに角度α回転する処理について図８（ａ）を参照しながら説明する。図８（ａ）中、Ｙ’ 軸、Ｚ’ 軸は、図４（ａ）のＹ軸、Ｚ軸より、Ｘ軸回りに角度θ、Ｙ軸回りに角度φ回転した状態での座標軸であり、図示しないがＸ’ 軸はＯ点を通って紙面垂直下方に伸びている。Ｚ’ 軸上に物体Ｄの像ｄ１が位置している。物体Ｄの像ｄ１がＺ’ 軸と交差する点をＰ１とする。投影面ＰＬ１は、Ｚ’ 軸に対してＹ’Ｚ’ 平面内で角度ξ傾いている。そこで、角度α（＝π- ξ）視線軸を回転し、かつＯ点を平行移動量ΔｕだけＵ軸上を移動させてＯ１点とすると、このＯ１点より物体Ｄをその法線方向ｎからみることができる。物体Ｄの像ｄ２は、Ｑ１点で仮想球面Ｓに接触する投影面ＰＬ２上にあり、投影面ＰＬ１上の物体Ｄの像ｄ１より大きくなっている。
【００３６】
Ｘ軸回りの角度αの回転後の投影面ＰＬ２の（ｕ, ｖ）座標は、図８（ｂ）の（３）式から逆算した魚眼画像の座標（ｘ、ｙ）に対応する。なお、（３）式において、sin（θ＋α）は、加法定理によりsinθcosα＋cosθsinαと計算することもできる。また、cos（θ＋α）も加法定理により、cosθcosα−sinθsinαと計算することもできる。
【００３７】
一方、平行移動量ΔＵは、仮想球面Ｓの半径Ｒと角度αより、以下の（４）式で表される。
Δｕ= −Ｒ×tanα・・・（４）
また、投影面ＰＬ２はＺ’ 軸と点Ｍで交差するが、点Ｏと点Ｍとの距離Ｒ１は以下の（５）式で表せる。
Ｒ１＝Ｒ／cosα＝Ｒ×ＳＱＲＴ（１＋（tanα）＾２）・・・（５）
１＋（tanα）＾２は１よりも大きいので、Ｒ１は仮想球面Ｓの半径Ｒより大きくなる。
【００３８】
（視線軸移動：Ｙ軸回りの回転）
次に、Ｙ軸回りの回転を、図９を参照しながら説明する。図９（ａ）において、Ｙ’ 軸は点Ｏを通り、紙面垂直上方に向いている。このＹ’ 軸の周りに視線軸を角度β回転し平行移動量Δｖ移動させることにより、物体Ｄの像ｄ２を法線方向からとらえることができる。さきにＸ軸回りの回転により仮想球面の半径はＲ１となっている。Ｏを中心にＲ１を半径とする仮想球面をＳ１とする。図９（ａ）で、点Ｏと点Ｑ２との距離、点Ｏ２と点Ｐ３との距離は共にＲ１となっている。
【００３９】
まず、視線軸をＹ’ 軸まわりに角度β回転させる。角度β回転させた視線軸が仮想球面Ｓ１と接する点をＱ２とする。点Ｑ２で仮想球面Ｓ１に接触する投影面ＰＬ３に投影される物体Ｄの像はｄ３となる。元のＸＹＺ座標（ｘ，ｙ，ｚ）と投影面ＰＬ３のＵＶ座標（ｕ，ｖ、Ｒ）との間には、図９（ｂ）の（６）式であらわされる。角度θにはＸ’ 軸回り回転角α、角度φにはＹ’ 軸回りの回転角βがそれぞれ加えられている。投影面ＰＬ３上のＵＶ座標（ｕ，ｖ）から（６）式により座標（ｘ，ｙ）を逆算し、得られた（ｘ、ｙ）の画素データを投影面ＰＬ３の座標（ｕ、ｖ）にマッピングする。
【００４０】
次に、視線軸を平行移動量Δｖ平行移動する。Δｖは、下記の（７）式で表される。
Δｖ＝−Ｒ１×tanβ＝−Ｒ×ＳＱＲＴ（１＋（tanα）＾２）×tanβ・・・（７）
【００４１】
（視線軸移動：スケーリング）
上述のように投影面ＰＬ３上に投影された物体Ｄの像ｄ３は、元の投影面ＰＬ１の対象物の像ｄ１よりも拡大されている。図１０及び図１１を用いて、スケーリング倍率Ｓｃを求める方法について説明する。
【００４２】
図１０は、投影面ＰＬ４上にある像ｄ４の中心がＰ４の位置で仮想球面Ｓと交差している。像ｄ４を、Ｑ点で接し、Ｚ軸と直交する投影面ＰＬ５上に投影した像をｄ５とし、その中心点をＰ５とする。仮想球面Ｓの半径をＲとすると、仮想球面Ｓの中心点Ｏと点Ｑとの距離、及び中心点Ｏと点Ｐ４との間の距離はＲとなる。図１１（ｂ）の（８．１）式にこの関係が示されている。
【００４３】
ここで、図１１（ａ）に示すように、点Ｏと点Ｐ５を結ぶ直線がＸ軸まわりに角度α１、Ｙ軸回りに角度β１回転しているとすると、点Ｐ５のＹ軸座標点Ｐ５Ｙと点Ｑとの距離は（８．２）式に示すようにＲtanα１となる。また、点Ｐ５のＸ軸座標点Ｐ５ｘと点Ｑとの距離は、（８．３）式にＲtanβ１となる。三平方の定理を適用し、点Ｑと点Ｐ５の距離は（８．４）式で表すことができる。
【００４４】
点Ｏ、点Ｑ、点Ｐ５で構成される三角形は点Ｑにおいて直角となるので、再び三平方の定理を適用し、点Ｏと点Ｐ５の距離は（８.５）式で表される。（８．６）式で表されるように点Ｏと点Ｐ５の距離を点Ｏと点Ｐ４との距離で除したものが、拡大倍率Ｓｃとなる。以下、この拡大倍率Ｓｃをスケーリング倍率と呼ぶ。ＰＬ３に投影される画像を１／Ｓｃ倍することにより、投影された画像のスケールが図４の投影面ＰＬ０に投影された像と同じになる。
【００４５】
ここで、図６（ａ）に示したケースに、視線軸移動を適用した例を図１２に示す。この場合、Ｘ軸回りの回転はないため角度αは０となると共にtanαも０となり、Ｙ軸回りの回転のみを考慮すればよい。Ｙ軸回りに角度β２回転させれば、注目物Ｄをその法線方向から見ることができるとする。
【００４６】
まず、Ｙ軸回りに角度β２回転させた状態の正視図を図１２（ａ）に示す。視線軸移動を行うことにより、物体Ｄを法線方向から見えようになっている。しかし、物体Ｄの像ｄ３の中心Ｐ３は、図１２（ａ）の中心から左方向にΔｖずれている。また、全体的にスケーリング倍率Ｓｃ拡大された状態で描画される。ここで、Δｖ，Ｓｃは下記のように表される。
Δｖ＝ −Ｒtanβ２                              ・・・・（７．１）
Ｓｃ＝ＳＱＲＴ（１＋（tanβ２）＾２）           ・・・・（８．６１）
そこで、Δｖだけ画像をＵ軸正方向に移動し、倍率１／Ｓｃで縮小すると図１２（ｂ）のような正視図が得られる。これで、物体Ｄの像ｄ３が中央に位置し、物体Ｄを法線方向からみた正視図が完成する。
【実施例】
【００４７】
図２、図６（ａ）、図１２（ａ）及び図１２（ｂ）において、注目物Ｄは平面状のパネルであるとして説明した。実際に、ユーザが観察したい注目物は平面のみならず立体物も有り得る。また、ユーザは必ずしも法線方向からだけ見たいだけではなく、その対象物の特徴をよく表す方向から見たい場合も少なくない。従って、前記角度α、βはユーザが調整することにより、ユーザの見たい方向を決定するような方法が望ましい。以下、この発明の実施例を図１３〜１９を参照しながら説明する。前提として、魚眼画像は、光軸が水平で正射影方式の魚眼レンズで撮影されたものとする。
【００４８】
この実施例では、１台のパーソナルコンピュータ（以下ＰＣという）で本発明の魚眼画像補正処理を実行する場合について説明する。図１３は、この実施例に用いるＰＣ１の構成を示すブロック図である。ＣＰＵ（Central Processing Unit）２は魚眼補正処理を実行する主体となる構成要素であり、バス２ａを介して、主記憶装置であるＤＤＲＳＤＲＡＭ（Double-Data-Rate Synchronous Dynamic Random Access Memory、以下ＤＲＡＭという）３が接続されている。ＣＰＵ２には、チップセット４がバス２ｂを介して接続される。チップセット４は、ＵＳＢ（Universal Serial Bus）ポート４ａ、補助記憶装置を接続するためのＳＡＴＡ（Serial Advanced Technology Attachment）インタフェース４ｂ、ビデオインタフェース４ｃ、ネットワークインタフェース４ｄを有している。
【００４９】
ＵＳＢポート４ａには、キーボード７、マウス８などの周辺機器が接続される。キーボード７は、方向キー７１を備えており、符号７２は、方向キー７１を拡大して示している。ＳＡＴＡインタフェース４ｂには、補助記憶装置としてハードディスクドライブ（Hard Disk Drive、以下ＨＤＤと略称する）５が接続されている。なお、ＨＤＤに代えてソリッドステートドライブ（Solid State Drive；ＳＳＤ）を適用することもできる。ビデオインタフェース４ｃには、ディスプレイ９が接続される。ネットワークインタフェース４ｄにはＬＡＮ（Local Area Network）インタフェース６が接続され、ＬＡＮ１０にＰＣ１が接続される。ＬＡＮ１０は、ルーター１１を介してクラウド１２に接続される。ＬＡＮ１０は有線ＬＡＮ、無線ＬＡＮいずれであってもよい。
【００５０】
ＤＲＡＭ３には、オペレーティングシステム（Operating System; ＯＳ）、各種ミドルウェア、各種ドライバ等がＣＰＵ２で実行可能に展開される。これらは、ＨＤＤ５に圧縮されて記憶されており、ＰＣ１の起動時にＣＰＵ２がＨＤＤ５から読みし、ＤＲＡＭ３上に展開する。
【００５１】
ＨＤＤ５には、後述の魚眼画像補正アプリケーションＡｐも格納されており、ユーザが魚眼画像補正アプリケーションＡｐの起動を指示すると、ＣＰＵ２が魚眼画像補正アプリケーションＡｐをＨＤＤ５から読みだしＤＲＡＭ３上に展開する。図１３中の符号Ａｐは、ＤＲＡＭ３上に展開された魚眼画像補正アプリケーションＡｐのインスタンス（実体）を概念的に示している。
【００５２】
ＬＡＮ１０には、ネットワーク魚眼カメラＣａ１を接続することができる。また、ＵＳＢを介して魚眼カメラＣａ２を接続することもできる。
【００５３】
（魚眼画像データの取得）
魚眼画像補正処理を行うには、そのもととなる魚眼画像ファイルを取得する必要がある。カメラから取得する場合には、ＬＡＮ１０上のネットワーク魚眼カメラＣａ１、ＵＳＢ接続の魚眼カメラＣａ２から画像ファイルを取得することができる。さらに、クラウド１２上のネットワーク魚眼カメラ（図示せず）からも画像ファイルを取得することが可能である。また、図１３では図示していないが、近距離無線通信（NFC：Near Field radio Communication）により魚眼カメラから魚眼画像ファイルを取得してもよい。
【００５４】
既に魚眼画像ファイルを格納している、ＬＡＮ１０上の図示しないサーバ、ストレージ、他のＰＣ等から魚眼画像ファイルを取得してもよい。同様に、クラウド１２上のサーバ１３やストレージ１４から魚眼画像ファイルをダウンロードしてもよい。また魚眼画像ファイルを記憶している、ＵＳＢフラッシュメモリ、メモリーカード、光ディスク（ＣＤ（Compact Disk）、ＤＶＤ（Digital Versatile Disc）等）から魚眼画像ファイルを読み込むようにしてもよい。
【００５５】
ＣＰＵ２は、このように取得した魚眼画像ファイルをＨＤＤ５に書き込んで保持する。魚眼画像ファイルＡｐは、魚眼画像補正アプリケーションを起動してから、取得しても構わない。魚眼画像ファイルには、一般的な画像ファイル型式、ビットマップ、Ｊｐｅｇ（Joint Photographic Experts Group）、ＰＮＧ（Portable Network Graphics）、ＴＩＦＦ（Tagged Image File Format）等を適用することができる。魚眼カメラで撮影した動画（ＭＰＥＧ（Moving Picture Experts Group）、ＩＴＵ−Ｔ勧告Ｈ．２６４等）からキャプチャした画像も補正処理の対象とすることができる。なお、魚眼画像はモノクローム、カラーどちらでもよい。
【００５６】
（魚眼画像補正アプリケーション）
次に魚眼補正処理について図１６〜２０を参照しながら説明する。
ユーザが、キーボード７やマウス８を用いて魚眼画像補正アプリ―ケーションＡｐを起動すると、ＣＰＵ２は、魚眼画像補正アプリケーションＡｐをＨＤＤ５より読み出し、ＤＲＡＭ３上に展開する。次に、ユーザは魚眼画像補正の対象となる魚眼画像ファイルを指定する。ＣＰＵ２は、指定された魚眼画像ファイルＨＤＤ５等から読みだし、ＤＲＡＭ３上に画像データとして展開する。魚眼画像補正アプリ―ケーションＡｐが展開された魚眼画像データＩｍａをウィンドウＷｉ１としてディスプレイ９に表示する（ステップ（以下ＳＴという）１）。
【００５７】
図１４は、魚眼画像をウィンドウＷｉ１に表示した状態を示している。図中Ｏは、魚眼レンズの仮想球面の中心を示し、魚眼レンズの光軸が点Ｏを通り紙面垂直方向に伸びている。図３では、Ｘ軸及びＹ軸が点Ｏを通り、点Ｏで直交するように示している。しかし、コンピュータで画像処理する際には、画像の左上の点Ｏ’を原点としてＸ軸、Ｙ軸を設定するのが望ましい。コンピュータのディスプレイ画面上では、Ｙ軸の向きが仮想球面モデルとは逆になる。仮想球面の半径をＲとすると点ＯのＸＹ座標は（Ｒ、Ｒ）となる。なお、Ｘ軸、Ｙ軸はディスプレイ９上には表示する必要はないので破線で示している。
【００５８】
ユーザがウィンドウＷｉ１の魚眼画像上にマウスポインタＭＰを移動すると、マウスポインタＭＰの周囲に正方形の正視画像を切り出す目安となる線Ｌｔが表示される。ユーザがマウス８の左ボタンをクリックすると、ＣＰＵ２はそのときマウスポインタＭＰが指している点を注目点Ｐと認識する（ＳＴ２）。注目点ＰのＸＹ座標を（ｘｔ、ｙｔ）とする。ＣＰＵ２は、座標（ｘｔ、ｙｔ）を中心とした正視画像データＩｍｂ１をＤＲＡＭ３上に生成する。
【００５９】
魚眼画像を撮影したレンズが正射影レンズの場合には、正視画像を生成するときのＸ軸回りの回転角度θ、Ｙ軸回りの角度φには以下の（９）、（１０）の関係が成り立つ。
（ｘｔ−Ｒ）／Ｒ  ＝  sin θ                           ・・・（９）
（ｙｔ−Ｒ）／Ｒ  ＝  sin φ                          ・・・（１０）
（９）式にarcsin関数を適用して、角度θを求める。cosθやtanθはsinθから求めることができるので、計算上は角度θの値自体を必ずしも求める必要はない。（１０）式の角度φについても同様である。
【００６０】
角度θ、φが得られたら（１.６）式を用いて、ＣＰＵ２は注目点Ｐを中心とする正視画像データＩｍｂ１をＤＲＡＭ３上に生成し、図１５（ａ）に示すようにウィンドウＷｉ２により第１の正視画像としてディスプレイ９に表示する（ＳＴ３）。このウィンドウＷ２で表示される第１の正視画像の原点も左上の角とされ、Ｕ軸、Ｖ軸が破線で示すように設定される。Ｕ軸、Ｖ軸もディスプレイ９には表示されない。正視画像上の座標（ｕ、ｖ）に（１.６）式を適用し、魚眼画像における座標（ｘ、ｙ）を逆算する。
【００６１】
なお、ＵＶ座標系の点（ｕ、ｖ）から（１.６）式を用いてＸＹ座標系の点（ｘ，ｙ）を逆算して求めるが、ｕ，ｖは整数であっても、ｘ、ｙは整数とならないことが多い。すなわち、座標点（ｘ、ｙ）は魚眼画像中の画素の位置とは一致することが少ないこととなる。そこで、ＣＰＵ２は座標点（ｘ、ｙ）近傍の複数の画素の値を、座標点（ｘ、ｙ）との距離に基づき加重平均をとるなどして座標点（ｕ，ｖ）の画素の値を決定する。また、座標点（ｘ，ｙ）が、イメージサークル外に位置した場合には、画素の値として黒が設定される。
【００６２】
注目点の位置には物体Ｄの像ｄ１が表示されているが、この対象物を異なる角度から見たい場合には、ユーザは方向キー７１を操作して視線軸を移動する。まず、ＣＰＵ２はＵ軸回りの回転角度α、Ｖ軸回りの回転角度βを共に０と設定する（ＳＴ４）。次に、ＣＰＵ２は、方向キー７１が押されたかどうかを判定する（ＳＴ５）。いずれかの方向キーが押された場合には、ＣＰＵ２はＳＴ６の判定に分岐する。ＳＴ６では、ＣＰＵ２は押された方向キーがいずれの方向キーかを判別する。
【００６３】
ＳＴ６で押された方向キーが上方向キー７ａであった場合には、ＣＰＵ２はＳＴ７の処理に分岐し、角度αから角度Δαを減算する。押された方向キーが右方向キーであった場合には、ＣＰＵ２はＳＴ８の処理に分岐し、角度βに角度Δβを減算する。角度Δα、Δβは、一回の方向キーの操作での視線軸の回転角度であり、適切な正の値に設定される。
【００６４】
ＳＴ６の判定で押された方向キーが左方向キー７ｄであった場合には、ＣＰＵ２はＳＴ９に分岐し、角度βから角度Δβを減算する。押された方向キーが下方向キー７ｂであった場合にはＳＴ１０に分岐し、角度αに角度Δαを加算する。ＳＴ７、ＳＴ８、ＳＴ９、ＳＴ１０のいずれかの処理の後、ＣＰＵ２は、図１７のＳＴ１１の処理に進む。
【００６５】
視点移動の処理は、前述のように、視線軸を回転した正視画像、平行移動量を修正した正視画像、画像の拡大を補正した正視画像と、順に正視画像を生成してもよい。しかし、コンピュータの計算処理においては、魚眼画像から視線軸移動、平行移動量の補正、スケーリング倍率の補正がなされた正視画像を直接生成することができる。
【００６６】
まず、スケーリング倍率の補正について図１９を参照しながら説明する。図１９のＵＶ平面上の破線で囲まれた正方形の図形は正視画像を描画しようとする領域Ａｒである。以下、説明を簡単にするため、座標（ｕ，ｖ）のｕ，ｖはそれぞれ整数であるとする。また、領域Ａｒの一辺はＮ（整数）であるとする。
【００６７】
領域Ａｒの中心点をＰｃとし、その座標を（ｕ０，ｖ０）とする。領域内の任意の点Ｐ６の座標を（ｕ，ｖ）としたとき、スケーリング倍率の補正を考慮しなければ、（ｕ，ｖ）に（６）式を適用して、（ｕ，ｖ）に対応する魚眼画像の座標（ｘ、ｙ）を求めればよい。拡大の補正を考慮する場合には、ＰｃとＰ６を結ぶ直線を延長した線上にＰ７を設定する。ＰｃとＰ６との距離をＬ６、ＰｃとＰ７の距離をＬ７とした場合に、以下の（１２）式の関係を満たすようにＰ７を設定する。
Ｌ７  ＝  Ｓｃ×Ｌ６                        ・・・・（１２）
【００６８】
座標ｕ’とｕとの間には、（１３．１）式に示す関係がある。同様に座標ｖ’とｖとの間には、（１３．２）式に示す関係がある。この２式からそれぞれｕ’、ｖ’を求める式が（１４．１）、（１４．２）で表される。点Ｐ７の座標を（ｕ’，ｖ’）とし、座標（ｕ’，ｖ’）に対応する魚眼画像の座標（ｘ，ｙ）に対応する画素値を、座標（ｕ，ｖ）にマッピングする。この処理を、領域Ａｒ内の全ての座標点に施すことにより、拡大を補正した正視画像が得られる。
【００６９】
また、（６）式に平行移動量Δｕ，Δｖを考慮した行列式は図２０の（６．１）式ようになる。（６．１）式ではｕ，ｖにかえて、ｕ’，ｖ’が使われている。ｕ’，ｖ’とｕ，ｖとの関係は、前述のようにそれぞれ（１４．１）式、（１４．２）式の関係がある。また、Δｕは図８（ｂ）の（４）式、Δｖは図９（ｂ）の（７）式で求めることができる。ＣＰＵ２は、平行移動量Δｕ，Δｖ及びスケーリング倍率Ｓｃを算出し、ＤＲＡＭ３に保持する（ＳＴ１１）。
【００７０】
次に、ＣＰＵ２は、ｕ及びｖをそれぞれ０とする（ＳＴ１２）。ＣＰＵ２は、ｕ、ｖそれぞれに（１４．１）式、（１４．２）式を適用してｕ’、ｖ’を算出する（ＳＴ１３）。さらに、ＣＰＵ２は、算出されたｕ’、ｖ’に図２０の（６．１）式を適用して、ｘ、ｙを求める（ＳＴ１４）。ＣＰＵ２は、魚眼画像データの座標（ｘ、ｙ）に対応する画素値を求め、正視画像データの座標（ｕ，ｖ）にマッピングする（ＳＴ１５）。上述のように、ｘ、ｙは整数とならないことが多い、すなわち魚眼画像中の画素の位置とは一致することは少ないため、座標（ｘ、ｙ）近傍の画素の画素値からマッピングする画素値を算出する。
【００７１】
ＣＰＵ２は、ＳＴ１６に進みｕがＮに等しいかどうか判定する。ＳＴ１６の判定がＮＯの場合には、ＣＰＵ２はＳＴ１８に進みｕに１を加え（ｕのインクリメント）し、ＳＴ１３の処理に戻る。一方、ＳＴ１６の判定がＹＥＳなった場合、すなわちＵ方向の１ラインの処理が終了した場合には、ＣＰＵ２はＳＴ１７に分岐する。
【００７２】
ＳＴ１７では、ＣＰＵ２がＮに等しいかどうか判定する。ＳＴ１７の判定がＮＯの場合には、ＣＰＵ２はＳＴ１９に分岐してｖに１を加え（ｖのインクリメント）、ＳＴ１３の処理に戻る。ＳＴ１７の判定がＹＥＳとなった場合には、領域Ａｒ内のすべての座標（ｕ，ｖ）についてマッピングが終わり、ＤＲＡＭ３上に視線軸を移動した正視画像データＩｍｂ２の生成が完了したこととなる。ＣＰＵ２は、正視画像データＩｍｂ２をＤＲＡＭ３より読み出し、図１５（ｂ）に示すように第２の正視画像としてウィンドウＷｉ２に表示する（ＳＴ２０）。
【００７３】
この実施例では、正視画像データＩｍｂ２は、ＤＲＡＭ３上の正視画像データＩｍｂ１に上書きされる。また、ウィンドウＷｉ２に表示されていた第１の正視画像は、第２の正視画像に上書きされる。なお、第１の正視画像データＩｍｂ１とは、ＤＲＡＭ３の別の領域に第２の正視画像データＩｍｂ２を生成し、第２の正視画像は別のウィンドゥで表示することもできる。
【００７４】
ＳＴ２０の処理の後、ＣＰＵ２は再び方向キー７１が押されたか否かを判定する（図１８、ＳＴ２１）。ＳＴ２１の判定がＹＥＳの場合には、ＣＰＵ２はＳＴ６の処理に戻る。ユーザはウィンドウＷｉ２に表示された画像をみて、さらに方向キー７１を操作することができる。ユーザが見たい画像が得られるまで、ＣＰＵ２はＳＴ６からＳＴ２０の処理を繰り返す。ＣＰＵ２は、方向キーの操作を繰り返して得られた正視画像データを新しい第２の正視画像としてウィンドウＷｉ２に表示する。
【００７５】
この実施例では、新しく生成された正視画像データＩｍｂ２は、ＤＲＡＭ３上で前の正視画像データに上書きされる。なお、新しく生成された正視画像データを前の画像データとはＤＲＡＭ３上で別の領域に書き込み、複数の第２の正視画像をディスプレイに並べて表示することもできる。
【００７６】
また、ユーザはウィンドウＷｉ２に表示された画像を拡大、又は縮小して表示させることもできる。例えば、キーボードのファンクションキーＦｎを拡大、ファクションキーＦｍを縮小に割り当てておく。ＣＰＵ２がＦｎ，Ｆｍいずれかのファンクションキーが操作されたことを検知した場合には（図１８、ＳＴ２２、ＹＥＳ）、操作されたファンクションキーに応じて、拡大又は縮小した画像をウィンドウＷｉ２に表示する（ＳＴ２３）。
【００７７】
ＳＴ２２判定がＮＯの場合には、ＣＰＵ２はＳＴ２４の判定に分岐する。ＳＴ２４では、ＣＰＵ２はユーザがファイルの書き出しを指示したかどうかを判定する。ＳＴ２４の判定がＮＯの場合には、ＣＰＵ２はＳＴ２６の判定に分岐する。ＳＴ２４の判定がＹＥＳの場合には、ＣＰＵ２はＳＴ２５の判定に分岐する。ＳＴ２５では、ＣＰＵ２はウィンドウＷｉ２に表示されている正視画像をユーザが選択したファイル形式でＨＤＤ５等に書き出す。また、ＣＰＵ２は、ウィンドウＷｉ２に表示されている画像を図示しないプリンタに転送し印刷することもできる。
【００７８】
ＳＴ２４の判定がＮＯの場合、又はＳＴ２５の処理が終了した場合、ＣＰＵ２はＳＴ２６に進み、ユーザが魚眼画像補正アプリ―ケーションＡｐの終了を指示したかどうか判定する。この判定がＮＯの場合には、ＣＰＵ２はＳＴ２１の判定に戻る。ＳＴ２６の判定がＹＥＳの場合には、ＣＰＵ２は、ウィンドウＷｉ１，Ｗｉ２を閉じ魚眼画像補正アプリ―ケーションＡｐを終了する（ＳＴ２７）。
【００７９】
ＳＴ７からＳＴ１０で、視線軸を回転する角度のピッチをΔα、Δβとしたが、実際には細かく視線軸を回転して微調節したい場合もある。そこで、微調整モードを設け、微調整モードにおいてはピッチが例えばΔα／１０、Δβ／１０で視線軸を回転することができるようにすると便利である。ユーザが特定のキーを操作することにより、微調整モードへの移行、又は微調整モードの解除をする。あるいは、シフトキーを押しながら方向キー７１を押した場合には、ピッチがΔα／１０、Δβ／１０となるよう構成してもよい。
【００８０】
（他の魚眼レンズ方式に対する考察）
上記実施例では、魚眼レンズが正射影方式である場合について説明した。魚眼レンズには、正射影方式の他に、等距離射影方式、立体射影方式、等立体角射影方式が知られている。ここでは、図２１を参照しながら、等距離射影（Equidistant Projection）方式について説明する。等距離射影方式は、入射光Ｌｅが光軸Ａｘとなす角度ψと、入射光Ｌｅが平面Ｈに到達する点Ａｅと平面Ｈの原点Ｏｅとの距離ｒｅが（１５）式で示す比例関係にある射影方式である。ここで角度ψの単位はラジアンである。
ｒｅ  ＝  Ｒ×ψ                                    ・・・・（１５）
【００８１】
正射影方式での魚眼画像中の点Ａの座標（ｘ、ｙ）を等距離射影方式での魚眼画像中の座標（ｘｅ，ｙｅ）への変換を考察する。正射影方式では座標Ａと中心点Ｏとの距離ｒは（０）式によりＲsinψであるので、距離ｒｅと距離ｒとの関係は、
ｒｅ／ｒ  ＝  ψ／sin ψ                              ・・・・（１６）
で表せる。等距離射影の座標（ｘｅ，ｙｅ）はそれぞれ以下の（１７．１）（１７．２）式で表すことができる。
ｘｅ＝（ψ／sin ψ）ｘ                              ・・・・（１７．１）
ｙｅ＝（ψ／sin ψ）ｙ                              ・・・・（１７．２）
【００８２】
点Ｏと点Ａとの距離ｒは
ｒ  ＝  ＳＱＲＴ（（ｘ）＾２＋（ｙ）＾２）                    ・・・・（１８）
であるので、（０）式より
sin ψ  ＝  ｒ／Ｒ  
＝（ＳＱＲＴ（（ｘ）＾２＋（ｙ）＾２）  ）／Ｒ      ・・・・（１９）
ψ  =  arcsin（ＳＱＲＴ（（ｘ）＾２＋（ｙ）＾２）  ）／Ｒ  ・・・（１９．１）
【００８３】
正射影方式で中心点Oからの距離が最大となる場合（ψ＝π／２）では、距離の最大値ｒmaxは、
ｒmax  ＝  Ｒ                                ・・・・（２０．１）
等距離射影方式では中心点Ｏｅからの距離の最大値ｒｅmax（ψ＝π／２）は、
ｒｅmax  ＝  Ｒ×π／２                      ・・・・（２０．２）
となり、変換後の表示倍率がπ／２となるため、Ｒ×２／πに縮小した仮想球面として視線軸を回転することにより、魚眼画像と同じ倍率で見える正視画像を生成することができる。
【００８４】
なお、前記魚眼画像中の注目点の座標が指定されたとき、座標（ｘ、ｙ）の値から角度θ、φの値は下記の（１５．１）（１５．２）式から三角関数を用いることなく算出することができる。角度θ、φの単位はラジアンである。
θ  ＝  ｘ／Ｒ                                  ・・・・（１５．１）
φ  ＝  ｙ／Ｒ                                  ・・・・（１５．２）
【００８５】
立体射影方式(Stereographic Projection)の場合には、詳細は省略するが、魚眼画像の中心からの距離ｒｓは、
ｒｓ  ＝  ２Ｒ×tan（ψ／２）                             ・・・・（２１）
となり、ｒｓの最大値ｒｓmaxは２Ｒとなるため、１／２に縮小した仮想球面として視線軸を回転することにより、魚眼画像と同じ倍率で見える正視画像を生成することができる。
【００８６】
等立体角射影(Equisolid Angle Projection)の場合には、魚眼画像の中心からの距離ｒeaは、
ｒea=２Ｒ×sin（ψ／２）                      ・・・・（２２）
となり、ｒeaの最大値ｒea maxはＳＱＲＴ（２）となるため、１／ＳＱＲＴ（２）に縮小した仮想球面として視線軸を回転することにより、魚眼画像と同じ倍率で見える正視画像を生成することができる。
【００８７】
（１８０°以上の画角）
上述の等距離射影方式、立体射影方式及び等立体角射影方式の場合には、画角が１８０°を超える魚眼レンズが存在する。このような画角が１８０°を超える魚眼レンズにおいて、画角が１８０°を越える部分の扱いについて、等距離射影方式について図２２を参照しながら説明する。
【００８８】
図２２（ａ）において破線の円周Ｄ１は画角が１８０°の境界を示している。実線の円周Ｄ２は実際に得られる魚眼画像のイメージサークルの境界を示している。二点鎖線で示す円Ｄ３は、画角が３６０°となる位置を示している。この円周Ｄ３は実際には点であるが画角１８０°の境界で折り返して仮想的に円周として示している。
【００８９】
画角が１８０°を超えて撮影された点の座標は円Ｄ１と円Ｄ２との間のリング状の領域に位置する。この範囲の点Ｅ’の座標（ｘ’, ｙ’）を求めるためには、まず点Ｅ’と原点Ｏを結ぶ直線Ｌ８を想定する。直線Ｌ８上にあり、画角１８０°の円Ｄ１の円周と対称な点Ｅ（ｘ、ｙ）を想定する。直線Ｌ８が円周Ｄ１と交わる点をＥｍとすると、点Ｅｍと点Ｅ’との距離と、点Ｅｍと点Ｅとの距離は等しくなる。
【００９０】
点Ｅと点Ｏとの距離ｄｅは、図２２（ｂ）中の（２３）式で表せる。一方、距離ｄｅ’ は（２４）式で表せる。座標ｘ’ と座標ｘとは原点Ｏからの距離に比例する関係にあるので、座標ｘ’ は（２５）式で表せる。同様に座標ｙ’ は（２６）式で表すことができる。
【００９１】
等立体角射影方式の場合には（２２）式で示されるようにsin（ψ/２）を含んでいるので、画角が０〜π／２とπ／２〜πとの間で画素密度が対称となり、等距離射影方式と同様の補正を適用することができる。
【００９２】
立体角射影方式の場合には、等距離射影方式の座標点から計算することができる。等距離射影の座標の中心からの距離をｄ１、立体角射影の座標の中心からの距離をｄ２とすると、以下の（２７）式の関係が知られている。
ｄ２／ｄ１  ＝  tan（（π／４）・ｄ１）／ｄ１            ・・・・（２７）
この式を用いて、立体角射影の座標点を計算することができる。
【００９３】
（システム構成の他の変形例）
（１）上記実施例では、パーソナルコンピュータＰＣを用いた例を説明しているが、いわゆるタブレットやスマートフォンでもこの発明を実施することが可能である。ダブレットやスマートにはカメラが内蔵されているが、市販のレンズキットを装着することにより魚眼画像を撮影することもできる。撮影した魚眼画像について、この発明の魚眼画像補正を行うことができる。そのときのユーザインタフェースとしては、表示部上に設けられたタッチパネルを利用し、表示されたボタンに触れることなどによって操作することが可能である。
【００９４】
（２）ＷＥＢサーバに、この発明の魚眼画像補正アプリケーションを実装する。クライアントがこのＷＥＢサーバにアクセスすると、ブラウザのウェブＵＩにより、魚眼画像ファイルの選択、魚眼画像の注目点の指定、視線軸移動の操作を行うことができる。魚眼画像、正視画像は、ブラウザのウィンドウ内に表示され、生成された正視画像はユーザの選択したローケーションに保存することができる。
【００９５】
（付記事項）
上記実施形態より、さらに以下の技術的思想が抽出される。
【００９６】
（１）魚眼レンズを用いて撮影された魚眼画像を、コンピュータを用いて補正する方法であって、
魚眼画像データをメモリに展開するステップと、
前記メモリ上に展開された魚眼画像データをディスプレイに表示するステップと、
ユーザインタフェースを介して、ディスプレイに表示された魚眼画像内の注目点の指定を受け付けるステップと、
前記注目点を中心となるように視線軸を回転させ、回転させた視線軸に直交し、半径Ｒの仮想球面に接する投影面に魚眼画像を投影して第１の正視画像データを前記メモリ上に生成するステップと、
第１の正視画像データを前記ディスプレイに表示するステップと、
前記ユーザインタフェースからの入力に基づき、第１の正視画像の視線軸を回転させた第１の中間正視画像データを生成するステップと、
前記視線軸の回転に伴い発生した注目点と第１の中間正視画像の中心点との平行移動量を補正し、注目点を中心とした第２の中間正視画像データを生成するステップと、
第２の中間正視画像データの前記視線軸の回転に伴い発生した画像のスケーリング倍率を補正した第２の正視画像データをメモリ上に生成するステップと、
第２の正視画像データを前記ディスプレイに表示するステップを備えた魚眼画像補正方法。
【００９７】
（２）ユーザインタフェースからの入力に基づき、第２の正視画像の倍率を変換して表示する魚眼画像補正方法。
【符号の説明】
【００９８】
２：ＣＰＵ（プロセッサ）
３：ＤＲＡＭ（メモリ）
４：チップセット
４ｃ：ビデオインタフェース
７：キーボード（ユーザインタフェース）
７１：方向キー
７ａ：上方向キー
７ｂ：下方向キー
７ｃ：右方向キー
７ｄ：左方向キー
８：マウス（ユーザインタフェース）
９：ディスプレイ
Ｃａ１：ネットワーク魚眼カメラ
Ｃａ２：ＵＳＢ魚眼カメラ
ＭＰ：マウスポインタ
ＰＬ０、ＰＬ０’、ＰＬ１、ＰＬ２、ＰＬ３、ＰＬ４、ＰＬ５：投影面
Ｒ：仮想球面の半径
Ｓ：仮想球面
Ｓｃ：スケーリング倍率
Ｗｉ１：（魚眼画像表示用の）ウィンドウ
Ｗｉ２：（正視画像表示用の）ウィンドウ
α、θ：Ｘ軸回りの回転角
β、φ：Ｙ軸回りの回転角
Δｕ：Ｕ軸方向の平行移動量
Δｖ：Ｖ軸方向の平行移動量
Ａｐ：魚眼画像補正アプリケーション
Ｉｍａ：魚眼画像データ
Ｉｍｂ１：第１の正視画像データ
Ｉｍｂ２：第２の正視画像データ
【図１】
2018206205.tif 000003
【図２】
2018206205.tif 000004
【図３】
2018206205.tif 000005
【図４】
2018206205.tif 000006
【図５】
2018206205.tif 000007
【図６】
2018206205.tif 000008
【図７】
2018206205.tif 000009
【図８】
2018206205.tif 000010
【図９】
2018206205.tif 000011
【図１０】
2018206205.tif 000012
【図１１】
2018206205.tif 000013
【図１２】
2018206205.tif 000014
【図１３】
2018206205.tif 000015
【図１４】
2018206205.tif 000016
【図１５】
2018206205.tif 000017
【図１６】
2018206205.tif 000018
【図１７】
2018206205.tif 000019
【図１８】
2018206205.tif 000020
【図１９】
2018206205.tif 000021
【図２０】
2018206205.tif 000022
【図２１】
2018206205.tif 000023
【図２２】
2018206205.tif 000024