
概要 📖 – レンズ歪みの補正・付加
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 で補正/付加を切替
↓
出力: レンズ歪みを補正または付加した画像
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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 から取り込んだ映像に対し、レンズの較正値を使って歪みを反転する。
- Video Device In TOP または Movie File In TOP で撮影素材を入力
- Lens Distort TOP の
Invert Distortionをオンにする - OpenCV 等で事前較正した
K1/K2/P1/P2をそれぞれのパラメータに入力 Optical Center UnitsをRP (Pixel Relative)等に合わせ、較正値の単位と一致させるFocal Length Unitsを較正データの単位に合わせ、Fx/Fyを入力
Example 2: 魚眼レンズ風の樽型歪みを付加 🐟
Render TOP → Lens Distort TOP (K1 を正の値に設定) → Composite TOP → 出力
3D シーンや 2D 素材に対し、広角・魚眼レンズで撮影したような樽型歪みを後付けでかけるエフェクト用途。K1 を正の値に振ることで中心から外側へピクセルが押し出される樽型変形が得られる。
- Render TOP または Movie File In TOP の出力を Lens Distort TOP の入力に接続
Invert Distortionはオフのまま (歪みを付加するモード)K1を0.2〜0.5程度の正値に設定し樽型を確認- 細かい曲率を
K2/K3で微調整 - 中心ズレを起こしたい場合は
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 とプレートのレンズ歪みを一致させる王道フロー。
- OpenCV / Agisoft 等で実カメラを較正し
K1〜K3、P1/P2、Fx/Fyを取得 - 実写プレートに対し
Invert Distortionオンの Lens Distort TOP を通し無歪み化 - 無歪みプレート上で 3D CG を合成 (CG カメラは無歪み前提の理想カメラ)
- 合成結果にもう 1 つ Lens Distort TOP を通し、
Invert Distortionオフで歪みを再付加 (パラメータは 2 番目と同じ) - 出力を 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 🎯
- 前処理: Render TOP、Movie File In TOP、Video Device In TOP、Constant TOP
- 後処理: Composite TOP、Crop TOP、Level TOP、Out 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: アスペクト比 Xaspecty: アスペクト比 Ydepth: 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 ResolutionをCustom Resolutionで広めに確保 - 意図的に切り出したい場合は後段で Crop TOP を使う
- Common Page の
Pixel Formatを16-bit float (RGBA)以上にして補間精度を確保
❌ Problem: 歪みの中心位置がズレた結果になる
✅ Solution:
Optical Centerが画像中心 (Relative モードで0, 0) と一致しているか確認Optical Center UnitsがR/A/RP/APのどれになっているか確認 (較正データの単位と一致させる)- OpenCV 等で得た cx / cy 値は通常左下隅からのピクセル絶対座標のため
AP (Pixel Absolute)を選ぶ
❌ Problem: 焦点距離を変えても歪みの見え方が変わらない
✅ Solution:
K1〜K3/P1/P2がすべて 0 だと、焦点距離をどう変えても歪みは生じない仕様Focal Length UnitsがF (Fraction)とP (Pixels)のどちらかで、較正データの単位と一致しているか確認- 正規化単位 (
F) と画素単位 (P) を混在させると、想定の数百倍ずれた値になり実質無変化に見える場合がある
❌ Problem: OpenCV の較正値をそのまま入れても画像とズレる
✅ Solution:
- OpenCV は左上原点・Y 軸下向き、TouchDesigner は左下原点・Y 軸上向きのため、
cy値をheight - cyに変換してから入力 Optical Center UnitsをAP (Pixel Absolute)、Focal Length UnitsをP (Pixels)に揃え、較正値そのままを使う- 較正画像と TouchDesigner 側の入力解像度が一致しているか確認 (異なる場合は焦点距離も比例スケーリング)
参考資料 📚
その他 🔗
- TouchDesigner Wiki — Category:TOPs
- TouchDesigner Wiki — Pixel Formats 解説
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Lens Distort TOP
- TouchDesigner公式ドキュメント – Displace TOP (代替の自由歪み)
- TouchDesigner公式ドキュメント – Corner Pin TOP (四点指定の透視ワープ)

