CCTVPLANNER.IO / RESEARCH
Géométrie de la couverture caméra CCTV
Comment une caméra inclinée et montée capte le sol — géométrie du frustum, projections d'objectif et le standard de distance DORI, dérivés à partir des premiers principes et illustrés par le même code qui anime le concepteur en direct.
1. Du frustum à l'empreinte au sol
Une caméra sténopé (pinhole) définit un frustum de vue : une pyramide à quatre faces s'étendant du centre optique de la caméra aux limites de son plan image. Chaque pixel est un rayon partant du centre optique passant par le point correspondant sur le plan image. Pour trouver la région du sol couverte par une caméra, on intersecte chaque rayon avec le plan du sol et on garde les points qui tombent dans la portée de la caméra.
Pour une caméra montée à la hauteur h, inclinée d'un angle α sous l'horizontale, avec un champ de vision vertical vfov, les quatre rayons d'angle du frustum tracent l'enveloppe extérieure de la couverture au sol. Dans les configurations de montage typiques (où α + vfov/2 < 90°), la forme est un trapèze tronqué aux coins courbés — pas un triangle ni un secteur partant du point de montage de la caméra. Lorsque α + vfov/2 approche 90° (caméras dôme plafonnières très inclinées), le bord inférieur de l'image commence à toucher le sol à la base de la caméra et le trapèze dégénère vers un secteur.
Vue de dessus de l'empreinte au sol pour une caméra avec h = 4 m, tilt = 30°, hfov = 106°. Le bord inférieur de l'image rencontre le sol à courte distance devant la caméra ; les bords latéraux s'évasent ; le bord lointain est limité par la portée effective de la caméra.
2. Intersection des bords inférieur et supérieur
Le rayon du bord inférieur (sV = −1 dans les coordonnées du plan image) touche le sol à :
d_near = h / tan(α + vfov/2)
Le rayon du bord supérieur (sV = +1) touche à :
d_far = h / tan(α − vfov/2) si α > vfov/2 (entièrement sous l'horizon)
non borné si α ≤ vfov/2 (bord supérieur au-dessus de l'horizon
— limité à renderRange)Vue de côté, h = 4 m, tilt = 15°, vfov = 50°. Les deux lignes bleues sont les rayons des bords inférieur et supérieur du frustum ; la bande bleue épaisse au sol marque la zone que la caméra couvre sur le plancher (de d_near à renderRange). Le coin rouge sous le mât est la région géométrique que l'objectif ne peut pas résoudre.
Pour les bords latéraux (sH = ±1), la même construction s'applique dans le plan horizontal : chaque rayon latéral balaye le HFOV de la caméra à chaque hauteur du plan image. Pour les objectifs rectilinéaires (l'optique CCTV dominante) ceux-ci se projettent en lignes droites divergentes au sol, formant les côtés inclinés du trapèze. Pour les objectifs fisheye la même projection est courbée et l'empreinte devient un disque courbé.
3. L'angle mort géométrique
Pour toute caméra montée au-dessus du sol et inclinée de moins de 90° − vfov/2, il existe une région directement sous le montage qu'aucun rayon du frustum ne peut atteindre. Le bord inférieur de l'image pointe à α + vfov/2 sous l'horizontale ; tout ce qui est plus proche que d_near est entièrement hors de l'image de la caméra.
À inclinaison et FOV constants, l'angle mort est linéaire en la hauteur de montage — la formule se réduit à d_near = h × cot(α + vfov/2), où le terme cotangente est fixé par l'objectif. Une caméra inclinée à 15° avec un FOV vertical de 50° a un angle mort de 4,8 m à 4 m de hauteur de montage et de 23,8 m à 20 m — un rapport de 5×, identique au rapport de hauteurs. Le rapport entre la zone aveugle et la zone couverte est la contrainte dominante pour le placement des caméras sur des mâts hauts.
Même objectif, même inclinaison de 15°, juste monté plus haut (h = 20 m) : l'angle mort croît proportionnellement à la hauteur, indépendamment de la focale ou de la taille du capteur.
4. Distances DORI (EN 62676-4)
Le standard DORI (Détecter / Observer / Reconnaître / Identifier) définit des densités de pixels cibles à des distances spécifiques de la caméra. Selon EN 62676-4, ces distances sont des distances horizontales au sol entre la caméra et la cible — pas des distances inclinées le long de l'axe optique. Les fiches techniques des principaux fabricants (Axis, Hikvision, Dahua, Bosch) suivent cette convention.
Sur une carte 2D, les quatre paliers DORI sont simplement des arcs concentriques de rayons égaux à leurs distances horizontales, découpés par le polygone d'empreinte de la caméra. Là où l'empreinte n'atteint pas ce rayon, la partie correspondante de l'arc est masquée — pour les caméras à HFOV étroit, le cône est trop fin pour contenir le cercle complet, donc les extrémités latérales de chaque palier sont coupées, et pour les caméras à courte portée, les paliers les plus grands tombent entièrement hors du cône.
Anneaux DORI sous forme d'arcs au sol à l'intérieur de l'empreinte de la caméra. h = 4 m, tilt = 20°, hfov = 90°, range = 70 m. Les valeurs de palier indiquées (8 / 16 / 32 / 64 m) sont illustratives pour une caméra 1080p typique à ~90° HFOV ; les distances horizontales réelles dépendent du capteur et de la focale. EN 62676-4 spécifie les densités de pixels à chaque palier (Identifier : 250 px/m, Reconnaître : 125 px/m, Observer : 62 px/m, Détecter : 25 px/m), d'où les portées horizontales par caméra sont dérivées.
Interprétation en distance inclinée (le cas échéant). Si une fiche technique particulière spécifie la portée comme distance inclinée depuis l'objectif — peu courant pour l'optique CCTV générale, occasionnel pour les spécifications d'objectifs thermiques ou téléobjectifs — la portée horizontale équivalente au sol est √(d_slant² − h²). Une caméra montée à 6 m avec une portée d'identification inclinée de 8 m couvre un rayon horizontal de 5,3 m (√(64 − 36)). Le module de géométrie expose les deux formes ; le diagramme de cette page utilise l'interprétation horizontale standard.
5. Types de projection d'objectif
Différentes conceptions d'objectifs projettent l'angle depuis l'axe optique vers le rayon du plan image différemment. Les trois projections utilisées en CCTV sont :
| Projection | r(θ) | Plage typique |
|---|---|---|
| Rectilinéaire | f · tan θ | HFOV ≲ 120° (la plupart des objectifs fixes et varifocaux CCTV) |
| Équidistante | f · θ | HFOV ≳ 140° (panoramique / fisheye) |
| Équisolide | 2 f · sin(θ/2) | Objectifs fisheye préservant l'angle solide |
θ = angle depuis l'axe optique (radians) ; f = focale. r(θ) est la distance radiale sur le plan image depuis le point principal.
Pour les objectifs rectilinéaires, le facteur latéral hors-axe tan(θ) dépasse 1 dès que θ passe 45° de l'axe optique (c'est-à-dire lorsque HFOV dépasse 90°), et croît sans borne lorsque θ s'approche de 90° (HFOV approchant 180°). Dans l'optique réelle, l'étirement des coins devient sévère bien avant que les mathématiques ne divergent — la plupart des concepteurs d'objectifs passent à du verre quasi-fisheye autour de 120–140° HFOV, avec des objectifs fisheye complets au-dessus de ~170°.
CCTVplanner.io sélectionne actuellement la projection rectilinéaire jusqu'à 170° HFOV ; au-delà, l'étirement des coins devient suffisamment grand pour qu'on bascule vers équidistante par stabilité numérique. Les caméras entre ~140° et 170° HFOV sont donc modélisées avec les mathématiques rectilinéaires même si leur objectif physique est plus proche du fisheye — nous l'acceptons en échange d'une géométrie de coin plus simple. La projection équisolide est supportée dans la couche géométrie (pour les données fabricants qui la spécifient explicitement), bien qu'il n'y ait pas encore de bascule côté utilisateur.
Avertissement fiche technique : HFOV vs DFOV
De nombreux fabricants — en particulier les grandes marques asiatiques (Dahua, Hikvision, Uniview, Tiandy) — donnent sur la fiche technique un seul nombre de champ de vision qui est en réalité le champ de vision diagonal (DFOV), pas l'horizontal. Saisir une valeur DFOV dans un outil qui attend HFOV produit une empreinte 10–15 % trop large, avec l'erreur concentrée aux bords latéraux où la densité de pixels compte le plus.
Pour un capteur de rapport horizontal:vertical a (par ex. 16:9 → a = 16/9), la conversion est :
tan(HFOV/2) = tan(DFOV/2) × a / √(a² + 1) tan(VFOV/2) = tan(DFOV/2) × 1 / √(a² + 1)
La transformation est non linéaire en l'angle : les raccourcis linéaires tentants de la forme HFOV ≈ k × DFOV fonctionnent pour des objectifs étroits mais échouent gravement quand le champ de vision s'élargit. Pour un capteur 16:9, les conversions exactes sont :
| DFOV (16:9) | HFOV exact | VFOV exact | Erreur du raccourci linéaire |
|---|---|---|---|
| 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° |
« Erreur du raccourci linéaire » = HFOV de la formule naïve HFOV = (a / √(a²+1)) × DFOV moins la valeur exacte. Le raccourci sous-estime HFOV de 5–13° dans la plage grand-angle qui domine l'optique CCTV moderne — bien plus que la tolérance de fiche technique de ±1° supposée au §9. Utilisez toujours la formule basée sur tan ou les valeurs exactes ci-dessus.
La base de données de caméras de CCTVplanner.io stocke HFOV (la mesure CCTV canonique) et convertit à l'import pour les caméras dont les fiches techniques ne spécifient que DFOV. Lors de la saisie manuelle d'une caméra, vérifiez les unités avant de mettre le nombre dans le champ HFOV — se tromper ici est l'une des deux raisons les plus fréquentes pour lesquelles les empreintes du relevé sur site ne correspondent pas à l'installation réelle (l'autre étant le rapport de forme du capteur).
6. Obstacles, ombres et empreinte visible
Les murs, clôtures et structures hautes bloquent les rayons de la caméra. Pour calculer l'empreinte visible, nous modélisons chaque obstacle opaque comme un polygone (périmètre fermé) ou une polyligne (clôture ouverte) et projetons un quadrilatère d'ombre par segment : chaque segment est étendu en s'éloignant de la caméra sur plusieurs fois la portée de rendu. L'union de ces ombres par segment est la silhouette de l'obstacle plus tout ce qui se trouve derrière vu depuis la caméra.
L'empreinte visible est alors empreinte − ⋃ ombres, calculée par l'algorithme de différence de polygones de Martínez–Rueda. Le résultat est un polygone (ou une liste de polygones disjoints quand un obstacle divise le cône) dont les bords s'alignent proprement avec l'arc lointain du frustum et chaque mur bloquant.
Pour l'analyse 3D-aware, un obstacle plus court que la hauteur de montage de la caméra ne bloque pas le rayon entièrement — il projette une ombre finie au sol s'étendant derrière l'obstacle. Pour un mur à distance horizontale d de la caméra, avec hauteur de montage h_cam et hauteur du sommet de l'obstacle h_obs, l'ombre s'étend du mur à une distance horizontale de :
d_shadow_end = d × h_cam / (h_cam − h_obs) pour h_cam > h_obs Pour h_obs ≥ h_cam, l'obstacle bloque la ligne de vue entièrement — équivalent à une ombre infinie. Le concepteur traite ce cas comme un bloqueur entièrement opaque (pas de vision par-dessus) et applique la même projection d'ombre par segment utilisée dans le chemin 2D de découpe d'obstacles.
Activer « Utiliser la hauteur verticale (3D) » sur un bâtiment ou une clôture dans le concepteur le bascule sur ce modèle de projection d'ombre. Quand la caméra est plus basse que l'obstacle (ou de hauteur égale), la bascule n'a aucun effet.
7. Projection multi-étages
L'intersection frustum-sol se généralise trivialement à n'importe quel plan horizontal. Remplacez l'équation du sol z = 0 par z = z_target, résolvez la même équation rayon-plan pour chaque rayon d'angle, et le résultat est l'empreinte de la caméra sur cet étage cible. Une caméra montée au deuxième étage d'un atrium couvre le rez-de-chaussée par la même construction qu'une caméra montée au sol couvre son propre étage, juste avec une valeur différente de z_target et un décalage vertical modifié entre la caméra et le plan cible.
La couche mathématique de la projection multi-étages est livrée dans le module de géométrie aujourd'hui ; l'UI de sélection d'étage et la prévisualisation de scène Three.js sont prévues pour une version future.
8. Hypothèses et limites
Chaque formule ci-dessus repose sur un ensemble d'hypothèses simplificatrices. Elles tiennent pour la majorité des scénarios CCTV à montage fixe mais échouent dans des conditions spécifiques ; nous les documentons pour que les praticiens puissent décider quand faire confiance au modèle.
Hypothèses du modèle
- Sol plat (le sol est le plan
z = 0) — pas de pente du terrain, pas de courbure terrestre. - Caméra statique au moment de la capture — pas de mouvement PTZ pendant l'image, pas de vibration.
- Modèle sténopé — pas de distorsion d'objectif. Les objectifs réels introduisent une distorsion radiale et tangentielle de Brown–Conrady (coefficients
k₁, k₂, p₁, p₂) que nous ne modélisons pas. - Calibration idéale — le pas pixel du capteur, la focale et le centre optique correspondent exactement aux spécifications du fabricant.
- Pas d'artefacts de rolling shutter ; toute l'image est capturée à un instant.
- Pas de roulis caméra — l'axe optique n'est tourné que par pan et tilt ; le capteur reste horizontal.
- Trajet optique unique — pas de réfraction de dôme en verre, pas de surfaces réfléchissantes dans la scène.
- La réfraction atmosphérique est négligeable aux portées CCTV typiques (erreur sub-1 cm à 50 m).
Quand le modèle échoue
- Terrain en pente. L'empreinte au sol se décale asymétriquement : le côté en aval s'étend plus loin que ce que prédit le modèle, le côté amont se comprime. L'erreur est environ
±h · tan(slope)par mètre de distance horizontale. - Distorsion d'objectifs grand-angle. Au-delà de ~110° HFOV, la projection rectilinéaire diverge de la projection réelle de l'objectif aux coins de 1–5 %. Les projections équidistante / équisolide sont disponibles dans la couche de géométrie pour ces cas (voir §5).
- Caméras dôme verre. Le dôme introduit un petit décalage réfractif à l'entrée de l'objectif (mm aux hauteurs de montage typiques). Pour un travail DORI haute précision sur des installations en verre miroir, cela devient non trivial ; pour la planification générale, c'est en dessous d'autres sources d'erreur.
- Optique à rebonds multiples. Les réflexions des murs en verre, plafonds miroirs ou sols polis ne sont pas tracées. Le modèle renvoie uniquement l'empreinte en ligne de vue.
- PTZ en mouvement. Le modèle donne l'empreinte instantanée à un réglage pan/tilt. La couverture d'un PTZ en mouvement dans le temps est l'empreinte balayée, pas l'instantanée.
- Tolérance d'installation. Les angles d'installation réels s'écartent de la conception de 1–3° (erreur du technicien). La section suivante quantifie comment cela se propage à l'erreur au sol.
9. Sensibilité aux erreurs
Les erreurs dans les paramètres d'entrée (hauteur de montage, angle d'inclinaison, FOV) se propagent à des erreurs de position au sol dans l'empreinte. Pour l'intersection du bord inférieur avec le sol d_near = h / tan(α + vfov/2), les dérivées partielles donnent :
∂d_near/∂h = 1 / tan(α + vfov/2) = d_near / h ∂d_near/∂α = −h / sin²(α + vfov/2) (radians) ∂d_near/∂vfov = −h / (2 · sin²(α + vfov/2)) (radians)
Les dérivées angulaires sont en radians ; multipliez par π/180 (≈ 0,01745) pour convertir en par-degré. Le tableau ci-dessous applique la conversion.
Pour une configuration typique (h = 10 m, tilt = 15°, vfov = 50° → d_near ≈ 11,9 m), de petites erreurs sur chaque paramètre produisent les déviations suivantes en d_near :
| Paramètre | Erreur d'entrée | Δ d_near | Note |
|---|---|---|---|
| tilt α | ±1° | ±0,42 m | résolution typique d'inclinomètre |
| tilt α | ±3° | ±1,27 m | montage à l'œil sur support |
| hauteur h | ±0,5 m | ±0,59 m | mesure au mètre, mât inaccessible |
| vfov | ±1° | ±0,21 m | arrondi de fiche technique |
| tous combinés | RMS | ~1,4 m | à 3° tilt + 0,5 m hauteur + 1° fov |
Le terme dominant est l'incertitude de l'angle d'installation : dans la configuration ci-dessus, chaque degré d'erreur d'inclinaison coûte ~42 cm de précision de position au sol à d_near. Un inclinomètre laser à résolution 0,1° maintient l'erreur d_near liée à l'inclinaison sous 5 cm ; une installation à l'œil sur support est précise à environ ±1 m. Pour la vérification des paliers DORI (où la différence entre les anneaux de Reconnaissance et d'Identification peut être de 2–3 m), l'inclinaison doit être mesurée, pas estimée.
La même analyse de dérivées partielles s'applique à la largeur latérale de l'empreinte via HFOV — une erreur de 1° HFOV produit environ 2 · d · tan(½°) ≈ 1,7 % d'erreur d'étalement latéral à la distance d. À 30 m de portée, cela fait ~52 cm d'incertitude latérale, c'est pourquoi nous traitons les valeurs de HFOV fabricant comme ±1° plutôt qu'exactes.
10. Reproductibilité
Toutes les formules de cet article sont implémentées littéralement dans le module de géométrie livré avec le concepteur de CCTVplanner.io. Le module est couvert par une suite complète de tests unitaires couvrant les projections rectilinéaire / équidistante / équisolide, les cas limites d'angle mort, la projection DORI au sol, le découpage d'obstacles par opérations booléennes sur polygones et l'extension multi-étages. Chaque diagramme de cette page est rendu en appelant les mêmes fonctions que le concepteur en direct utilise.
Points d'entrée clés
buildFrustum(args)— base de caméra (forward / right / upCam) + métadonnées du frustumcomputeGroundFootprint(frustum, projection)— polygone échantillonné (8 / 32 points par bord)slantToGroundRadius(frustum, slantM)— √(slant² − h²) avec vérification d'accessibilitécomputeSegmentShadow / computePolygonShadow— projection d'ombre au sol par segment / par polygonesubtractObstacleShadows(footprint, shadows)— différence de polygones Martínez–RuedacomputeFloorFootprint(frustum, z, projection)— variante multi-étages
Constantes par défaut
defaultLensProjection: rectilinéaire quand HFOV < 170°, sinon équidistanteSAMPLES_PER_EDGE: 8 pour rectilinéaire, 32 pour les projections fisheye- Distance de découpe d'ombre :
renderRange × 4(couvre le découpage de bord lointain à toute distance d'obstacle raisonnable) - Limitation horizontale du bord lointain : les rayons dont l'intersection avec le sol dépasse
renderRangeen distance horizontale sont projetés versrenderRangele long de leur direction horizontale (empêche les artefacts de lignes parasites près de l'horizon sur l'arc lointain du polygone).
Reproduire les mathématiques à partir de zéro : construisez un CameraFrustum avec la forme documentée { x, y, h, panDeg, tiltDeg, hfovDeg, vfovDeg, renderRangeM, pixelsPerMeter } ; échantillonnez les coins du plan image à sH, sV ∈ [−1, +1] avec 8 échantillons par bord (32 pour fisheye) ; intersectez chaque rayon avec le plan z = 0 ; appliquez la différence polygon-clipping pour la soustraction d'ombres. Modulo les effets d'ordre IEEE 754 dans l'étape booléenne sur polygones, le résultat correspond au polygone rendu par le concepteur en direct à la précision virgule flottante (sub-millimétrique pour les entrées à l'échelle réelle).
Références
- IEC 62676-4:2014 (avec amendements) — Systèmes de surveillance vidéo pour applications de sécurité, partie 4 : lignes directrices d'application (DORI, distances cibles). Texte identique publié sous EN 62676-4 dans l'édition européenne.
- Hartley et Zisserman, Multiple View Geometry in Computer Vision, 2e éd., Cambridge University Press, 2004 (modèles de projection caméra, géométrie du frustum).
- Kannala et Brandt, « A generic camera model and calibration method for conventional, wide-angle, and fish-eye lenses », IEEE TPAMI, 2006 (comparaison des projections rectilinéaire / équidistante / équisolide).
- Martínez, Rueda et Feito, « A new algorithm for computing Boolean operations on polygons », Computers & Geosciences, 2009 — algorithme Martínez–Rueda original. Le suivi de 2013 « A simple algorithm for Boolean operations on polygons » (Advances in Engineering Software) est la variante implémentée dans la bibliothèque polygon-clipping utilisée ici.