Lens Distort TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Lens Distort TOP のレンズ歪み補正/付加を示すサムネイル

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – レンズ歪みの補正・付加

Lens Distort TOPは、入力画像にカメラレンズと同等の樽型・糸巻き型の歪みを付加、または既存の歪みを補正して取り除く TOPです。Optical Center (光学中心) で歪みの中心位置、Focal Lengths (焦点距離) で焦点距離を指定し、K1/K2/K3 でラジアル (中心からの円形) 歪み、P1/P2 でタンジェント (傾き) 歪みの量を制御します。Invert Distortion をオンにすると、別の Lens Distort TOP が加えた歪みを近似的に除去できます。

主な用途 🎯

  • カメラレンズの樽型・糸巻き型歪みの補正・除去
  • 魚眼レンズ風の樽型歪み付加による映像エフェクト表現
  • VR/AR HMD レンズに合わせた事前ワープ (プリディストーション)
  • カメラトラッキング・マッチムーブのためのプレート歪み補正
  • OpenCV カメラ較正パラメータを用いた精密な光学歪み再現

データフロー 🔄

入力: カメラ映像 / 任意の TOP 画像

光学中心と焦点距離で歪みの基準を設定

K1/K2/K3 (ラジアル) と P1/P2 (タンジェント) で歪み量を指定

Invert Distortion で補正/付加を切替

出力: レンズ歪みを補正または付加した画像

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

LensDistort Page 📋

歪み反転 .invert 🔄

Invert Distortion .invert ↔️
Invert Distortion (歪み反転) — オンにすると、同じパラメータを持つ別の Lens Distort TOP が加えた歪みを近似的に元に戻します。逆変換は厳密解ではなく近似のため、強い歪みほどズレが大きくなり、また K3 は逆変換では使用されません。

ラジアル歪み係数 .radial

K1 .k1 1️⃣
K1 (第 1 ラジアル歪み係数) — 中心から外側へのピクセル移動量を制御する係数。正の値で樽型 (魚眼風) 歪み、負の値で糸巻き型 (ピンクッション) 歪みになります。K3 より影響が大きい主係数。

K2 .k2 2️⃣
K2 (第 2 ラジアル歪み係数) — K1 と同方向の歪みをさらに高次で補正する係数。詳細は K1 を参照。

K3 .k3 3️⃣
K3 (第 3 ラジアル歪み係数) — 高次のラジアル歪み補正に使用。詳細は K1 を参照。逆変換 (Invert Distortion オン時) では使われないため、補正用途では実質的な効果がない点に注意。

タンジェント歪み係数 .tangential ↕️

P1 .p1 ⬆️
P1 (第 1 タンジェント歪み係数) — 画像を上下方向に傾けるタンジェント歪みを制御します。レンズと撮像素子の取付ズレなどで生じる非対称な歪みに使用。

P2 .p2 ➡️
P2 (第 2 タンジェント歪み係数) — 画像を左右方向に傾けるタンジェント歪みを制御します。詳細は P1 を参照。

光学中心 .center 🎯

Optical Center .center 🎯
Optical Center (光学中心) — 歪みの中心となる画像上の位置。Optical Center Units で指定する単位モードに応じて、画像左下隅からの絶対位置、または画像中心からの相対位置を、ピクセル単位または正規化座標 (0〜1) で入力します。

  • Optical Center X (center1) — 光学中心の X 座標
  • Optical Center Y (center2) — 光学中心の Y 座標

光学中心の単位 .centerunit 📏

Optical Center の座標値の単位モード

項目 内部名 説明
R (Relative) .relative 画像中心からの相対位置を正規化座標 (-0.5〜0.5) で指定
A (Absolute) .absolute 画像左下隅からの絶対位置を正規化座標 (0〜1) で指定
RP (Pixel Relative) .pixelrel 画像中心からの相対位置をピクセル単位で指定
AP (Pixel Absolute) .pixelabs 画像左下隅からの絶対位置をピクセル単位で指定

焦点距離 .focallength 📐

Focal Lengths .focallength 📐
Focal Lengths (焦点距離) — カメラ行列の焦点距離成分。他の歪みパラメータに対するスカラー係数として作用します。OpenCV では Fx / Fy と表記される値に相当し、ミリ単位など物理単位を扱う系では正規化モードを使用します。

  • Focal Length X (focallength1) — Fx (横方向の焦点距離)
  • Focal Length Y (focallength2) — Fy (縦方向の焦点距離)

