
概要 📖 – ポイント群からのリアルタイム blob 検出と追跡
Blob Track CHOPは、入力されたポイント群を距離ベースで blob (まとまり) に集約し、フレーム間で同一性を保ったまま重心・速度を追跡する CHOPです。Hokuyo / Leuze ROD4 のような連続スキャン LiDAR、Kinect 等の深度センサーから得たポイント群を入力とし、Search Mode・Max Point Distance・Area of Interest・Movement Prediction を組み合わせてリアルタイムに人物 / 手 / 物体を 1 オペレータで追跡できます。
主な用途 🎯
- LiDAR / ToF / 深度センサーから得たポイント群を blob (まとまり) に集約してリアルタイム追跡
- Hokuyo CHOP / Leuze ROD4 CHOP の連続ポイント出力を Consecutive Points モードで高速 blob 化
- Area of Interest (Rectangle / Circle) でスキャン領域を限定し、関係ない外周ノイズを除外
- 各 blob の Centroid (重心) と Velocity (速度) を出力し、人物・手・物体のインタラクティブ追跡に利用
- Kalman Filter / Simple Forward Predict による移動予測でフレーム間 blob 同一性を維持
データフロー 🔄
入力: ポイント群 CHOP (Hokuyo / Leuze ROD4 / Kinect 等のセンサー出力)
↓
Active 判定
↓
Search Mode (All / Consecutive Points) で点同士を比較
↓
Max Point Distance で blob 化
↓
Area of Interest でフィルタ
↓
Blob Init Time / Min Points per Blob で偽陽性除去
↓
Movement Prediction で移動予測
↓
出力: 各 blob の Centroid / Velocity チャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Tracker Page 🎯
基本パラメータ ⚙️
Active .active ✅
– オン: 入力からポイント情報を受け取って blob 追跡を実行
– オフ: 処理を停止するが、既存 blob は出力に保持される
Search Mode .searchmode 🔎
ポイント間の比較方法を決定するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| All | .all |
全ポイントを互いに比較して blob を検出(低速だが、ポイントがランダムに並ぶ入力でも頑健) |
| Consecutive Points | .consecutive |
サンプル順で隣接するポイント同士のみ比較(高速、Hokuyo CHOP / Leuze ROD4 CHOP のように空間的に近いポイントが連続して並ぶ入力に最適) |
Blob 検出パラメータ 📏
Max Blobs .maxblobs 🔢
– 同時追跡できる blob の最大数
– 上限を超えた場合は新規 blob が無視される
Max Point Distance in Blob .maxpointdistance 📐
– 2 つのポイントが同一 blob に属すると判定する距離の上限
– 値を大きくすると複数の物体が 1 つの blob に統合されるため、対象サイズに合わせて調整
Max Blob Movement .maxblobmovement 🏃
– 1 フレーム間で blob が同一とみなされる最大移動距離
– 高速移動する対象では値を大きく、ゆっくり動く対象では小さく設定
Area of Interest .areaofinterest 🗺️
blob を追跡する領域の限定方法を決定するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
領域制限なし、スキャン範囲全域で blob を追跡 |
| Rectangle | .rectangle |
指定した矩形領域内のポイントのみで blob 追跡 |
| Circle | .circle |
指定した円(または楕円)領域内のポイントのみで blob 追跡 |
領域形状パラメータ 📐
Center .center 🎯
– 関心領域 (Area of Interest) の中心座標 (centerx, centery)
– Area of Interest が Rectangle / Circle のときに有効
Size .size 📏
– 関心領域のサイズ (sizew, sizeh)
– Rectangle なら矩形の幅と高さ、Circle なら楕円の長径・短径
Rotate .rotate 🔄
– 関心領域を回転させる角度(度単位)
Allow Movement Outside Area .allowmovementoutside ↔️
– オン: 領域内で検出された blob が領域外に出ても追跡を継続
– オフ: 領域外に出た blob は追跡停止
Blobs Page 🫧
出力チャンネル制御 📤
Output Centroid .outputcentroid 📍
– オン: 各 blob の重心 (Centroid) 座標を出力チャンネルに含める
– インタラクティブ可視化や OSC 送信での主要な座標源
Output Velocity .outputvelocity 🏃
– オン: 各 blob の速度 (Velocity) を出力チャンネルに含める
– 移動方向ベースのジェスチャー判定や速度連動エフェクトに利用
偽陽性フィルタ 🛡️
Min Points per Blob .minblobpoints 🔢
– blob を構成するために必要な最小ポイント数
– センサーノイズによる微小 blob の偽検出を抑制
Blob Init Time (s) .blobinittime ⏱️
– blob が信頼できると判定されるまでの最小検出時間(秒)
– この時間に満たない検出は出力に含めない(偽陽性除去)
Lost Blob Timeout (s) .lostblobtimeout ⌛
– 一度ロストした blob を出力から削除するまでの猶予時間(秒)
– 短い遮蔽(手前の通行人等)で blob が消えないように調整
Blob Movement Prediction Type .predicttype 🔮
前フレーム blob の位置を予測してから現フレームとマッチさせる方式を決定するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
予測なし、前フレーム位置とそのままマッチング |
| Simple Forward Predict | .simple |
等速度を仮定して前フレームと同じ移動量を加算(軽量) |
| Kalman Filter Predict | .kalman |
等速度モデルの Kalman フィルタで予測(高速移動・遮蔽に頑健) |
Common Page 🔧
Time Slice .timeslice ⏱️
Time Slice モードの強制設定:
- オン: チャンネルを「タイムスライス」モードに強制
- タイムスライス: 前回のクックフレームから現在のクックフレームまでの時間
Scope .scope 🎯
影響を受けるチャンネルの絞り込み:
- Scope 文字列: 影響を受けるチャンネルを指定する文字列
- パターンマッチング:
*や[1-10]等のパターンが使用可能
Sample Rate Match .srselect ⚡
複数の入力 CHOP のサンプルレートが異なる場合の処理方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Resample At First Input’s Rate | .first |
最初の入力のレートで他をリサンプル |
| Resample At Maximum Rate | .max |
最高サンプルレートでリサンプル |
| Resample At Minimum Rate | .min |
最低サンプルレートでリサンプル |
| Error If Rates Differ | .err |
レート不一致でエラー |
Export Method .exportmethod 📤
CHOP チャンネルをパラメータに接続する方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| DAT Table by Index | .datindex |
DAT テーブルのインデックスでチャンネルとパラメータを対応付け |
| DAT Table by Name | .datname |
DAT テーブルの行名でチャンネルとパラメータを対応付け |
| Channel Name is Path:Parameter | .autoname |
チャンネル名を `path:parameter` 形式で記述し直接対応付け |
Export Root .autoexportroot 🌳
Channel Name is Path:Parameter モード時のパス基点:
- Export Root パス:
autonameモードでチャンネル名のパス部分を相対化する基点 OP のパス
Export Table .exporttable 📋
DAT Table エクスポート方式での参照 DAT:
- Export Table DAT:
datindex/datnameモード時に参照する DAT のパス
Rename from .commonrenamefrom 🔤
リネーム対象チャンネルのパターン:
- Rename from パターン: リネーム対象とするチャンネル名のパターンマッチング文字列
Rename to .commonrenameto 🔁
リネーム後の置換パターン:
- Rename to パターン: Rename from にマッチしたチャンネルの新しい名前パターン (デフォルトはリネームなし)
実践アイデア 💡
Example 1: LiDAR による空間内の人物追跡 🚶
Hokuyo CHOP → Blob Track CHOP (Consecutive Points + Area of Interest = Rectangle) → Centroid → Geometry COMP
- Hokuyo CHOP で 2D LiDAR からポイントクラウド (角度 + 距離) を取得
- Blob Track CHOP の Search Mode を「Consecutive Points」に設定(Hokuyo は隣接ポイントが空間的に近い順で並ぶため最適)
- Area of Interest を「Rectangle」、Center / Size を会場の床面サイズに設定して外周ノイズを除外
- Output Centroid をオンにし、各 blob の Centroid (重心) を XYZ 座標として Geometry COMP に渡してリアルタイム可視化
Example 2: Kinect 深度カメラによる手の追跡 ✋
Kinect TOP → CHOP (depth points) → Blob Track CHOP (Min Points per Blob + Blob Init Time) → OSC Out CHOP
- Kinect TOP の深度画像を CHOP 化し、閾値以下の点のみ抽出
- Blob Track CHOP の Min Points per Blob を 30 程度に設定して指先サイズの誤検出を除外
- Blob Init Time (s) を 0.1 秒に設定し、瞬間的なノイズを偽陽性として弾く
- Output Centroid + Output Velocity をオンにし、手の重心と移動速度を OSC で外部アプリに送信
Example 3: Kalman Filter による高速移動体の安定追跡 ⚡
Sensor Points → Blob Track CHOP (Movement Prediction = Kalman) → Filter CHOP → ビジュアル
- 高速移動するボール / ロボット等の点群を入力
- Blob Track CHOP の Blob Movement Prediction Type を「Kalman Filter Predict」に設定
- Max Blob Movement を高速移動量に合わせ大きく設定(フレーム間ジャンプを許容)
- Lost Blob Timeout を 0.3 秒程度に設定し、瞬間的な遮蔽でも同一 blob として継続追跡
関連オペレータ 🔗
類似機能OP 🔍
- Blob Track TOP — 画像ベースの blob 追跡(ポイント入力ではなく TOP の輝度マップから検出)
- Hokuyo CHOP — Hokuyo LiDAR 専用の生ポイント取得 OP(Blob Track の上流入力源)
組み合わせ推奨OP 🔄
- Filter CHOP — Centroid / Velocity チャンネルを後段で平滑化してジッターを除去
- Math CHOP — Centroid 座標をスケーリング / オフセット補正して可視化空間に整合
- Select CHOP — 特定 blob の Centroid / Velocity チャンネルだけを抜き出して下流に渡す
- OSC Out CHOP — blob 座標を OSC で外部アプリ(Max/Ableton/Unity 等)に送信
- Trail CHOP — blob の移動履歴を時系列バッファとして可視化
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Blob Track CHOPは Info CHOP による詳細情報取得に対応しています。
CHOP固有情報 🎚️
start: CHOPインターバルの開始(サンプル単位)length: CHOPのサンプル数sample_rate: フレーム毎秒のサンプルレートnum_channels: CHOPのチャンネル数time_slice: タイムスライス有効時は1、無効時は0export_sernum: Export接続の更新回数
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間(ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: blob がフレーム間で別物として認識されてしまう(ID が頻繁に変わる)
✅ Solution:
- Max Blob Movement を実際の最大移動速度に合わせて大きく設定(小さすぎると同一 blob と認識されない)
- Blob Movement Prediction Type を「Simple Forward Predict」または「Kalman Filter Predict」に切替して移動予測を有効化
- 前段に Filter CHOP を入れて入力ポイントのジッターを抑制
❌ Problem: 近接した複数の物体が 1 つの blob として統合されてしまう
✅ Solution:
- Max Point Distance in Blob を小さくして blob 化の閾値距離を絞る
- Min Points per Blob を上げて、まばらな小 blob が大 blob に取り込まれないように調整
- Area of Interest で対象領域を Rectangle / Circle で限定し、関係ない点群を除外
❌ Problem: ノイズによる偽の blob が頻発する
✅ Solution:
- Min Points per Blob を上げて点数の少ない微小 blob を除外
- Blob Init Time (s) を 0.1〜0.3 秒に設定し、瞬間的なノイズを偽陽性として弾く
- 前段に Filter CHOP を入れてポイント座標を平滑化
❌ Problem: Hokuyo / Leuze ROD4 入力で処理が重い
✅ Solution:
- Search Mode を「Consecutive Points」に切替(連続ポイント前提のセンサーでは All より遥かに高速)
- Max Blobs を実用上の上限まで絞る(不要に大きい値はマッチング計算量を増やす)
- Area of Interest で領域を限定し、走査対象点数を物理的に削減
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

