CCTVPLANNER.IO / RICERCA
La geometria della copertura delle telecamere CCTV
Come una telecamera montata e inclinata riprende il terreno — geometria del frustum, proiezioni dell'obiettivo e lo standard di distanza DORI, derivati dai principi primi e illustrati con lo stesso codice che alimenta il designer in tempo reale.
1. Dal frustum all'impronta a terra
Una fotocamera stenopeica definisce un frustum visivo: una piramide a quattro lati che si estende dal centro ottico della telecamera fino ai confini del suo piano dell'immagine. Ogni pixel è un raggio dal centro ottico attraverso il punto corrispondente sul piano dell'immagine. Per trovare quale regione del terreno copre una telecamera, intersechiamo ogni raggio con il piano del terreno e conserviamo i punti che ricadono entro la portata della telecamera.
Per una telecamera montata ad altezza h, inclinata di un angolo α sotto l'orizzontale, con un campo visivo verticale vfov, i quattro raggi angolari del frustum tracciano l'inviluppo esterno della copertura sul terreno. Nelle configurazioni di montaggio tipiche (dove α + vfov/2 < 90°), la forma è un trapezio troncato con angoli curvi — non un triangolo né un settore originato dal montaggio della telecamera. Quando α + vfov/2 si avvicina ai 90° (telecamere a cupola montate molto inclinate a soffitto), il bordo inferiore dell'immagine inizia a colpire il terreno alla base della telecamera e il trapezio degenera verso un settore.
Impronta a terra in vista dall'alto per una telecamera con h = 4 m, inclinazione = 30°, hfov = 106°. Il bordo inferiore dell'immagine incontra il terreno a breve distanza davanti alla telecamera; i bordi laterali si allargano a ventaglio; il bordo lontano è limitato dalla portata effettiva della telecamera.
2. L'intersezione del bordo inferiore / superiore
Il raggio del bordo inferiore (sV = −1 in coordinate del piano dell'immagine) colpisce il terreno a:
d_near = h / tan(α + vfov/2)
Il raggio del bordo superiore (sV = +1) colpisce a:
d_far = h / tan(α − vfov/2) se α > vfov/2 (interamente sotto l'orizzonte)
illimitata se α ≤ vfov/2 (bordo superiore sopra l'orizzonte
— limitato a renderRange)Vista laterale, h = 4 m, inclinazione = 15°, vfov = 50°. Le due linee blu sono i raggi del bordo inferiore e superiore del frustum; la spessa fascia blu sul terreno indica dove la telecamera riprende il pavimento (da d_near a renderRange). Il cuneo rosso sotto il palo è la regione geometrica che l'obiettivo non può risolvere.
Per i bordi laterali (sH = ±1), si applica la stessa costruzione nel piano orizzontale: ciascun raggio laterale spazia attraverso l'HFOV della telecamera ad ogni altezza del piano dell'immagine. Per gli obiettivi rettilinei (l'ottica CCTV dominante) questi proiettano linee rette divergenti sul terreno, producendo i lati inclinati del trapezio. Per gli obiettivi fisheye la stessa mappatura è curva e l'impronta diventa un disco curvo.
3. La zona cieca geometrica
Per qualsiasi telecamera montata sopra il terreno e inclinata meno di 90° − vfov/2, esiste una regione direttamente sotto il montaggio che nessun raggio del frustum può raggiungere. Il bordo inferiore dell'immagine punta a α + vfov/2 sotto l'orizzontale; tutto ciò che è più vicino di d_near è interamente fuori dall'immagine della telecamera.
Mantenendo costanti inclinazione e FOV, la zona cieca scala linearmente con l'altezza di montaggio — la formula si riduce a d_near = h × cot(α + vfov/2), dove il termine cotangente è fissato dall'obiettivo. Una telecamera inclinata di 15° con FOV verticale di 50° ha una zona cieca di 4,8 m a 4 m di altezza di montaggio e 23,8 m a 20 m — un rapporto 5× che corrisponde al rapporto delle altezze. Il rapporto tra area cieca e area di copertura è il vincolo dominante per il posizionamento di telecamere su pali alti.
Stesso obiettivo, stessa inclinazione di 15°, solo montato più in alto (h = 20 m): la zona cieca cresce proporzionalmente all'altezza, indipendentemente dalla lunghezza focale o dalle dimensioni del sensore.
4. Distanze DORI (EN 62676-4)
Lo standard DORI (Detect / Observe / Recognize / Identify — Rilevare / Osservare / Riconoscere / Identificare) definisce densità di pixel sul bersaglio a distanze specifiche dalla telecamera. Secondo la norma EN 62676-4 queste distanze sono distanze orizzontali al suolo tra la telecamera e il bersaglio — non distanze inclinate lungo l'asse ottico. Le schede tecniche dei principali produttori (Axis, Hikvision, Dahua, Bosch) seguono questa convenzione.
Su una mappa 2D i quattro livelli DORI sono semplicemente archi concentrici a raggi pari alle loro distanze orizzontali, ritagliati dal poligono dell'impronta della telecamera. Ovunque l'impronta non raggiunga quel raggio, la parte corrispondente dell'arco viene nascosta — per le telecamere a HFOV stretto il cono è troppo sottile per contenere l'intero cerchio, quindi le estremità laterali di ciascun livello vengono ritagliate, e per le telecamere a corto raggio i livelli più grandi cadono interamente fuori dal cono.
Anelli DORI come archi al suolo all'interno dell'impronta della telecamera. h = 4 m, inclinazione = 20°, hfov = 90°, portata = 70 m. I valori di livello mostrati (8 / 16 / 32 / 64 m) sono indicativi per una tipica telecamera 1080p a ~90° HFOV; le distanze orizzontali effettive dipendono dal sensore e dalla lunghezza focale. La norma EN 62676-4 specifica le densità di pixel per ogni livello (Identificare: 250 px/m, Riconoscere: 125 px/m, Osservare: 62 px/m, Rilevare: 25 px/m), dalle quali si derivano le portate orizzontali per ciascuna telecamera.
Interpretazione a distanza inclinata (quando applicabile). Se una specifica scheda tecnica indica la portata come distanza inclinata dall'obiettivo — raro per ottiche CCTV generiche, occasionalmente visto per specifiche di obiettivi termici o teleobiettivi — la portata orizzontale equivalente al suolo è √(d_slant² − h²). Una telecamera montata a 6 m con una distanza inclinata di Identificazione di 8 m copre un raggio orizzontale di 5,3 m (√(64 − 36)). Il modulo geometrico espone entrambe le forme; il diagramma di pagina utilizza l'interpretazione orizzontale standard.
5. Tipi di proiezione dell'obiettivo
Diversi disegni di obiettivi mappano l'angolo dall'asse ottico al raggio sul piano dell'immagine in modo diverso. Le tre proiezioni utilizzate in CCTV sono:
| Proiezione | r(θ) | Intervallo tipico |
|---|---|---|
| Rettilinea | f · tan θ | HFOV ≲ 120° (la maggior parte degli obiettivi CCTV fissi e varifocali) |
| Equidistante | f · θ | HFOV ≳ 140° (panoramici / fisheye) |
| Equisolida | 2 f · sin(θ/2) | Obiettivi fisheye che preservano l'angolo solido |
θ = angolo dall'asse ottico (radianti); f = lunghezza focale. r(θ) è la distanza radiale sul piano dell'immagine dal punto principale.
Per gli obiettivi rettilinei, il fattore laterale fuori asse tan(θ) supera 1 quando θ supera i 45° dall'asse ottico (cioè quando l'HFOV supera i 90°), e cresce senza limiti man mano che θ si avvicina ai 90° (HFOV che si avvicina a 180°). Nelle ottiche reali, lo stiramento agli angoli diventa grave ben prima che la matematica diverga — la maggior parte dei progettisti di obiettivi passa a vetro quasi-fisheye intorno a 120–140° HFOV, con obiettivi fisheye completi utilizzati oltre i ~170°.
CCTVplanner.io attualmente seleziona la proiezione rettilinea fino a 170° HFOV, oltre i quali lo stiramento agli angoli cresce abbastanza da farci passare alla equidistante per stabilità numerica. Le telecamere tra ~140° e 170° HFOV sono quindi modellate con la matematica rettilinea anche se il loro obiettivo fisico è più vicino al fisheye — accettiamo questo in cambio di una geometria angolare più semplice. La proiezione equisolida è supportata nello strato geometrico (per dati di produttori che la specificano esplicitamente), sebbene non vi sia ancora un interruttore visibile all'utente.
Avvertenza sulle schede tecniche: HFOV vs DFOV
Molti produttori — in particolare i grandi marchi asiatici (Dahua, Hikvision, Uniview, Tiandy) — indicano un singolo numero di campo visivo nella scheda tecnica che è in realtà il campo visivo diagonale (DFOV), non orizzontale. Inserire un valore DFOV in uno strumento che si aspetta HFOV produce un'impronta del 10–15 % troppo larga, con l'errore concentrato sui bordi laterali, dove la densità di pixel conta di più.
Per un sensore con rapporto d'aspetto orizzontale-verticale a (ad es. 16:9 → a = 16/9), la conversione è:
tan(HFOV/2) = tan(DFOV/2) × a / √(a² + 1) tan(VFOV/2) = tan(DFOV/2) × 1 / √(a² + 1)
La mappatura è non lineare nell'angolo: scorciatoie lineari allettanti della forma HFOV ≈ k × DFOV funzionano per obiettivi stretti ma falliscono gravemente quando il campo visivo si allarga. Per un sensore 16:9 le conversioni esatte sono:
| DFOV (16:9) | HFOV esatto | VFOV esatto | Errore scorciatoia lineare |
|---|---|---|---|
| 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° |
"Errore scorciatoia lineare" = HFOV dalla formula ingenua HFOV = (a / √(a²+1)) × DFOV meno il valore esatto. La scorciatoia sottostima l'HFOV di 5–13° nell'intervallo grandangolare che domina le ottiche CCTV moderne — molto più della tolleranza di scheda tecnica di ±1° assunta nel §9. Utilizzare sempre la formula basata su tan o i valori esatti sopra riportati.
Il database delle telecamere di CCTVplanner.io memorizza l'HFOV (la misurazione canonica CCTV) e converte all'importazione per le telecamere le cui schede tecniche specificano solo il DFOV. Quando si inserisce manualmente una telecamera personalizzata, controllare le unità prima di inserire il numero nel campo HFOV — sbagliare questo è una delle due ragioni più comuni per cui le impronte del sopralluogo non corrispondono alla realtà installata (l'altra è il rapporto d'aspetto del sensore).
6. Ostacoli, ombre e impronta visibile
Pareti, recinzioni e strutture alte bloccano i raggi della telecamera. Per calcolare l'impronta visibile modelliamo ogni ostacolo opaco come un poligono (perimetro chiuso) o una polilinea (recinzione aperta) e proiettiamo un quadrilatero d'ombra per ogni segmento: ciascun segmento viene esteso lontano dalla telecamera per diverse volte la portata di rendering. L'unione di queste ombre per segmento è la silhouette dell'ostacolo più tutto ciò che si trova dietro di esso visto dalla telecamera.
L'impronta visibile è quindi impronta − ⋃ ombre, calcolata tramite l'algoritmo di differenza poligonale di Martínez–Rueda. Il risultato è un poligono (o un elenco di poligoni disgiunti, quando un ostacolo divide il cono) i cui bordi si allineano in modo pulito sia con l'arco lontano del frustum sia con ogni parete bloccante.
Per l'analisi consapevole della 3D, un ostacolo più basso dell'altezza di montaggio della telecamera non blocca completamente il raggio — proietta un'ombra finita al suolo che si estende dietro l'ostacolo. Per una parete a distanza orizzontale d dalla telecamera, con altezza di montaggio h_cam e altezza superiore dell'ostacolo h_obs, l'ombra si estende dalla parete a una distanza orizzontale di:
d_shadow_end = d × h_cam / (h_cam − h_obs) per h_cam > h_obs Per h_obs ≥ h_cam l'ostacolo blocca completamente la linea di vista — equivalente a un'ombra infinita. Il designer tratta questo caso come un blocco completamente opaco (nessuna visione oltre) e applica la stessa proiezione d'ombra per segmento utilizzata nel percorso di clipping degli ostacoli 2D.
Attivando "Usa altezza verticale (3D)" su un edificio o una recinzione nel designer si passa a questo modello con proiezione d'ombra. Quando la telecamera è più bassa dell'ostacolo (o di pari altezza), l'interruttore non ha effetto.
7. Proiezione multi-piano
L'intersezione frustum-terreno si generalizza banalmente a qualsiasi piano orizzontale. Si sostituisce l'equazione del pavimento z = 0 con z = z_target, si risolve la stessa equazione raggio-piano per ogni raggio angolare, e il risultato è l'impronta della telecamera su quel piano di destinazione. Una telecamera montata al secondo piano di un atrio copre il piano terra con la stessa costruzione con cui una telecamera montata a terra copre il proprio piano, solo con un valore diverso di z_target e un offset verticale modificato tra la telecamera e il piano di destinazione.
Lo strato matematico per la proiezione multi-piano è già presente oggi nel modulo geometrico; l'interfaccia di selezione del piano e l'anteprima della scena Three.js sono in coda per una release futura.
8. Assunzioni e limitazioni
Ogni formula sopra si basa su un insieme di assunzioni semplificative. Esse valgono per la maggior parte degli scenari CCTV con montaggio fisso ma vengono meno in condizioni specifiche; le documentiamo in modo che i professionisti possano decidere quando fidarsi del modello.
Assunzioni del modello
- Terreno piatto (il pavimento è il piano
z = 0) — nessuna pendenza del terreno, nessuna curvatura terrestre. - Telecamera statica al momento dell'acquisizione — nessun movimento PTZ durante il fotogramma, nessuna vibrazione.
- Modello stenopeico della fotocamera — nessuna distorsione dell'obiettivo. Gli obiettivi reali introducono distorsione radiale e tangenziale di Brown–Conrady (coefficienti
k₁, k₂, p₁, p₂) che non modelliamo. - Calibrazione ideale — passo dei pixel del sensore, lunghezza focale e centro ottico corrispondono esattamente alle specifiche del produttore.
- Nessun artefatto rolling-shutter; l'intera immagine viene catturata in un istante.
- Nessun rollio della telecamera — l'asse ottico è ruotato solo da pan e inclinazione; il sensore rimane orizzontale.
- Cammino ottico singolo — nessuna rifrazione dovuta a cupola in vetro, nessuna superficie riflettente nella scena.
- La rifrazione atmosferica è trascurabile alle portate CCTV tipiche (errore inferiore a 1 cm a 50 m).
Quando il modello fallisce
- Terreno inclinato. L'impronta a terra si sposta in modo asimmetrico: il lato a valle si estende più di quanto previsto dal modello, il lato a monte si comprime. L'errore è approssimativamente
±h · tan(pendenza)per metro di distanza orizzontale. - Distorsione di obiettivi grandangolari. Oltre i ~110° HFOV la proiezione rettilinea diverge dalla mappatura effettiva dell'obiettivo dell'1–5 % agli angoli. Per questi casi sono disponibili nello strato geometrico le proiezioni equidistante / equisolida (vedi §5).
- Telecamere con cupola in vetro. La cupola introduce un piccolo spostamento per rifrazione all'ingresso dell'obiettivo (millimetri ad altezze di montaggio tipiche). Per lavori DORI ad alta precisione su installazioni a vetro specchiato questo diventa non trascurabile; per la pianificazione generale è inferiore ad altre fonti di errore.
- Ottiche a rimbalzi multipli. Le riflessioni da pareti in vetro, soffitti specchiati o pavimenti lucidati non vengono tracciate. Il modello restituisce solo l'impronta in linea di vista.
- PTZ in movimento. Il modello fornisce l'impronta istantanea a un'unica impostazione di pan/inclinazione. La copertura di una PTZ in movimento nel tempo è l'impronta spazzata, non quella istantanea.
- Tolleranza di installazione. Gli angoli reali di installazione si discostano dal progetto di 1–3° (errore del tecnico). La sezione successiva quantifica come ciò si propaga all'errore al suolo.
9. Sensibilità all'errore
Gli errori nei parametri di input (altezza di montaggio, angolo di inclinazione, FOV) si propagano agli errori di posizione al suolo nell'impronta. Per l'intersezione al suolo del bordo inferiore d_near = h / tan(α + vfov/2), le derivate parziali danno:
∂d_near/∂h = 1 / tan(α + vfov/2) = d_near / h ∂d_near/∂α = −h / sin²(α + vfov/2) (radianti) ∂d_near/∂vfov = −h / (2 · sin²(α + vfov/2)) (radianti)
Le derivate parziali angolari sono in radianti; moltiplicare per π/180 (≈ 0,01745) per convertire in per grado. La tabella seguente applica la conversione.
Per una configurazione tipica (h = 10 m, inclinazione = 15°, vfov = 50° → d_near ≈ 11,9 m), piccoli errori in ciascun parametro producono le seguenti deviazioni in d_near:
| Parametro | Errore in input | Δ d_near | Note |
|---|---|---|---|
| inclinazione α | ±1° | ±0,42 m | risoluzione tipica dell'inclinometro |
| inclinazione α | ±3° | ±1,27 m | installazione a occhio sulla staffa |
| altezza h | ±0,5 m | ±0,59 m | misurazione con metro, palo inaccessibile |
| vfov | ±1° | ±0,21 m | arrotondamento di scheda tecnica |
| tutti combinati | RMS | ~1,4 m | a 3° inclinazione + 0,5 m altezza + 1° fov |
Il termine dominante è l'incertezza dell'angolo di installazione: nella configurazione sopra, ogni grado di errore di inclinazione costa ~42 cm in precisione di posizione al suolo a d_near. Un inclinometro laser con risoluzione di 0,1° mantiene l'errore di d_near dovuto all'inclinazione al di sotto di 5 cm; un'installazione su staffa fatta a occhio è buona fino a circa ±1 m. Per la verifica dei livelli DORI (dove la differenza tra anelli al suolo di Riconoscimento e Identificazione può essere di 2–3 m), l'inclinazione deve essere misurata, non stimata.
La stessa analisi delle derivate parziali si applica alla larghezza laterale dell'impronta tramite l'HFOV — un errore di 1° nell'HFOV produce circa 2 · d · tan(½°) ≈ 1,7 % di errore di estensione laterale alla distanza d. A 30 m di portata sono ~52 cm di incertezza laterale, motivo per cui trattiamo i valori HFOV dei produttori come ±1° anziché come esatti.
10. Riproducibilità
Tutte le formule in questo articolo sono implementate alla lettera nel modulo geometrico fornito con il designer di CCTVplanner.io. Il modulo è coperto da una suite di test unitari completa che comprende le proiezioni rettilinea / equidistante / equisolida, casi limite della zona cieca, proiezione a terra DORI, clipping di ostacoli con operazioni booleane su poligoni e l'estensione multi-piano. Ogni diagramma di questa pagina è renderizzato chiamando le stesse funzioni utilizzate dal designer in tempo reale.
Punti di ingresso principali
buildFrustum(args)— base della telecamera (forward / right / upCam) + metadati del frustumcomputeGroundFootprint(frustum, projection)— poligono campionato (8 / 32 punti per bordo)slantToGroundRadius(frustum, slantM)— √(slant² − h²) con verifica di raggiungibilitàcomputeSegmentShadow / computePolygonShadow— proiezione d'ombra al suolo per segmento / per poligonosubtractObstacleShadows(footprint, shadows)— differenza poligonale di Martínez–RuedacomputeFloorFootprint(frustum, z, projection)— variante multi-piano
Costanti predefinite
defaultLensProjection: rettilinea quando HFOV < 170°, equidistante altrimentiSAMPLES_PER_EDGE: 8 per rettilinea, 32 per proiezioni fisheye- Distanza di clipping dell'ombra:
renderRange × 4(copre il clipping del bordo lontano a qualsiasi distanza ragionevole dell'ostacolo) - Limitazione orizzontale del bordo lontano: i raggi la cui intersezione con il terreno supera
renderRangein distanza orizzontale vengono proiettati indietro arenderRangelungo la loro direzione orizzontale (impedisce artefatti di linee vaganti vicino all'orizzonte sull'arco lontano del poligono).
Riprodurre la matematica da zero: costruire un CameraFrustum con la struttura pubblicata { x, y, h, panDeg, tiltDeg, hfovDeg, vfovDeg, renderRangeM, pixelsPerMeter }; campionare gli angoli del piano dell'immagine a sH, sV ∈ [−1, +1] con 8 campioni per bordo (32 per fisheye); intersecare ogni raggio con il piano z = 0; applicare la differenza di poligoni per la sottrazione delle ombre. A meno degli effetti di ordinamento IEEE 754 nello step booleano sui poligoni, il risultato corrisponde al poligono renderizzato dal designer in tempo reale con precisione in virgola mobile (errore sub-millimetrico su input in scala reale).
Riferimenti
- IEC 62676-4:2014 (con emendamenti) — Sistemi di videosorveglianza per applicazioni di sicurezza, parte 4: linee guida applicative (DORI, distanze del bersaglio). Testo identico pubblicato come EN 62676-4 nell'edizione europea.
- Hartley & Zisserman, Multiple View Geometry in Computer Vision, 2ª ed., Cambridge University Press, 2004 (modelli di proiezione della fotocamera, geometria del frustum).
- Kannala & Brandt, "A generic camera model and calibration method for conventional, wide-angle, and fish-eye lenses," IEEE TPAMI, 2006 (confronto delle proiezioni rettilinea / equidistante / equisolida).
- Martínez, Rueda & Feito, "A new algorithm for computing Boolean operations on polygons," Computers & Geosciences, 2009 — algoritmo originale di Martínez–Rueda. Il seguito del 2013 "A simple algorithm for Boolean operations on polygons" (Advances in Engineering Software) è la variante implementata nella libreria polygon-clipping qui utilizzata.