焦点距離の単位 .focallengthunit 📏

Focal Lengths の値の単位モード

項目 内部名 説明
F (Fraction) .fraction 焦点距離を画像幅・高さに対する正規化座標で指定 (解像度非依存)
P (Pixels) .pixels 焦点距離をピクセル単位で指定 (OpenCV の Fx/Fy 値をそのまま流用可)

Common Page 🔧

Output Resolution .outputresolution 🖼️

出力解像度の決定方式

項目 内部名 説明
Use Input .useinput 入力 TOP の解像度をそのまま継承
Eighth .eighth 入力解像度の 1/8
Quarter .quarter 入力解像度の 1/4
Half .half 入力解像度の 1/2
2X .2x 入力解像度の 2 倍
4X .4x 入力解像度の 4 倍
8X .8x 入力解像度の 8 倍
Fit Resolution .fit 指定解像度に縦横比を保持して収める
Limit Resolution .limit 指定解像度を上限としてクランプ
Custom Resolution .custom Resolution パラメータで任意指定

実践アイデア 💡

Example 1: 撮影映像のレンズ歪み補正 🎬

Video Device In TOP → Lens Distort TOP (Invert オン) → Composite TOP → Out TOP

広角レンズで撮影した素材に残る樽型歪みを除去し、直線が直線として映る平坦な映像に整える定番フロー。Video Device In TOP から取り込んだ映像に対し、レンズの較正値を使って歪みを反転する。

  1. Video Device In TOP または Movie File In TOP で撮影素材を入力
  2. Lens Distort TOP の Invert Distortion をオンにする
  3. OpenCV 等で事前較正した K1 / K2 / P1 / P2 をそれぞれのパラメータに入力
  4. Optical Center UnitsRP (Pixel Relative) 等に合わせ、較正値の単位と一致させる
  5. Focal Length Units を較正データの単位に合わせ、Fx/Fy を入力

Example 2: 魚眼レンズ風の樽型歪みを付加 🐟

Render TOP → Lens Distort TOP (K1 を正の値に設定) → Composite TOP → 出力

3D シーンや 2D 素材に対し、広角・魚眼レンズで撮影したような樽型歪みを後付けでかけるエフェクト用途。K1 を正の値に振ることで中心から外側へピクセルが押し出される樽型変形が得られる。

  1. Render TOP または Movie File In TOP の出力を Lens Distort TOP の入力に接続
  2. Invert Distortion はオフのまま (歪みを付加するモード)
  3. K10.20.5 程度の正値に設定し樽型を確認
  4. 細かい曲率を K2 / K3 で微調整
  5. 中心ズレを起こしたい場合は Optical Center を画面中央から少しオフセット

Example 3: HMD レンズ事前補正 🕶️

Render TOP (左右ステレオ視点) → Lens Distort TOP × 2 (HMD レンズ特性で事前ワープ) → Composite TOP → HMD 出力

VR HMD は内蔵レンズで映像を拡大表示するため、レンズが加える糸巻き型歪みを打ち消すように樽型のプリディストーションを事前にかけておくのが基本構成。Lens Distort TOP は HMD ベンダーの較正値をそのまま使える OpenCV 互換モデルを採用しているため、HMD 用シェーダの代替として使える。

  • 左右視点の Render TOP 出力をそれぞれ Lens Distort TOP に渡す
  • HMD ベンダーが公開する歪み係数 K1 / K2 / K3 を入力
  • Optical Center を左右で別々にずらし、瞳孔間距離 (IPD) に合わせる
  • Invert Distortion は通常オフ (HMD レンズが除去する歪みを事前に付加する向き)

Example 4: OpenCV 較正で合成 📷

実写プレート → Lens Distort TOP (Invert) → 3D CG 合成 → Lens Distort TOP (歪み再付加) → Composite TOP

マッチムーブ用ワークフロー。実写プレートを Lens Distort TOP で無歪み化してから 3D CG を合成し、最後にもう一度同じパラメータで歪みを再付加することで、CG とプレートのレンズ歪みを一致させる王道フロー。

  1. OpenCV / Agisoft 等で実カメラを較正し K1K3P1/P2Fx/Fy を取得
  2. 実写プレートに対し Invert Distortion オンの Lens Distort TOP を通し無歪み化
  3. 無歪みプレート上で 3D CG を合成 (CG カメラは無歪み前提の理想カメラ)
  4. 合成結果にもう 1 つ Lens Distort TOP を通し、Invert Distortion オフで歪みを再付加 (パラメータは 2 番目と同じ)
  5. 出力を Composite TOP で最終仕上げ

