魚眼レンズとは

魚眼レンズは球状の画面に投影することを原理とするレンズですが、再生側の環境として球面のモニターというものは普及しておらず、またカメラの撮像素子も平面形状をしていることから、一旦球面で受けたものを平面に変換したものを最終出力とするものを魚眼レンズと呼んでいると言って差し支えないでしょう。

魚眼レンズを使うと、透視投影では発生しえない特殊な像が得られます。 最大の特徴は、直線が曲がってしまうことです。 特に正射影と呼ばれる射影方式では、視心から等角度にある平行な2直線が正確な楕円を描くという興味深い特徴があります。 また射影方式に関係なく、視心を通る直線だけは、いかなる向きであっても曲がらないという特性も押さえておかなければなりません。 単なる透視図を描くだけであれば、魚眼レンズの知識は不要ですが、球体に映り込む像などを描く場合には、魚眼レンズに類似した表現が必要です。

下図は魚眼レンズによって得られる像のサンプルです。左の平面イメージをカメラと正対する向きに置いたとすると、透視投影(普通のレンズ)では左の像と同じものが得られますが、魚眼レンズでは右の像が得られます。 右図の外周の円は180°視円錐を表しています。円の外側は投影範囲外です。視心は画像の中央にあります。


投影対象の平面イメージ魚眼レンズ(正射影、全周魚眼)の像
投影対象の平面イメージ魚眼レンズ(正射影、全周魚眼)の像

魚眼レンズの射影方式

PAGE 1/x
魚眼レンズの射影方式

[Click] 図中の数式について

図中の数式は画面上での投影位置を表しています。球の半径をfとし、中心を原点としたときの投影位置がrです。画面の両端は±fになります。 なお、投影位置の式が2つ描かれている場合がありますが、下式が一般的な形式のもの、上式が図に合わせたものです。 図では各方式の比較がし易いようθ=90°のときにr=fになるようなスケールで描かれています。 一般形式で表したい場合は北極に接する位置にPPを作図する必要があります。 数式上ではθの単位はラジアンです。 数式に関するより詳しい情報は、数学の章で扱っています。


魚眼レンズの射影方式(まとめ)

各射影方式による見え方の違いを以下にまとめます。外周の円は180°視円錐です。外周に灰色の空白部がありますが、これは被写体が十分な大きさを持っていなかったためであり、本来は180°視円錐の全体に像が写ります。 視円錐は10°ピッチで180°まで描かれています。(対比のため、中心射影も掲載しています。中心射影のみ最外周は170°視円錐です)


射影方式イメージ視円錐
立体射影
(魚眼)
魚眼レンズ(立体射影)の像魚眼レンズ(立体射影)の180°視円錐
等距離射影
(魚眼)
魚眼レンズ(等距離射影)の像魚眼レンズ(等距離射影)の180°視円錐
等立体角射影
(魚眼)
魚眼レンズ(等立体角射影)の像魚眼レンズ(等立体角射影)の180°視円錐
正射影
(魚眼)
魚眼レンズ(正射影)の像魚眼レンズ(正射影)の180°視円錐
中心射影
(透視図)
通常レンズ(中心射影)の像通常レンズ(中心射影)の170°視円錐

[Click] 透視図は四角?

上図を見ると、中心射影(透視図)だけが四角形の像をしており、魚眼はすべて円形になっていることが確認できます。 また一般的な写真に映る像も、普通のカメラは四角で、魚眼は(全周魚眼であれば)円です。 この事実はときに透視図上の四角形が魚眼での円に対応するという誤解を与えがちですが、ある視円錐の内側だけを考えるのであれば、どちらの方式であっても像は円形です。 普通のカメラは四角形の像しか作りませんが、レンズが捉えている像は円形なため、中心射影かつ全周という方式があっても全くおかしくありません。(なぜ無いのかは筆者も分かりません)。 このあと説明する両者の相互変換も、透視図は四角という錯覚を捨て、円形同士で変換を掛けるという考えで臨む必要があります。


透視図から魚眼パースへの変換方法

ここではソフトウェアを使って透視図を魚眼パースに変換する際の考え方について説明します。 直接的に魚眼パースのかかった絵を作図する方法については応用 - 魚眼パースで解説しています。

魚眼パースは実際の作画の難易度とは裏腹に理屈だけなら至極簡単です。 なぜなら視円錐のピッチ以外に、透視図と魚眼パースの相違点は無いからです。 簡単に言えば、下図の同じ色の部分を一方から他方にコピーするだけです。 ただし両者のリング幅は異なるので、適宜拡大または縮小を掛けなければなりません。

透視図の視円錐魚眼パース(等距離射影)の視円錐
透視図(中心射影)の170°視円錐 魚眼レンズ(等距離射影)の180°視円錐
※いずれも10度ピッチですが、魚眼は180°まで、透視図は170°まで描いてあります。

上記はあくまでも概念的な説明であり、厳密にはリング幅は10°刻みではなく、無限に細かい角度で刻まないといけません。 また拡大縮小も極座標で表したときの半径方向のみの話なので、一般的なXY方向への拡大縮小では対応できません。 精度を甘くしても、手作業だけでこれらの作業を行うのはかなり厳しいので、まずはソフトウェアでの変換を試みた方が良いでしょう。 その上で、手作業での微調整をするのが現実的と言えます。

幸いにも魚眼と透視図の相互変換は(解像度を無視すれば)ソフト的に行うことができます。もちろん両図の視点(SP)は一致します。 問題は視円錐の角度です。魚眼は180°視円錐を画像全体とすることが一般的ですが、透視図における180°視円錐は無限大の大きさに相当するため、これを画像ファイルとして用意することは不可能です。 よって、用意した画像が何度の視円錐に相当するかはソフトに対して教えてあげなければなりません。(あるいはソフトウェアの規格に従う必要があります)


透視図と魚眼の相互変換
※Spherical Picture Surfaceは球状の画面を指します。筆者による造語です。

[Click] ソフト的に変換が可能とは?

魚眼と透視図はソフト的に相互変換が可能ですが、対比として変換が不可能なものとはどのようなものを指すのかを示しておきたいと思います。 変換不能な代表例は、カメラの視点を変えることです。ある透視図を元に観測者の立ち位置を変えた透視図は絶対に作れません。 仮にこれを行うとすれば、3次元空間に対する完全なデータが必要です。これに対して同一視点における魚眼と透視図の相互変換は3Dデータがなくとも可能なのです。


[Click] 変換ソフトの作り方

変換ソフトの実装は簡単で、コンパクトにまとめれば数十行のコードで実現できます。本ページに掲載されている画像も、(Blenderのサンプルを除けば)すべて自作変換ソフトによるものです。 簡単に言えば、両図を視心を原点とする極座標で表したとき、半径の値を所定の計算式で変換するだけです。 例えば中心射影(透視図)から等距離射影(魚眼)に変換する場合、各々の半径をrおよびRとし、半径値を0~1の範囲内で正規化したとすると、

r=tan(R * pi / 2) / tan(85 * pi / 180)
で変換できます。piは円周率です。tanの引数はラジアンで取るものとします。 ここでは透視図側の視円錐を170°上限としています。定数85は170°の半画角を意味します。上限を変更する場合は、この値を変える必要があります。

下図は90°視円錐相当である透視図を魚眼に変換したものです。変換前と変換後でほとんど差異がありませんが、 それもそのはずで、魚眼の効果はかなりの広角でなければ明瞭には現れません。望遠の魚眼レンズが商品として存在しないのは、そのような理由によるものです。

変換前(透視図・中心射影)変換後(魚眼・等距離射影)
変換前(透視図・中心射影) 変換後(魚眼・等距離射影)
変換ソフトはツールの章に置いてありますので、ご自由にお使いください。


[Click] フリーソフトによる変換例

透視図はその原理上、絵が想定している画角と一致するようカメラ位置を調整すれば、(あくまでのその視点においてのみですが)3Dモデルの完全な代替になります。 よって3Dソフトのレンダリング機能を使って、透視図を魚眼に変換することができます。 下図はBlenderというソフトで変換したサンプルです。自作ソフトと同じ結果になっていることが確認できます。

Blender(魚眼・等距離射影)自作ソフト(魚眼・等距離射影)
Blender(魚眼・等距離射影) 自作ソフト(魚眼・等距離射影)
※自作の線がガタついているのは、補間計算を入れていない(ニアレストネイバー方式な)ためです。
※Blenderによる変換の具体的手順については「Blenderで透視図から魚眼への変換」を参考にしてください。



前のページ 次のページ