無料オープンソースの静止画像カメラマッチングツール「fSpy」と Blender用インポートアドオンの紹介です。
fSpy
fSpyは、静止画像のカメラマッチング用のオープンソースのクロスプラットフォームアプリです。2018年11月15日にv1.0.0 が正式にリリースされており、現在最新の安定版はv1.0.3 となっています。
fSpy開発者のStuffmatic氏は、静止画像カメラのキャリブレーション用のBlenderアドオン「BLAM」を作成していました。UIが不格好であるにもかかわらず、Blenderコミュニティである程度の人気があったということです。fSpyは、スタンドアロンのアプリの形でBLAMの機能をより幅広いユーザーに提供するという試みで作られました。
他のアプリケーションへのインポート
Blender用の公式のfSpyインポーターアドオンがあります。専用のインポーターがなくても、fSpyパラメータの値を1つずつコピーして、ターゲットアプリケーションに貼り付けることで、カメラパラメータをアプリケーションに取得することが可能です。
以下がそのプロセスとなります。
- カメラのビューポートを入力画像の寸法に合わせて設定
- 入力画像をカメラの背景として使用
- カメラの視野を設定
- カメラ位置の設定
- カメラの向きを設定
- 画像の中間点と一致しない場合、主点を設定します。
基礎知識
●カメラのマッチング
カメラマッチング(カメラキャリブレーション)は、画像内の特定の特徴からカメラパラメータを推定するプロセスです。fSpyは、静止画像内のユーザー定義の制御点に基づいて、3D空間におけるカメラのおおよその焦点距離、向き、位置を計算します。計算されたカメラパラメータは、3Dモデリングツールなどの他のアプリケーションで使用することができます。
●Vanishing points(消失点)
消失点とは、3D空間で平行なすべての線が交差する透視図上の点のことです。例えば、下の画像の線路は現実世界では平行ですが、1つの消失点で交差しています。
fSpyは、カメラパラメータを推定するために消失点の位置を使用します。消失点は、3D空間の平行線に対応する画像の特徴に整列した2本の線分を使用して指定されます。下の画像は、そのような2本の線分と対応する消失点を示しており、2本の細い線の交点として示されています。
線分が平行に近い場合、消失点の位置が正確に計算できません。線分間の角度は大きければ大きいほど良いです。
2つの線分を用いた消失点の指定
●Perpendicular directions(垂直方向)
fSpyにおける消失点は、3次元空間における垂直な方向、つまり相互に直角な方向に対応すると仮定されています。
垂直方向(左)と非垂直方向(右)の消失点
【制限事項】
fSpyは、ピンホールカメラ( pinhole camera )のようなプロセスで得られた遠近感のある画像のみに対応しています。対象となる画像は以下の通りです。
- 通常の(ほぼ)歪みのないレンズで撮影した写真。
- 遠近法カメラでレンダリングされた3D画像。
次の種類の画像はfSpyではうまく機能しません、
- 魚眼レンズなど、歪みの激しいレンズで撮影した写真。
- パースペクティブが改ざんされた画像(パースペクティブコントロールなど)。
- 正投影カメラでレンダリングされた3D画像。
- ステッチされたパノラマ画像。
サンプルプロジェクトでの説明
fSpyウェブサイトでチュートリアルページで説明されている内容をもとに、アプリに含まれているサンプルプロジェクトを用いて設定や使用方法を説明します。
fileメニューから [Open example project] を選択して、サンプルプロジェクトを開くことができます。メインウィンドウには3つのセクションがあり、左側に設定、中央に画像パネル、右側にキャリブレーション結果が表示されます。サンプルプロジェクトを開いたときに最初に表示されるのは、次のようなものとなり、これは5つのコントロールポイントのみを使用した最もシンプルなキャリブレーションセットアップです。
●消失点と3D原点
4辺のポリゴンの角は、タイルの壁の長方形の角に合わせて配置されています。辺には対応する消失点に応じて番号が付けられており、各消失点の位置はより細い赤と青の線で示されています。ポリゴンの4つの制御点は、カメラの焦点距離と方向を決定するのに十分な2つの垂直方向の消失点を定義します。座標軸と交わっている白い制御点は、3D原点を表し、カメラの位置を定義します。
コントロールポイントをドラッグすると、カメラのパラメータが瞬時に更新されます。ドラッグしながらシフトキーを押すと、画像が部分的に拡大され、正確にポイントを配置することができます。
4辺ポリゴンコントロールは使いやすいですが必ずしも実用的ではありません。各消失点のコントロールポイントを独立して移動する場合は、左側の設定パネルでRectangle mode(長方形モード)オプションを無効にします。
●3D guide
キャリブレーションの精度を確認するには、3D原点をドラッグして、その軸が画像内の線と一致していることを確認します。3Dガイドメニューには、いくつかのタイプの視覚的支援があります。
●消失点の方向
座標軸 x, y, z はそれぞれ赤, 緑, 青で色分けされています。消失点のコントロールはそれぞれ、その色で指定された軸の方向に消失点を定義します。軸の方向を変更するには、左側の設定パネルの[Vanishing point axes(消失点軸)]セクションのメニューを使用します。これは、例えば外部アプリケーションでカメラのパラメータを使用している場合、どの軸が上方向に対応するかが異なっている場合に役に立ちます。
●Reference distance(基準距離)の指定
2つの消失点と3D原点の位置が決定すると、カメラの向きと位置の両方を計算することができます。デフォルトでは、カメラから3D原点までの距離は、合理的な固定値に設定されていますが、fSpyは、画像内のオブジェクトのサイズに基づいてこの距離を計算することもできます。
壁タイルの幅が 20 cm であることがわかっているとします。座標軸を見ると、測定したい距離はx軸に沿っているので、Reference distance(基準距離)メニューから Along the x axis (x軸に沿って)を選択します。Reference distance(基準距離)のフィールドが0.2m(タイルの幅 )に設定され、新しいコントロールが表示されます。
原点からx軸方向に点線で示された線は、基準距離がその軸に沿って測定されていることを示しています。赤い短い線分はReference distance(基準距離)ハンドルで、ドラッグしてReference distance(基準距離)を指定することができます。この例では、Reference distance(基準距離)がタイルの幅に等しくなるように配置されています。
●Principal point(主点)
カメラのレンズの中央をまっすぐに通る光線を想像して、光線がセンサー(またはフィルム)に当たる点が主点となります。この点は通常、画像の中間点と一致しますが、画像が非対称にトリミングされている場合など、主点が他の場所にあることもあります。位置がわかっている場合は、主点メニューから手動を選択し、黄色いコントロールポイントを主点の位置までドラッグします。
位置がわからない場合(単一消失点モードではない場合)、第3の垂直方向の消失点を設定して計算することができます。[Principal point]メニューから[From 3rd vanishing point(第3の消失点から)]を選択すると、第3の消失点コントロールが表示され、消失点を指定すると、計算された主点が黄色の丸で表示されます。制御点を大きく動かさない限り、計算された主点は画像の中点に近いところにあるはずです。
●1つの消失点しか判断できない場合
これまでの説明では、カメラのキャリブレーションは、少なくとも2つの垂直方向の消失点に基づいて行われてきました。しかし、画像から1つの消失点しか判断できない場合でも、追加情報があればカラパラメータを計算することができます。
これがどのように機能するかを確認するには、設定パネルの上部にある[Number of vanishing points]メニューから1を選択します。2番目の消失点コントロールが変更され、いくつかの新しい設定が左側のパネルに表示されます。
消失点が1つしかない場合、fSpyは、ユーザーが以下の情報を入力する必要があります。
- カメラの焦点距離( focal length)
- 第一消失点と第二消失点の間の方向
カメラの焦点距離は、設定パネルの[Camera date]で指定します。この例の写真は、キヤノン60Dで24mmレンズを使用して撮影したものです。
シングル消失点モードでは、第2消失点の制御は1本の線分です。この線分は、第1の消失点と第2の消失点の間の方向、つまり第1の消失点の軸を中心とした回転を定義します。
Blender用インポートアドオン
これは、fSpy公式のBlender用インポーターアドオンとなっています。fSpyからのデータ通りにBlenderカメラのパラメーターを設定し、オプションでカメラの背景画像を設定することができます。
fSpyインポートアドオンも他のBlenderアドオンと同じようにインストールすることができます。アドオンをインストールしてアクティブ化したら、[import ]メニューに[ fSpy ]が表示され、fSpyプロジェクトファイルをインポートできるようになります。fSpyプロジェクトファイルがインポートされると、プロジェクトファイルと同じ名前のカメラが作成されます。
インポート設定
インポーターのファイルブラウザーの左下に、インポート設定のパネルがあります。
- [Update existing import (if any) ]をチェックすると、プロジェクトのファイル名と一致する名前で以前に作成されたカメラが更新されます。チェックを外すと、インポートごとに新しいカメラが作成されます。
- [Import background image] をチェックすると、fSpyプロジェクトファイルの画像がBlenderカメラの背景画像として使用されます。
【2.80より古いBlenderバージョンのサポート】
バージョン1.0.3以降、アドオンはBlender 2.80以降とのみ互換性があります。古いバージョンのBlenderを使用している場合は、アドオンのバージョン1.0.2をダウンロードする必要があります。
fSpyを活用して制作されたアニメーションCMも紹介しています。ぜひご覧ください。

fSpyはオープンソースソフトウェアで完全に無料でダウンロードして使用でき、ソースコードはGPLライセンスの下で利用可能ですが、fSpyを気に入った場合は開発者に寄付することができます。寄付は、fSpy ダウンロードページからできます。
無料のfSpyのダウンロードはこちらから
公式Blender用インポートアドオンのダウンロードはこちらから
コメント