
概要 📖 – リアルタイム ブロブトラッキング
Blob Track TOPは、TOP 画像内の動くブロブ(連結領域)をリアルタイムに検出・追跡し、座標・サイズ・ID を Info DAT に出力する TOPです。出力テクスチャには検出されたブロブの矩形が描画され、Info DAT 経由で各ブロブの位置・面積・ID をスクリプトから参照できます。
主な用途 🎯
- カメラ入力からの動体検出・物体追跡(リアルタイムでのブロブ抽出と ID 付与)
- インタラクティブインスタレーションの入力ソース(来場者の位置を追跡してビジュアルを反応させる)
- 赤外線カメラを使った擬似マルチタッチ検出(IR タッチテーブル等)
- 動作解析・身体トラッキング(ダンス・スポーツ動作の重心追跡)
- シーン内オブジェクトの自動カウント(人数・車両数等の集計)
データフロー 🔄
入力: TOP テクスチャ(前処理済みグレースケール画像)
↓
ブロブ検出・ID 追跡・サイズ計測
↓
出力: 元 TOP に検出矩形を描画したテクスチャ + Info DAT に各ブロブの座標・面積・ID テーブル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Blob Track Page 📋
Reset .reset ♻️
トラッキングデータと学習済み背景データのリセット:
- Reset: オンの間、すべてのトラッキングデータと学習済み背景データをリセットし続ける(トグル)
- Reset Pulse: 瞬時にトラッキングデータと学習済み背景データをリセットする(パルス)
Mono Source .monosource 🎚️
ブロブ検出に使う単一チャンネルの指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Luminance | .luminance |
RGB の輝度(標準的なグレースケール変換)を解析対象にする |
| Red | .red |
R チャンネルのみを解析対象にする |
| Green | .green |
G チャンネルのみを解析対象にする |
| Blue | .blue |
B チャンネルのみを解析対象にする |
| Alpha | .alpha |
アルファチャンネルを解析対象にする(IR カメラの輝度マスク等で有用) |
| RGB Average | .rgbaverage |
R・G・B の単純平均を解析対象にする |
| RGBA Average | .average |
R・G・B・A 全チャンネルの平均を解析対象にする |
Draw Blob Bounds .drawblobs 🔲
検出ブロブの矩形描画のオン/オフ:
- Draw Blob Bounds: オンの場合、検出された各ブロブを囲む矩形を出力テクスチャに重ねて描画する(デバッグ表示・可視化に便利)
Blob Bound Color .blobcolor 🎨
Draw Blob Bounds がオンのときに描画される矩形の色 (RGB):
- Red (blobcolorr): 矩形描画色の R 成分 (0.0–1.0)
- Green (blobcolorg): 矩形描画色の G 成分 (0.0–1.0)
- Blue (blobcolorb): 矩形描画色の B 成分 (0.0–1.0)
Threshold .threshold 📏
背景差分テクスチャを二値化するしきい値:
- Threshold: 背景差分テクスチャを二値化する際のしきい値。背景テクスチャと入力テクスチャの差分がこの値を超えるピクセルがブロブ候補になる
Download Type .downloadtype ⬇️
GPU からのデータダウンロード方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Immediate (Slow) | .immediate |
現在フレームの出力を即時取得。レンダリングをストールさせるため遅い |
| Next Frame (Fast) | .delayed |
前フレームの出力を遅延取得。GPU を待たせず高速。1 フレーム分のレイテンシが許容できる用途向け |
※ 注意: Next Frame (Fast) は 1 フレーム遅れのデータを返します。リアルタイム性が厳密に必要な用途(高速インタラクション等)では Immediate を選ぶか、後段で 1 フレームのオフセットを許容できる設計にしてください。
Constraints Page 📋
Blob Size .blobsize 📐
追跡対象とするブロブのサイズ範囲:
- Minimum Blob Size (minblobsize): この値より小さいブロブは追跡しない(ノイズ点を除外するのに使う)
- Maximum Blob Size (maxblobsize): この値より大きいブロブは追跡しない(背景全体が拾われる事故を防ぐ)
Move Distance .maxmovedistance 🎯
ID 同一性を維持できる 1 フレームあたりの最大移動量:
- Maximum Move Distance: ブロブが 1 フレームで移動可能な最大距離。これを超える移動量は別のブロブとして扱われ新しい ID が割り振られる。高速に動く対象を追跡する場合は大きめに設定する
Delete Nearby Blobs .deletenearby 🧹
近接する重複ブロブの自動削除:
- Delete Nearby Blobs (deletenearby): オンにすると、近すぎるブロブの一方を削除する(追跡手法によって発生する重複検出への対策)
- Minimum Distance (deletedist): 削除判定の距離しきい値(ピクセル単位)。この距離以内にあるブロブのうち小さい方が削除される
- Delete Area Tolerance (deletenearbytol): 面積差トレランス。1 のとき面積差を無視し距離のみで削除判定。値が小さくなるほど面積差が大きいブロブだけが削除対象になる
Delete Overlapping Blobs .deleteoverlap 🔀
重なり合うブロブの自動削除:
- Delete Overlapping Blobs (deleteoverlap): オンにすると、重なり合うブロブを削除する
- Delete Overlap Tolerance (deleteoverlaptol): 重なりトレランス。1 のとき完全に重なったブロブのみ削除。値が小さくなるほど少しの重なりでも削除対象になる
Revival Page 📋
Revive Blobs .reviveblobs ♻️
一時的にロストしたブロブを同じ ID で復活させる条件:
- Revive Blobs (reviveblobs): オンの場合、ロストしたブロブを以下の条件を全て満たすときに同じ ID で復活させる
- Revive Time (revivetime): ロストから復活までの猶予時間(秒)。これを超えてロスト状態が続いたブロブは expired 扱いとなり復活対象外になる
- Revive Area Difference (revivearea): 新ブロブとロストブロブの面積差しきい値。差が大きすぎると復活対象とみなさない
- Revive Distance (revivedistance): 新ブロブとロストブロブの距離しきい値。離れすぎていれば復活対象とみなさない
Info DAT Inclusion .includelost 📊
Info DAT に含めるブロブの状態フラグ:
- Include Lost Blobs in Table (includelost): オンにすると、ロスト状態(復活可能性あり)のブロブも Blob Track TOP の Info DAT に含めて出力する
- Include Expired Blobs in Table (includeexpired): オンにすると、expired 状態(復活見込みなし)のブロブも Info DAT に含めて出力する
- Expired Time (expiredtime): expired 後に Info DAT に残しておく秒数。クリーンアップ前の最終参照に使う
Common Page 🔧
Common Page (placeholder) .common_page_placeholder 🔧
TOP 共通の出力解像度・アスペクト・ピクセルフォーマット等の設定(canonical sync で上書きされる placeholder):
- Common Page: TOP 共通の設定群。詳細は
style/common-pages/TOP.jsonを参照
実践アイデア 💡
Example 1: カメラ入力からの来場者カウント 📷
Video Device In TOP → Threshold TOP → Blob Track TOP → Info DAT → CHOP Execute DAT
Webcam の入力をしきい値処理して人物シルエットを抽出し、Blob Track TOP で各人物をブロブとして検出。Info DAT の行数を CHOP Execute DAT 経由でカウントしてリアルタイム来場者数として表示する基本フロー。
- Video Device In TOP でカメラ入力を取得
- Threshold TOP で背景と人物を分離(しきい値は環境光に合わせて調整)
- Blob Track TOP に渡し、Minimum Blob Size を人物サイズに合わせて設定
- Info DAT を Blob Track TOP に接続し、行数(=ブロブ数)を Constant CHOP に渡してテキスト表示
Example 2: 赤外線タッチテーブル 👆
IR Camera (Video Device In TOP) → Background TOP → Blur TOP → Threshold TOP → Blob Track TOP → Multi-touch Coords
赤外線カメラ + 背景差分 + ぼかし + 二値化を経て Blob Track TOP で複数の指先位置をブロブとして抽出し、各タッチ位置を UV 座標としてビジュアル制御に渡す擬似マルチタッチ実装。
- 赤外線カメラからの入力を Video Device In TOP で取り込み
- Background TOP で初期背景を学習し差分のみ抽出
- Blur TOP でノイズを減らし、Threshold TOP で二値化
- Blob Track TOP で各指先をブロブ検出し、Maximum Move Distance を指の移動速度に合わせて調整
- Info DAT の座標列を DAT to CHOP 経由でビジュアルアプリへ送信
Example 3: ダンサーの重心追跡 💃
Kinect TOP (Depth) → Threshold TOP → Blob Track TOP → CHOP Execute → Geometry Transform
Kinect の Depth テクスチャから人物範囲だけをしきい値で切り出し、Blob Track TOP で人物の中心座標を取得してジェネレートしたジオメトリの位置に反映するパフォーマンス用途。
- Kinect TOP の Depth 出力を取得
- Threshold TOP で人物範囲のみ二値化
- Blob Track TOP で人物中心をブロブとして抽出(Maximum Blob Size を背景丸ごとを拾わない値に)
- Info DAT 経由で取得した中心座標を Geometry COMP の位置パラメータに Export
関連オペレータ 🔗
類似機能OP 🔍
- Optical Flow TOP — ピクセル単位の動きベクトルを算出(ブロブ単位の追跡とは粒度が異なる近接機能)
組み合わせ推奨OP 🔄
- Threshold TOP — 前段で二値化してブロブ検出の精度を上げる
- Blur TOP — ノイズ平滑化でブロブ分裂を抑制
- Composite TOP — 元画像とブロブ矩形を重ねて可視化
- Info DAT — 検出ブロブの座標・面積・ID テーブルを取得
前処理・後処理TOP 🎯
- 前処理: Video Device In TOP、Movie File In TOP、Threshold TOP、Blur TOP、Level TOP
- 後処理: Composite TOP、Render TOP、Switch TOP、Null TOP
Info情報 📊
Blob Track TOP は Info DAT による検出ブロブの詳細データ取得に対応しています。
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: エラー数
Blob Track TOP固有のInfo DAT 📊
id: 各ブロブに割り当てられた追跡 ID(同一性が維持される限り同じ値)u / v: ブロブ中心の正規化 UV 座標 (0.0–1.0)size / area: ブロブの面積(ピクセル数換算)min_u / max_u / min_v / max_v: ブロブを囲むバウンディングボックスの UV 範囲state: ブロブの状態フラグ(active / lost / expired)。Include Lost/Expired Blobs オン時に出力
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: ブロブが全く検出されない / 検出数が少なすぎる
✅ Solution:
Threshold値が高すぎる可能性。入力テクスチャの輝度レンジに合わせて下げるMono Sourceが入力に対して妥当なチャンネルか確認(IR カメラなら Alpha / Luminance)Minimum Blob Sizeが大きすぎないか確認。小さい対象は値を下げる
❌ Problem: ブロブ ID が頻繁に切り替わって追跡が不安定
✅ Solution:
Maximum Move Distanceを増やし、1 フレームあたりの許容移動量を広げる- 前段に Blur TOP / Background TOP を入れてノイズや背景ゆらぎを減らす
Revive Blobsを有効化し短時間のロスト後に同 ID で復活させる
❌ Problem: 1 つの対象に対して重複ブロブが大量に発生する
✅ Solution:
Delete Nearby Blobsを有効化し近接ブロブを統合Delete Overlapping Blobsを有効化し重なるブロブを除去- 前段に Blur TOP を入れて細かい分裂を抑制
❌ Problem: パフォーマンスが重い / フレームレートが落ちる
✅ Solution:
- Common Page の Output Resolution を Half / Quarter に下げて処理ピクセル数を削減
Download Typeを Next Frame (Fast) に変更して GPU ストールを回避- 前段で関心領域 (ROI) だけを Crop TOP で切り出してから渡す
参考資料 📚
その他 🔗
- TouchDesigner Wiki — Category:TOPs
- TouchDesigner Wiki — Pixel Formats 解説
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Blob Track TOP
- TouchDesigner公式ドキュメント – Info DAT(ブロブデータ出力先)
- TouchDesigner公式ドキュメント – Threshold TOP(典型的な前処理)

