Hugin チュートリアル — 360度合成されたパノラマを作成する

このチュートリアルでは次期リリースである Hugin 0.7.0 の機能を紹介します。おそらく最終的なリリースでは外観やレイアウトがわずかに異なるでしょうが、基本となる概念は同じままです。

Enfuse はブラケット撮影による露出をマージして各画像のうち最適な露出の画素からなる合成画像を作成するためのツールです。これは360度パノラマを作成するときに特に役立ちます。なぜなら通常の結果では露出過多あるいは露出不足の領域が両方同時にできてしまうことが多いためです。Hugin 0.7.0 には Enfuse を使った露出ブレンドによる画像の作成に完全に対応しています。

最初のステップは、パノラマを撮影することです。筆者は安価な Peleng 製の魚眼レンズを Nikon D100 に装着して使っています。また、三脚やパノラマ雲台を持ち運ぶのは手間なのでここで説明されているテクニックを使って何でも手持ち撮影することが多いです。

HDR(ハイダイナミックレンジ画像)を作成するのと過程はよく似ていますが、それとは違って Enfuse による露出合成では手持ち撮影による視差が原因で起こる微妙なずれは許容されることに注目してください。

ほとんどのデジタル一眼レフカメラにはブラケット撮影の機能があります。筆者は、まず「標準」露出のコマ、次に -2 EV の暗いコマ、最後に +2 EV の明るいコマを撮影するように設定しました。このカメラでの場合、1/60、1/250、1/15秒で撮影する結果になりました。

以下に結果を示します。ある方向に向けてブラケット撮影し、次に別の方向に向けてブラケット撮影し、…という撮り方をしたことが分かるでしょう。

ブラケット撮影された元の写真

まず最初に、 Hugin を空のプロジェクトで起動します。筆者は Fedora 8 Linux マシン上で作業していますが、Windows や OS X 上でも過程は同じになるはずです。

Hugin を開く

画像を登録…をクリックしてプロジェクトで使うすべての画像を選びます。ファイルの順序は重要ではありません。

写真を選択する

Peleng レンズは完全マニュアルなので、Hugin で写真形状の決定に使える EXIFデータがありません。しかし、レンズが円形魚眼レンズで 、焦点距離が 8 mm (側面に記載あり)で、Nikon D100 のセンサ換算係数が1.5 倍であることは分かっています。これはスタート地点としては十分な情報でしょう。Hugin ではこれらを後から調整することができます。

ヒント:実際には筆者はこのレンズを初期調整しており、調整後の設定値をレンズデータを読み込み…機能で適用しています。しかし、この例のような単純なパノラマには全く必要ない作業です。

カメラとレンズのデータを入力する

次のステップは魚眼サークルが写真のどこにあるかを Hugin に示すことです。切り抜きタブに移り、すべての写真を一度に選択し、画像領域の外側の黒い部分を除くために円を広げます。

注意点として、この Peleng では通常は写真の下の方に汚いフレアが写るため、筆者はそれらも除けるように中心を外した円を描きました。そのためには切り抜き範囲を広げる前にAlways center Crop on d,eをオフにしておきます。

円形の切り抜きを設定する

残念なことに autopano-sift で使われている SIFT アルゴリズムは米国では特許で保護されているため、このプロジェクトでは手作業でコントロールポイントを作って配置しました(それ以外の方法として、同じようなツールがインストールされているならばアシスタントタブの配置…ボタンをクリックすることで以降のセクションを飛ばすこともできます)。

筆者が使用した位置合わせ手法は、ブラケット撮影された写真3枚ずつをスタックとして配置し、4つのスタックのそれぞれから1枚だけ写真を選び、それらを通常のパノラマと同じように配置する、というものです。

したがって各スタックについて、基準となる 0 EV の画像はまず +2 EV の画像と繋げられてから -2 EV の画像に繋げられます。

ブラケット撮影のためのコントロールポイント

いったん4つのスタックのそれぞれについて処理が完了すれば、あとはコントロールポイントを 0 EV 画像4枚について設定するだけでよく、通常のパノラマ配置のテクニックで行えます。

ヒント:ほとんどの場合、魚眼画像同士のコントロールポイントでは回転による変化が大きいため、自動的に微調整が効くようにしたい場合は ファイル→環境設定→コントロールポイントの編集→回転もさせて検索 を有効にしておきます。

パノラマ作成のためのコントロールポイント

次に行うのは、アシスタントタブに戻って配置…をクリックし、Hugin が画像を配置しパノラマを水平にし測光学的パラメータを推定し終えるのを待つことです。

画像を配置する

ここまできたらプレビューウィンドウを開いて出力をHDRに設定します。これにより全ての画像が正しい相対明度で表示されます。ただし、トーンマッピングが対数スケールなので何もかもが白っぽくなって見えます。

プレビューウィンドウ

パノラマはややガタガタです。解決策は、鉛直な特徴を画像内で見つけて鉛直コントロールポイントをコントロールポイントタブで設定することです。

鉛直コントロールポイント

新しい鉛直コントロールポイントを有効にするため、プロジェクトの最適化を再度行う必要があります。そのためには最適化タブに移り、カスタマイズを選んだ上で回転角-Roll (r)横位置-Pitch (p)水平画角 (v)たる型歪み (b)X方向のずれ (d)方向のずれ (e)を選択します。次に最適化を実行をクリックします。

註:この例では歪み (c)も最適化していますが、これはいつも必要なわけではありません。

最適化処理のカスタマイズ

パノラマはもうガタガタではありません。

プレビューウィンドウ

最後にステッチャータブに移って露出ブレンドの下のブレンドされたパノラマ (enfuse)を選んでおくと、露出合成された出力画像が得られます。筆者はブレンドされた露出レイヤーも選んでおきました。これでブラケット撮影された露出ごとに別々のパノラマとして後で見ることができます。

スティッチングタブ

次に、眺めながら待ちます。やかんを火に掛けるいい機会ですよ。最初に Nona が画像を再配置します。

Nona による再配置

次に Enfuse がそれらの画像を方向ごとの4つのスタックに合成します。

Enfuse による露出合成

そして最後に Enblend が最終的な1枚のパノラマにブレンドします。

Enblend によるブレンド

すべて完了です。この過程で作成される様々なパノラマは一見の価値があります。

ひとつめの 0EV の「基準」パノラマは、中心の露出なのでほぼ大丈夫ですが、しかしいくつかは問題があります。地面、タクシー、建物の一部は大幅に露出不足ですし、空の一部は露出過多です。

0EV のパノラマ

ふたつめの -2EV の「暗い」パノラマは、ほぼ全面的に露出不足ですが、ひとつめのパノラマで露出過多だった空の領域が描写できています。

-2 EV のパノラマ

みっつめの +2 EV の「明るい」パノラマでは、空やいくつかの建物は大幅に露出過多ですが、0 EV「基準」パノラマでは露出不足だった部分がしっかり描写できています。

+2 EV のパノラマ

最後は「露出合成された」パノラマそのもので、全3種類の露出からちょうどいい部分を選んだものです。

露出合成されたパノラマ

正距円筒図法のパノラマは見づらいので、 Quicktime QTVR パノラマに変換する必要があります。

QTVR に変換する

…そして freepv などの QTVR ビュワーで開きます。

QTVR を FreePVで開く

FreePV では QTVR パノラマをきれいに OpenGL で全画面表示できます。

FreePV による表示

Enfuse と Enblend の問題のひとつは正距円筒図法の画像で天頂と天底をどう扱えば良いか分からない点で、その結果としてできる不自然な部分は天頂の渦(zenith vortex)と呼ばれます。

天頂の渦

360 °パノラマを表示するもう一つの投影法は平射方位図法です。正距円筒図法で前もって合成された画像を Hugin に読み込み、投影法平射方位を設定することで作成できます。

平射方位バージョン

最後に、これが生成された QTVR 動画バージョンです。

このシーンについて

Sheffield の Fitzalan Square にて撮影。黒タクシー、2階建てバス、歩道への駐車、全体的な憂鬱な雰囲気から、これがイギリスのどこかだと分かるでしょう。

2008年1月 — Bruno Postle.