関連オペレータ 🔗

類似機能OP 🔍

  • TODO

組み合わせ推奨OP 🔄

  • Displace TOP — UV テクスチャによる任意の自由歪み (Lens Distort のカメラモデルでは表現できない歪みに)
  • Corner Pin TOP — 四隅指定による透視ワープ (HMD のレンズ歪みとは別軸の台形補正に併用)
  • Transform TOP — 並進・回転・拡大の単純変換と組み合わせて画像全体を再配置
  • Composite TOP — 歪み補正後の合成や、左右視点の並列出力に使用
  • Render TOP — 3D シーンを入力として渡し、後段で魚眼風歪みやプリディストーションを付加
  • Movie File In TOP — 実写プレートを入力として渡し、レンズ歪み補正の前段に配置

前処理・後処理TOP 🎯


Info CHOP情報 📊

Lens Distort TOP は Info CHOP による詳細情報取得に対応しています。resx / resy による出力解像度、aspectx / aspecty によるアスペクト、depth による深度バッファ情報、cook_time / cook_frame 等の汎用 TOP 情報チャンネルを参照できます。

TOP固有情報 🖼️

  • resx: TOP の出力解像度 X (ピクセル単位)
  • resy: TOP の出力解像度 Y (ピクセル単位)
  • aspectx: アスペクト比 X
  • aspecty: アスペクト比 Y
  • depth: 3D テクスチャ / テクスチャ配列の深度 (2D テクスチャでは 1)
  • gpu_memory_used: TOP が消費している GPU メモリ量 (MB 単位)

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: Invert Distortion で歪み補正が完全に元に戻らない
✅ Solution:

  • Invert Distortion近似アルゴリズムで逆変換するため厳密解ではない。強い歪みほどズレが大きくなる仕様
  • K3 は逆変換では使用されないため、補正用途では K1 / K2 を主に使う
  • 画像端の外側に出てしまった情報は復元できないため、撮影時に余白を確保しておく
  • 完全可逆性が必要な場合は Displace TOP + 事前計算したオフセットマップで対応する

❌ Problem: 画像の端が黒く欠ける / 歪んだ画像が出力範囲外にはみ出す
✅ Solution:

  • 樽型歪みを付加すると画像中心方向にピクセルが集まり、四隅が黒くなる仕様
  • 前段の解像度を上げる、または Common Page の Output ResolutionCustom Resolution で広めに確保
  • 意図的に切り出したい場合は後段で Crop TOP を使う
  • Common Page の Pixel Format16-bit float (RGBA) 以上にして補間精度を確保

❌ Problem: 歪みの中心位置がズレた結果になる
✅ Solution:

  • Optical Center が画像中心 (Relative モードで 0, 0) と一致しているか確認
  • Optical Center UnitsR / A / RP / AP のどれになっているか確認 (較正データの単位と一致させる)
  • OpenCV 等で得た cx / cy 値は通常左下隅からのピクセル絶対座標のため AP (Pixel Absolute) を選ぶ

❌ Problem: 焦点距離を変えても歪みの見え方が変わらない
✅ Solution:

  • K1K3 / P1 / P2 がすべて 0 だと、焦点距離をどう変えても歪みは生じない仕様
  • Focal Length UnitsF (Fraction)P (Pixels) のどちらかで、較正データの単位と一致しているか確認
  • 正規化単位 (F) と画素単位 (P) を混在させると、想定の数百倍ずれた値になり実質無変化に見える場合がある

❌ Problem: OpenCV の較正値をそのまま入れても画像とズレる
✅ Solution:

  • OpenCV は左上原点・Y 軸下向き、TouchDesigner は左下原点・Y 軸上向きのため、cy 値を height - cy に変換してから入力
  • Optical Center UnitsAP (Pixel Absolute)Focal Length UnitsP (Pixels) に揃え、較正値そのままを使う
  • 較正画像と TouchDesigner 側の入力解像度が一致しているか確認 (異なる場合は焦点距離も比例スケーリング)

参考資料 📚

その他 🔗

公式リソース 📖

外部リソース 🌐

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました