CCTVPLANNER.IO / RESEARCH
CCTVカメラのカバレッジ幾何学
設置・傾斜したカメラがどのように地表を撮像するか — 視錐台幾何学、レンズ投影、DORI距離標準を第一原理から導出し、ライブデザイナーを動かしているコードと同じものを使って図示する。
1. 視錐台から地上フットプリントへ
ピンホールカメラは視錐台を定義する。これはカメラの光学中心から像面の境界まで伸びる 四面のピラミッドである。各画素は光学中心から像面上の対応点を通る一本の光線である。カメラがどの 地表領域をカバーするかを求めるには、各光線を地面と交差させ、カメラの到達距離内に入る点だけを 残せばよい。
高さ h に設置され、水平から角度 α 下方に傾けられた、垂直視野 vfov のカメラについて、視錐台の四隅の光線は地表上の カバレッジの外形を描く。一般的な設置構成 (α + vfov/2 < 90°) では、形状は 角が湾曲した切頭台形であり、三角形でもカメラ取付点を起点とする扇形でもない。 α + vfov/2 が90°に近づくと (天井設置の極端な俯角ドーム カメラ)、像の下端がカメラ直下から地面に到達するようになり、台形は扇形へと退化していく。
h = 4 m、傾き = 30°、hfov = 106° のカメラの平面視フットプリント。像の下端はカメラの少し前方で 地面に到達し、側端は外側に扇状に開き、遠端はカメラの実効到達距離で打ち切られる。
2. 下端/上端の交点
下端光線 (像面座標で sV = −1) は地面と次の点で交わる:
d_near = h / tan(α + vfov/2)
上端光線 (sV = +1) は次で交わる:
d_far = h / tan(α − vfov/2) α > vfov/2 のとき (完全に水平線より下)
無限 α ≤ vfov/2 のとき (上端は水平線より上
— renderRange で打ち切り)側面図、h = 4 m、傾き = 15°、vfov = 50°。2本の青線は視錐台の下端・上端光線。地面上の太い青帯は カメラが床面を撮像する範囲 (d_near から renderRange まで) を示す。支柱下の赤いくさび形は、 レンズが解像できない幾何学的領域である。
側端光線 (sH = ±1) については、同じ構成が水平面で成り立つ: 各側方光線は、像面の各高さで カメラのHFOVを横断する。直線投影レンズ (CCTVの主流光学系) ではこれらは地面上で 発散する直線として投影され、台形の斜辺を作る。魚眼レンズでは同じ写像が湾曲し、 フットプリントは湾曲した円板となる。
3. 幾何学的死角
地面より上に設置され、傾きが 90° − vfov/2 未満の任意の カメラについて、視錐台のいかなる光線も到達できない領域が取付点の真下に存在する。像の下端は 水平から α + vfov/2 下方を向くため、 d_near より近いものはすべてカメラの像から完全に外れる。
傾きとFOVを一定に保つと、死角は設置高さに対して線形に増加する — 公式は d_near = h × cot(α + vfov/2) に簡約され、コタンジェント項は レンズによって固定される。垂直FOV 50°、傾き15°のカメラは設置高さ4 mで 4.8 m、 20 mで 23.8 m の死角を持つ — 高さ比に対応する5倍の比率である。死角面積と カバー面積の比は、高所支柱型カメラ配置における主たる制約である。
同じレンズ、同じ15°の傾き、設置位置だけ高くした場合 (h = 20 m): 死角は焦点距離やセンサー サイズに依らず、高さに比例して大きくなる。
4. DORI距離 (EN 62676-4)
DORI標準 (Detect / Observe / Recognize / Identify — 検出 / 観察 / 認識 / 識別) は、 カメラから特定の距離における対象物上の画素密度を定義する。EN 62676-4によれば、これらの距離は カメラと対象物の地表上の水平距離であって、光軸に沿った斜距離ではない。 主要メーカー (Axis、Hikvision、Dahua、Bosch) のデータシートはこの慣例に従っている。
2D地図上では、4つのDORI区分は単に水平距離に等しい半径の同心円弧であり、カメラのフットプリント ポリゴンで切り取られる。フットプリントがその半径に到達しない場所では、対応する弧の部分が 非表示となる — HFOVの狭いカメラでは円錐が細すぎて完全な円を含むことができず、各区分の 両端側方が切り取られ、近距離カメラでは大きい区分は完全に円錐の外に出る。
カメラのフットプリント内における地上弧としてのDORIリング。h = 4 m、傾き = 20°、hfov = 90°、 到達距離 = 70 m。表示される区分値 (8 / 16 / 32 / 64 m) は約90° HFOVの一般的な1080pカメラに 対する例示であり、実際の水平距離はセンサーと焦点距離に依存する。EN 62676-4は各区分での画素密度を 規定する (識別: 250 px/m、認識: 125 px/m、観察: 62 px/m、検出: 25 px/m)。これらから各カメラの 水平到達距離が導出される。
斜距離解釈 (該当する場合)。 特定のデータシートが到達距離をレンズからの斜距離として 指定している場合 — 一般用途のCCTV光学系では稀で、サーマルや望遠レンズの仕様で時折見られる — 地表上の等価水平到達距離は √(d_slant² − h²) である。 6 mに設置されたカメラで識別の斜距離が8 mのものは、水平半径 5.3 m (√(64 − 36)) をカバーする。幾何学モジュールは両形式を 提供し、本ページの図は標準的な水平解釈を用いている。
5. レンズ投影タイプ
異なるレンズ設計は、光軸からの角度を像面半径へ異なる方法で写像する。CCTVで用いられる3つの投影:
| 投影 | r(θ) | 典型的範囲 |
|---|---|---|
| 直線投影 | f · tan θ | HFOV ≲ 120° (大半の固定・バリフォーカルCCTVレンズ) |
| 等距離 | f · θ | HFOV ≳ 140° (パノラマ/魚眼) |
| 等立体角 | 2 f · sin(θ/2) | 立体角を保存する魚眼レンズ |
θ = 光軸からの角度 (ラジアン); f = 焦点距離。r(θ) は像面上の主点からの動径距離である。
直線投影レンズでは、軸外側方因子 tan(θ) はθが光軸から 45°を超えると (すなわちHFOVが90°を超えると) 1を超え、θが90°に近づくにつれて (HFOVが180°に 近づくにつれて) 際限なく増大する。実光学では、数学的発散のはるか手前で隅の引き伸ばしが深刻に なる — 大半のレンズ設計者はおおむね120–140° HFOVで準魚眼ガラスへ移行し、約170°超では完全な 魚眼レンズを用いる。
CCTVplanner.io は現在、170° HFOVまで直線投影を選択し、それを超えると数値安定性のため 等距離投影に切り替える。約140°から170° HFOVのカメラは、たとえその物理レンズが魚眼に近くとも、 直線投影の数学でモデル化される — より単純な隅幾何学と引き換えにこれを受け入れている。 等立体角投影は幾何学レイヤーで対応している (明示的に指定するメーカーデータ向け) が、 ユーザー向けの切り替えはまだ存在しない。
データシート上の注意: HFOV と DFOV
多くのメーカー — 特にアジアの大手ブランド (Dahua、Hikvision、Uniview、Tiandy) — は、データ シート上に視野角の単一の数字を載せているが、それは実は対角視野 (DFOV) であって 水平ではない。DFOV値をHFOVを期待するツールに入力すると、フットプリントは10–15%広くなり、 誤差は画素密度が最も重要な側端に集中する。
水平対垂直アスペクト比 a のセンサーについて (例: 16:9 → a = 16/9)、変換式は:
tan(HFOV/2) = tan(DFOV/2) × a / √(a² + 1) tan(VFOV/2) = tan(DFOV/2) × 1 / √(a² + 1)
写像は角度に対して非線形である: HFOV ≈ k × DFOV という線形近似は、狭角レンズでは機能する が広角化すると大きく外れる。16:9センサーでの正確な変換は次のとおり:
| DFOV (16:9) | 正確なHFOV | 正確なVFOV | 線形近似誤差 |
|---|---|---|---|
| 60° | 53.4° | 31.6° | −1.1° |
| 80° | 72.4° | 44.7° | −2.6° |
| 100° | 92.2° | 60.6° | −5.0° |
| 120° | 113.0° | 80.7° | −8.4° |
| 140° | 134.7° | 106.8° | −12.7° |
「線形近似誤差」 = 素朴な式 HFOV = (a / √(a²+1)) × DFOV によるHFOVから正確値を 引いたもの。この近似は、現代CCTV光学系で支配的な広角域でHFOVを5–13°過小評価する — §9で 想定しているデータシート公差±1°をはるかに超える。常にtanベースの式または上記の正確値を 用いること。
CCTVplanner.io のカメラデータベースはHFOV (CCTVの基準計測量) を保存し、DFOVのみを記載している データシートのカメラについてはインポート時に変換する。手動でカスタムカメラを入力する際は、 HFOVフィールドに数字を入力する前に単位を確認すること — これを誤ることは、現地調査の フットプリントが施工後の実態と一致しない最も多い二大原因の一つである (もう一つはセンサーの アスペクト比)。
6. 障害物、影、可視フットプリント
壁、フェンス、高い構造物はカメラからの光線を遮る。可視フットプリントを計算するため、不透明な 障害物それぞれをポリゴン (閉じた周) またはポリライン (開いたフェンス) としてモデル化し、 各セグメントごとの影四角形を投影する: 各セグメントはカメラから遠ざかる方向に 描画到達距離の数倍まで延長される。これらセグメント単位の影の和が、カメラから見た障害物の シルエットとその背後にあるすべてである。
可視フットプリントは フットプリント − ⋃ 影 であり、 Martínez–Rueda ポリゴン差分アルゴリズムによって計算される。結果は1つのポリゴン (障害物が 円錐を分割する場合は互いに素なポリゴンのリスト) であり、その辺は視錐台の遠端弧と各遮蔽壁の 両方ときれいに整合する。
3D対応解析では、カメラの設置高さよりも低い障害物は光線を完全には遮らない — 障害物の 背後に伸びる有限の地上影を投じる。カメラから水平距離 d にある壁、設置高さ h_cam、障害物頂部高さ h_obs について、影は壁から次の水平距離まで伸びる:
d_shadow_end = d × h_cam / (h_cam − h_obs) h_cam > h_obs のとき h_obs ≥ h_cam の場合、障害物は視線を完全に遮る — 無限影と 等価である。デザイナーはこのケースを完全な不透明遮蔽物 (乗り越えての視認なし) として扱い、2D障害物クリッピング 経路と同じセグメント単位の影投影を適用する。
デザイナーで建物やフェンスに対し「垂直高さを使用 (3D)」を切り替えると、この影投影モデルへ 移行する。カメラが障害物より低い (または同じ高さの) 場合、トグルは効果を持たない。
7. 多階層投影
視錐台と地面の交差は任意の水平面に自明に一般化される。床面の式 z = 0 を z = z_target に置き換え、各隅光線について同じ光線-平面方程式を解けば、結果はその対象階層上のカメラの フットプリントとなる。アトリウムの2階に設置されたカメラは、地上設置のカメラが自階をカバー するのと同じ構成で1階をカバーする。違いは z_target の値とカメラと対象面の間の垂直オフセットだけである。
多階層投影の数学レイヤーは現在の幾何学モジュールに含まれている; 階層選択UIとThree.jsシーン プレビューは将来のリリースに向けて待機している。
8. 仮定と限界
上記のすべての公式は、一連の単純化された仮定の上に成り立っている。これらは固定設置CCTVシナリオの 大半で成り立つが、特定の条件では破綻する; 実務者がモデルをいつ信用すべきかを判断できるよう 文書化する。
モデルの仮定
- 平らな地面 (床面は平面
z = 0) — 地形勾配なし、地球曲率なし。 - 撮像時点で静止カメラ — フレーム中のPTZ動作なし、振動なし。
- ピンホールカメラモデル — レンズ歪みなし。実レンズはBrown–Conradyの放射方向・接線方向歪み (係数
k₁、k₂、p₁、p₂) を導入するが、本モデルではモデル化しない。 - 理想的な校正 — センサー画素ピッチ、焦点距離、光学中心がメーカー仕様と完全に一致する。
- ローリングシャッターアーチファクトなし; 像全体は一瞬で取り込まれる。
- カメラのロールなし — 光軸はパンとチルトのみで回転; センサーは水平のまま。
- 単一光路 — ガラスドームによる屈折なし、シーン内に反射面なし。
- 大気屈折は通常のCCTV距離では無視可能 (50 mで1 cm未満の誤差)。
モデルが破綻するとき
- 傾斜地。地上フットプリントは非対称にずれる: 下り側はモデル予測より遠くまで伸び、上り側は圧縮される。誤差は水平距離1 mあたり約
±h · tan(勾配)である。 - 広角レンズ歪み。約110° HFOVを超えると、直線投影はレンズの実際の写像と隅で1–5 %ずれる。これらの場合に対応するため、幾何学レイヤーには等距離/等立体角投影が用意されている (§5参照)。
- ガラスドームカメラ。ドームはレンズ入口で小さな屈折ずれを導入する (通常の設置高さで数mm)。鏡面ガラス設置における高精度DORI作業ではこれは無視できなくなるが、一般計画では他の誤差源より小さい。
- 多重反射光学。ガラス壁、鏡面天井、磨かれた床からの反射は追跡されない。モデルは見通し線フットプリントのみを返す。
- 動作中のPTZ。モデルは単一のパン/チルト設定における瞬間フットプリントを与える。時間経過にわたるPTZの動作カバレッジは、瞬間フットプリントではなく掃引フットプリントである。
- 施工公差。実際の施工角度は設計から1–3°ずれる (技術者誤差)。次節でこれが地上誤差にどう伝搬するかを定量化する。
9. 誤差感度
入力パラメータ (設置高さ、傾き角、FOV) の誤差はフットプリントの地上位置誤差に伝搬する。 下端地上交差 d_near = h / tan(α + vfov/2) について、 偏微分は次のようになる:
∂d_near/∂h = 1 / tan(α + vfov/2) = d_near / h ∂d_near/∂α = −h / sin²(α + vfov/2) (ラジアン) ∂d_near/∂vfov = −h / (2 · sin²(α + vfov/2)) (ラジアン)
角度の偏微分はラジアン表記である; 度あたりに変換するには π/180 (≈ 0.01745) を掛ける。下表は変換を適用したもの。
典型的な構成 (h = 10 m、傾き = 15°、vfov = 50° → d_near ≈ 11.9 m) について、各パラメータの 小さな誤差はd_nearに次の偏差を生む:
| パラメータ | 入力誤差 | Δ d_near | 注記 |
|---|---|---|---|
| 傾き α | ±1° | ±0.42 m | 通常の傾斜計分解能 |
| 傾き α | ±3° | ±1.27 m | ブラケットでの目視施工 |
| 高さ h | ±0.5 m | ±0.59 m | 巻尺計測、近づけない支柱 |
| vfov | ±1° | ±0.21 m | データシートの丸め |
| 合算 | RMS | ~1.4 m | 3°傾き + 0.5 m高さ + 1° fovで |
支配的な項は施工角度の不確かさである: 上記構成では、傾き誤差1°ごとにd_nearの地上位置精度が 約42 cm劣化する。0.1°分解能のレーザー傾斜計を使えば傾きに起因するd_near誤差は5 cm未満に 抑えられる; 目視のブラケット施工はおおむね±1 mの精度しかない。DORI区分の検証 (認識と識別の 地上リング差が2–3 mになりうる) では、傾きは推測ではなく計測すべきである。
同じ偏微分解析がHFOVを介したフットプリント側方幅にも適用される — HFOVの1°誤差は距離 d での側方広がり誤差およそ 2 · d · tan(½°) ≈ 1.7 % を生む。30 m到達距離では 約52 cmの側方不確かさとなる。これがメーカーHFOV値を厳密値ではなく±1°として扱う理由である。
10. 再現性
本記事のすべての公式は、CCTVplanner.io のデザイナーに同梱される幾何学モジュールに 字面通り実装されている。同モジュールは、直線投影/等距離/等立体角投影、死角の境界ケース、 DORI地上投影、ポリゴンBoolean障害物クリッピング、多階層拡張をカバーする包括的なユニット テストスイートで保護されている。本ページの各図は、ライブデザイナーが用いるのと同じ関数を 呼び出して描画されている。
主要エントリポイント
buildFrustum(args)— カメラ基底 (forward / right / upCam) + 視錐台メタデータcomputeGroundFootprint(frustum, projection)— 標本化されたポリゴン (辺あたり8 / 32点)slantToGroundRadius(frustum, slantM)— 到達可能性チェック付きの √(slant² − h²)computeSegmentShadow / computePolygonShadow— セグメント/ポリゴン単位の地上影投影subtractObstacleShadows(footprint, shadows)— Martínez–Rueda ポリゴン差分computeFloorFootprint(frustum, z, projection)— 多階層バリアント
既定定数
defaultLensProjection: HFOV < 170° なら直線投影、それ以外は等距離SAMPLES_PER_EDGE: 直線投影は8、魚眼系投影は32- 影クリップ距離:
renderRange × 4(現実的な障害物距離での遠端クリップを十分に覆う) - 遠端水平クランプ: 地上交差が水平距離で
renderRangeを超える光線は、その水平方向に沿ってrenderRangeへ投影し直される (ポリゴン遠端弧における水平線近くの逸れた線アーチファクトを防止する)。
ゼロから数学を再現するには: 公開された { x, y, h, panDeg, tiltDeg, hfovDeg, vfovDeg, renderRangeM, pixelsPerMeter } 形状で CameraFrustum を構築し; sH, sV ∈ [−1, +1] で像面の隅を辺あたり8標本 (魚眼は32) で 標本化し; 各光線を z = 0 平面と交差させ; 影差分のために ポリゴンクリッピング差分を適用する。ポリゴンBooleanステップにおけるIEEE 754順序効果を除けば、 結果はライブデザイナーが描画するポリゴンと浮動小数点精度 (実スケール入力で サブミリメートル) で一致する。
参考文献
- IEC 62676-4:2014 (改訂を含む) — セキュリティアプリケーション用映像監視システム、第4部: 適用ガイドライン (DORI、対象距離)。同一の本文がEN 62676-4として欧州版で公表されている。
- Hartley & Zisserman, Multiple View Geometry in Computer Vision, 第2版, Cambridge University Press, 2004 (カメラ投影モデル、視錐台幾何学)。
- Kannala & Brandt, "A generic camera model and calibration method for conventional, wide-angle, and fish-eye lenses," IEEE TPAMI, 2006 (直線投影/等距離/等立体角投影の比較)。
- Martínez, Rueda & Feito, "A new algorithm for computing Boolean operations on polygons," Computers & Geosciences, 2009 — オリジナルのMartínez–Ruedaアルゴリズム。2013年の続編 "A simple algorithm for Boolean operations on polygons" (Advances in Engineering Software) が、ここで使用しているpolygon-clippingライブラリに実装されたバリアントである。