CCTVPLANNER.IO / RESEARCH
Geometría de la cobertura de cámara CCTV
Cómo una cámara inclinada y montada proyecta su imagen sobre el suelo — geometría del frustum, proyecciones de objetivos y el estándar de distancias DORI, derivados desde primeros principios e ilustrados con el mismo código que impulsa el diseñador en vivo.
1. Del frustum a la huella en el suelo
Una cámara estenopeica (pinhole) define un frustum de visión: una pirámide de cuatro caras que se extiende desde el centro óptico de la cámara hasta los límites de su plano de imagen. Cada píxel es un rayo desde el centro óptico que pasa por el punto correspondiente en el plano de imagen. Para hallar la región del suelo que cubre una cámara, intersecamos cada rayo con el plano del suelo y conservamos los puntos que caen dentro del alcance de la cámara.
Para una cámara montada a una altura h, inclinada un ángulo α bajo la horizontal, con un campo de visión vertical vfov, los cuatro rayos esquineros del frustum trazan la envolvente exterior de la cobertura sobre el suelo. En configuraciones de montaje típicas (cuando α + vfov/2 < 90°), la forma es un trapecio truncado con esquinas curvas — no un triángulo ni un sector que arranque del punto de montaje. A medida que α + vfov/2 se acerca a 90° (cámaras domo de techo muy inclinadas), la arista inferior de la imagen empieza a golpear el suelo en la base de la cámara y el trapecio degenera hacia un sector.
Vista cenital de la huella en el suelo para una cámara con h = 4 m, tilt = 30°, hfov = 106°. La arista inferior de la imagen toca el suelo a poca distancia delante de la cámara; las aristas laterales se abren hacia fuera; la arista lejana queda limitada por el alcance efectivo de la cámara.
2. Intersección de las aristas inferior y superior
El rayo de la arista inferior (sV = −1 en coordenadas del plano de imagen) toca el suelo en:
d_near = h / tan(α + vfov/2)
El rayo de la arista superior (sV = +1) toca en:
d_far = h / tan(α − vfov/2) si α > vfov/2 (totalmente bajo el horizonte)
no acotado si α ≤ vfov/2 (arista superior sobre el horizonte
— limitada a renderRange)Vista lateral, h = 4 m, tilt = 15°, vfov = 50°. Las dos líneas azules son los rayos de las aristas inferior y superior del frustum; la franja azul gruesa en el suelo marca el área que la cámara proyecta en el piso (de d_near a renderRange). La cuña roja bajo el mástil es la región geométrica que el objetivo no puede resolver.
Para las aristas laterales (sH = ±1) la misma construcción se aplica en el plano horizontal: cada rayo lateral barre el HFOV de la cámara a cada altura del plano de imagen. Para objetivos rectilíneos (la óptica dominante en CCTV) éstos se proyectan como líneas rectas divergentes en el suelo, dando los lados inclinados del trapecio. Para objetivos ojo de pez la misma proyección es curva y la huella se convierte en un disco curvo.
3. La zona ciega geométrica
Para cualquier cámara montada sobre el suelo e inclinada menos de 90° − vfov/2, hay una región directamente bajo el montaje que ningún rayo del frustum puede alcanzar. La arista inferior de la imagen apunta a α + vfov/2 bajo la horizontal; todo lo que está más cerca que d_near queda completamente fuera de la imagen de la cámara.
Manteniendo constantes la inclinación y el FOV, la zona ciega escala linealmente con la altura de montaje — la fórmula se reduce a d_near = h × cot(α + vfov/2), donde el término cotangente queda fijado por el objetivo. Una cámara inclinada 15° con un FOV vertical de 50° tiene una zona ciega de 4,8 m a 4 m de altura de montaje y de 23,8 m a 20 m — una proporción de 5×, idéntica a la proporción de alturas. La proporción entre área ciega y área de cobertura es la restricción dominante en la colocación de cámaras sobre mástiles altos.
Mismo objetivo, misma inclinación de 15°, solo montada más alta (h = 20 m): la zona ciega crece proporcionalmente a la altura, independientemente de la distancia focal o el tamaño del sensor.
4. Distancias DORI (EN 62676-4)
El estándar DORI (Detectar / Observar / Reconocer / Identificar) define densidades objetivo de píxeles por objetivo a distancias específicas desde la cámara. Según EN 62676-4 esas distancias son distancias horizontales sobre el suelo entre la cámara y el objetivo — no distancias inclinadas a lo largo del eje óptico. Las hojas de datos de los principales fabricantes (Axis, Hikvision, Dahua, Bosch) siguen esta convención.
En un mapa 2D los cuatro niveles DORI son simplemente arcos concéntricos con radios iguales a sus distancias horizontales, recortados por el polígono de huella de la cámara. Donde la huella no alcanza ese radio, la parte correspondiente del arco queda oculta — para cámaras de HFOV estrecho el cono es demasiado fino para contener el círculo completo, así que los extremos laterales de cada nivel se recortan, y para cámaras de corto alcance los niveles más grandes quedan totalmente fuera del cono.
Anillos DORI como arcos sobre el suelo dentro de la huella de la cámara. h = 4 m, tilt = 20°, hfov = 90°, range = 70 m. Los valores mostrados (8 / 16 / 32 / 64 m) son ilustrativos para una cámara 1080p típica a ~90° HFOV; las distancias horizontales reales dependen del sensor y la distancia focal. EN 62676-4 especifica las densidades de píxeles en cada nivel (Identificar: 250 px/m, Reconocer: 125 px/m, Observar: 62 px/m, Detectar: 25 px/m), de las cuales se derivan los alcances horizontales por cámara.
Interpretación como distancia inclinada (cuando aplique). Si una hoja de datos específica indica el alcance como distancia inclinada desde el objetivo — poco común en óptica CCTV de propósito general, ocasional en especificaciones de teleobjetivo o térmicas — el alcance horizontal equivalente sobre el suelo es √(d_slant² − h²). Una cámara montada a 6 m con un alcance inclinado de 8 m para Identificar cubre un radio horizontal de 5,3 m (√(64 − 36)). El módulo de geometría expone ambas formas; el diagrama de esta página usa la interpretación horizontal estándar.
5. Tipos de proyección de objetivo
Distintos diseños de objetivo proyectan el ángulo desde el eje óptico al radio en el plano de imagen de manera diferente. Las tres proyecciones usadas en CCTV son:
| Proyección | r(θ) | Rango típico |
|---|---|---|
| Rectilínea | f · tan θ | HFOV ≲ 120° (la mayoría de objetivos fijos y varifocales CCTV) |
| Equidistante | f · θ | HFOV ≳ 140° (panorámicas / ojo de pez) |
| Equisólida | 2 f · sin(θ/2) | Objetivos ojo de pez que conservan ángulo sólido |
θ = ángulo desde el eje óptico (radianes); f = distancia focal. r(θ) es la distancia radial en el plano de imagen desde el punto principal.
Para objetivos rectilíneos, el factor lateral fuera de eje tan(θ) supera 1 una vez que θ pasa los 45° desde el eje óptico (es decir, cuando HFOV supera 90°), y crece sin cota cuando θ se acerca a 90° (HFOV acercándose a 180°). En la óptica del mundo real, el estiramiento de las esquinas se vuelve grave bastante antes de que las matemáticas diverjan — la mayoría de los diseñadores de objetivos pasan a vidrio cuasi ojo de pez sobre 120–140° HFOV, con objetivos ojo de pez completos por encima de ~170°.
CCTVplanner.io selecciona actualmente la proyección rectilínea hasta 170° HFOV, más allá del cual el estiramiento de esquinas crece lo suficiente como para que cambiemos a equidistante por estabilidad numérica. Las cámaras entre ~140° y 170° HFOV se modelan, por tanto, con matemáticas rectilíneas aunque su objetivo físico se acerque al ojo de pez — aceptamos esto a cambio de una geometría de esquinas más sencilla. La proyección equisólida está soportada en la capa de geometría (para datos de fabricante que la especifiquen explícitamente), aunque aún no existe un interruptor de cara al usuario.
Advertencia sobre hojas de datos: HFOV vs. DFOV
Muchos fabricantes — especialmente las grandes marcas asiáticas (Dahua, Hikvision, Uniview, Tiandy) — indican en la hoja de datos un único número de campo de visión que en realidad es el campo diagonal (DFOV), no el horizontal. Introducir un valor DFOV en una herramienta que espera HFOV produce una huella un 10–15 % demasiado ancha, con el error concentrado en las aristas laterales donde más importa la densidad de píxeles.
Para un sensor con relación de aspecto horizontal:vertical a (p. ej. 16:9 → a = 16/9), la conversión es:
tan(HFOV/2) = tan(DFOV/2) × a / √(a² + 1) tan(VFOV/2) = tan(DFOV/2) × 1 / √(a² + 1)
La transformación es no lineal en el ángulo: los atajos lineales tentadores de la forma HFOV ≈ k × DFOV funcionan para objetivos estrechos pero fallan estrepitosamente al ampliar el campo de visión. Para un sensor 16:9 las conversiones exactas son:
| DFOV (16:9) | HFOV exacto | VFOV exacto | Error del atajo lineal |
|---|---|---|---|
| 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° |
«Error del atajo lineal» = HFOV de la fórmula ingenua HFOV = (a / √(a²+1)) × DFOV menos el valor exacto. El atajo subestima HFOV en 5–13° en el rango gran angular que domina la óptica CCTV moderna — mucho más que la tolerancia de hoja de datos de ±1° asumida en §9. Use siempre la fórmula basada en tan o los valores exactos anteriores.
La base de datos de cámaras de CCTVplanner.io almacena HFOV (la medida canónica en CCTV) y convierte al importar cámaras cuyas hojas de datos solo especifican DFOV. Al introducir una cámara personalizada, comprueba las unidades antes de poner el número en el campo HFOV — un error aquí es una de las dos razones más frecuentes por las que las huellas de levantamiento in situ no coinciden con la realidad instalada (la otra es la relación de aspecto del sensor).
6. Obstáculos, sombras y la huella visible
Muros, vallas y estructuras altas bloquean los rayos de la cámara. Para calcular la huella visible modelamos cada obstáculo opaco como un polígono (perímetro cerrado) o polilínea (valla abierta) y proyectamos un cuadrilátero de sombra por cada segmento: cada segmento se extiende alejándose de la cámara hasta varias veces el alcance de renderizado. La unión de estas sombras por segmento es la silueta del obstáculo más todo lo que hay detrás vista desde la cámara.
La huella visible es entonces huella − ⋃ sombras, calculada con el algoritmo de diferencia de polígonos de Martínez–Rueda. El resultado es un polígono (o una lista de polígonos disjuntos cuando un obstáculo divide el cono) cuyas aristas se alinean limpiamente con el arco lejano del frustum y con cada muro bloqueante.
Para análisis 3D-aware, un obstáculo más bajo que la altura de montaje de la cámara no bloquea el rayo por completo — proyecta una sombra finita en el suelo que se extiende detrás del obstáculo. Para un muro a distancia horizontal d de la cámara, con altura de montaje h_cam y altura del obstáculo h_obs, la sombra se extiende desde el muro hasta una distancia horizontal:
d_shadow_end = d × h_cam / (h_cam − h_obs) para h_cam > h_obs Si h_obs ≥ h_cam el obstáculo bloquea la línea de visión por completo — equivalente a una sombra infinita. El diseñador trata este caso como un bloqueador completamente opaco (sin ver por encima) y aplica la misma proyección de sombra por segmento usada en la ruta 2D de recorte de obstáculos.
Activar «Usar altura vertical (3D)» en un edificio o valla del diseñador lo cambia a este modelo de proyección de sombras. Cuando la cámara es más baja que el obstáculo (o de igual altura) el interruptor no tiene efecto.
7. Proyección multiplanta
La intersección frustum-suelo se generaliza trivialmente a cualquier plano horizontal. Sustituye la ecuación del suelo z = 0 por z = z_target, resuelve la misma ecuación rayo-plano para cada rayo esquinero, y el resultado es la huella de la cámara sobre la planta de destino. Una cámara montada en la segunda planta de un atrio cubre la planta baja mediante la misma construcción que una cámara montada al nivel del suelo cubre su propia planta, solo que con un valor distinto de z_target y un desplazamiento vertical modificado entre la cámara y el plano objetivo.
La capa matemática de la proyección multiplanta ya está disponible en el módulo de geometría; la UI de selector de planta y la previsualización de escena Three.js están planificadas para una versión futura.
8. Suposiciones y límites
Cada fórmula anterior reposa sobre un conjunto de suposiciones simplificadoras. Se cumplen en la mayoría de los escenarios CCTV de montaje fijo, pero fallan bajo condiciones específicas; las documentamos para que el profesional pueda decidir cuándo confiar en el modelo.
Suposiciones del modelo
- Suelo plano (el suelo es el plano
z = 0) — sin pendiente del terreno, sin curvatura terrestre. - Cámara estática en el momento de captura — sin movimiento PTZ durante el fotograma, sin vibración.
- Modelo de cámara estenopeica — sin distorsión de objetivo. Los objetivos reales introducen distorsión radial y tangencial de Brown–Conrady (coeficientes
k₁, k₂, p₁, p₂) que no modelamos. - Calibración ideal — el paso de píxel del sensor, distancia focal y centro óptico coinciden exactamente con las especificaciones del fabricante.
- Sin artefactos de obturador rodante (rolling shutter); la imagen completa se captura en un instante.
- Sin rotación de la cámara alrededor del eje óptico (roll) — el eje óptico solo se rota por pan y tilt; el sensor permanece horizontal.
- Trayectoria óptica única — sin refracción de cúpula de cristal, sin superficies reflectantes en la escena.
- La refracción atmosférica es despreciable a alcances CCTV típicos (error sub-1 cm a 50 m).
Cuándo el modelo falla
- Terreno inclinado. La huella sobre el suelo se desplaza asimétricamente: el lado descendente se extiende más de lo que predice el modelo, el lado ascendente se comprime. El error es aproximadamente
±h · tan(slope)por metro de distancia horizontal. - Distorsión de objetivos gran angular. Por encima de ~110° HFOV, la proyección rectilínea diverge de la proyección real del objetivo en un 1–5 % en las esquinas. Las proyecciones equidistante / equisólida están disponibles en la capa de geometría para estos casos (ver §5).
- Cámaras de cúpula de cristal. La cúpula introduce un pequeño desplazamiento refractivo en la entrada del objetivo (mm a alturas de montaje típicas). Para trabajo DORI de alta precisión sobre instalaciones con vidrio espejado se vuelve no trivial; para planificación general queda por debajo de otras fuentes de error.
- Óptica de rebotes múltiples. Las reflexiones desde paredes de cristal, techos espejados o suelos pulidos no se trazan. El modelo devuelve solo la huella en línea de visión.
- PTZ en movimiento. El modelo da la huella instantánea para un ajuste de pan/tilt. La cobertura de un PTZ en movimiento a lo largo del tiempo es la huella barrida, no la instantánea.
- Tolerancia de instalación. Los ángulos reales de instalación se desvían del diseño en 1–3° (error del técnico). La siguiente sección cuantifica cómo esto se propaga al error en el suelo.
9. Sensibilidad al error
Los errores en los parámetros de entrada (altura de montaje, ángulo de inclinación, FOV) se propagan a errores de posición en la huella sobre el suelo. Para la intersección de la arista inferior con el suelo d_near = h / tan(α + vfov/2), las derivadas parciales dan:
∂d_near/∂h = 1 / tan(α + vfov/2) = d_near / h ∂d_near/∂α = −h / sin²(α + vfov/2) (radianes) ∂d_near/∂vfov = −h / (2 · sin²(α + vfov/2)) (radianes)
Las derivadas angulares están en radianes; multiplica por π/180 (≈ 0,01745) para convertir a por grado. La tabla de abajo aplica la conversión.
Para una configuración típica (h = 10 m, tilt = 15°, vfov = 50° → d_near ≈ 11,9 m), pequeños errores en cada parámetro producen las siguientes desviaciones en d_near:
| Parámetro | Error de entrada | Δ d_near | Nota |
|---|---|---|---|
| tilt α | ±1° | ±0,42 m | resolución típica de inclinómetro |
| tilt α | ±3° | ±1,27 m | montaje a ojo en soporte |
| altura h | ±0,5 m | ±0,59 m | cinta métrica, mástil inaccesible |
| vfov | ±1° | ±0,21 m | redondeo en hoja de datos |
| todos combinados | RMS | ~1,4 m | a 3° tilt + 0,5 m altura + 1° fov |
El término dominante es la incertidumbre del ángulo de instalación: en la configuración anterior, cada grado de error en la inclinación cuesta ~42 cm de precisión de posición sobre el suelo en d_near. Un inclinómetro láser con resolución de 0,1° mantiene el error de d_near por inclinación bajo 5 cm; una instalación a ojo en soporte tiene una precisión de aproximadamente ±1 m. Para verificación de niveles DORI (donde la diferencia entre los anillos de Reconocer e Identificar puede ser de 2–3 m), la inclinación debe medirse, no estimarse.
El mismo análisis de derivadas parciales se aplica a la anchura lateral de la huella a través del HFOV — un error de 1° HFOV produce aproximadamente 2 · d · tan(½°) ≈ 1,7 % de error de dispersión lateral a la distancia d. A 30 m de alcance son ~52 cm de incertidumbre lateral, por lo que tratamos las cifras de HFOV del fabricante como ±1° en lugar de exactas.
10. Reproducibilidad
Todas las fórmulas de este artículo están implementadas literalmente en el módulo de geometría que viene con el diseñador de CCTVplanner.io. El módulo está cubierto por una completa suite de pruebas unitarias que abarca proyecciones rectilínea / equidistante / equisólida, casos límite de zona ciega, proyección DORI sobre el suelo, recorte de obstáculos por operaciones booleanas sobre polígonos y la extensión multiplanta. Cada diagrama de esta página se renderiza llamando a las mismas funciones que usa el diseñador en vivo.
Puntos de entrada clave
buildFrustum(args)— base de cámara (forward / right / upCam) + metadatos del frustumcomputeGroundFootprint(frustum, projection)— polígono muestreado (8 / 32 puntos por arista)slantToGroundRadius(frustum, slantM)— √(slant² − h²) con verificación de alcanzabilidadcomputeSegmentShadow / computePolygonShadow— proyección de sombra sobre el suelo por segmento / por polígonosubtractObstacleShadows(footprint, shadows)— diferencia de polígonos Martínez–RuedacomputeFloorFootprint(frustum, z, projection)— variante multiplanta
Constantes por defecto
defaultLensProjection: rectilínea cuando HFOV < 170°, equidistante en otro casoSAMPLES_PER_EDGE: 8 para rectilínea, 32 para proyecciones ojo de pez- Distancia de recorte de sombra:
renderRange × 4(cubre el recorte de la arista lejana a cualquier distancia razonable de obstáculo) - Limitación horizontal de arista lejana: los rayos cuya intersección con el suelo supera
renderRangeen distancia horizontal se proyectan de vuelta arenderRangea lo largo de su dirección horizontal (evita artefactos de líneas perdidas cerca del horizonte en el arco lejano del polígono).
Reproducir las matemáticas desde cero: construye un CameraFrustum con la forma documentada { x, y, h, panDeg, tiltDeg, hfovDeg, vfovDeg, renderRangeM, pixelsPerMeter }; muestrea las esquinas del plano de imagen en sH, sV ∈ [−1, +1] con 8 muestras por arista (32 para ojo de pez); intersecta cada rayo con el plano z = 0; aplica la diferencia de polígonos para sustracción de sombras. Salvo efectos de orden IEEE 754 en el paso booleano sobre polígonos, el resultado coincide con el polígono renderizado por el diseñador en vivo hasta la precisión de coma flotante (sub-milimétrica para entradas a escala real).
Referencias
- IEC 62676-4:2014 (con enmiendas) — Sistemas de videovigilancia para aplicaciones de seguridad, parte 4: directrices de aplicación (DORI, distancias objetivo). Texto idéntico publicado como EN 62676-4 en la edición europea.
- Hartley y Zisserman, Multiple View Geometry in Computer Vision, 2.ª ed., Cambridge University Press, 2004 (modelos de proyección de cámara, geometría del frustum).
- Kannala y Brandt, «A generic camera model and calibration method for conventional, wide-angle, and fish-eye lenses», IEEE TPAMI, 2006 (comparación de proyecciones rectilínea / equidistante / equisólida).
- Martínez, Rueda y Feito, «A new algorithm for computing Boolean operations on polygons», Computers & Geosciences, 2009 — algoritmo Martínez–Rueda original. La continuación de 2013 «A simple algorithm for Boolean operations on polygons» (Advances in Engineering Software) es la variante implementada en la biblioteca polygon-clipping usada aquí.