CCTVPLANNER.IO / PESQUISA
A geometria da cobertura de câmeras CCTV
Como uma câmera montada e inclinada captura o solo — geometria do frustum, projeções de lentes e o padrão de distância DORI, derivados a partir de princípios fundamentais e ilustrados com o mesmo código que alimenta o designer em tempo real.
1. Do frustum à projeção no solo
Uma câmera estenopeica (pinhole) define um frustum visual: uma pirâmide de quatro lados que se estende do centro óptico da câmera até as fronteiras do seu plano de imagem. Cada pixel é um raio do centro óptico através do ponto correspondente no plano de imagem. Para encontrar qual região do solo uma câmera cobre, intersectamos cada raio com o plano do solo e mantemos os pontos que caem dentro do alcance da câmera.
Para uma câmera montada à altura h, inclinada por um ângulo α abaixo da horizontal, com um campo de visão vertical vfov, os quatro raios de canto do frustum traçam o envelope externo da cobertura no solo. Em configurações de montagem típicas (onde α + vfov/2 < 90°), a forma é um trapézio truncado com cantos curvos — não um triângulo nem um setor com origem no ponto de montagem. Quando α + vfov/2 se aproxima de 90° (câmeras dome muito inclinadas montadas no teto), a borda inferior da imagem começa a atingir o solo na base da câmera e o trapézio degenera em direção a um setor.
Projeção no solo em vista superior para uma câmera com h = 4 m, inclinação = 30°, hfov = 106°. A borda inferior da imagem encontra o solo a uma curta distância à frente da câmera; as bordas laterais se abrem em leque; a borda distante é limitada pelo alcance efetivo da câmera.
2. A interseção da borda inferior / superior
O raio da borda inferior (sV = −1 em coordenadas do plano de imagem) atinge o solo em:
d_near = h / tan(α + vfov/2)
O raio da borda superior (sV = +1) atinge em:
d_far = h / tan(α − vfov/2) se α > vfov/2 (inteiramente abaixo do horizonte)
ilimitado se α ≤ vfov/2 (borda superior acima do horizonte
— limitado a renderRange)Vista lateral, h = 4 m, inclinação = 15°, vfov = 50°. As duas linhas azuis são os raios de borda inferior e superior do frustum; a faixa azul espessa no solo marca onde a câmera captura o piso (de d_near até renderRange). A cunha vermelha sob o mastro é a região geométrica que a lente não consegue resolver.
Para as bordas laterais (sH = ±1), a mesma construção se aplica no plano horizontal: cada raio lateral varre através do HFOV da câmera em cada altura do plano de imagem. Para lentes retilíneas (a óptica CCTV dominante), estes projetam linhas retas divergentes no solo, produzindo os lados inclinados do trapézio. Para lentes fisheye o mesmo mapeamento é curvo e a projeção se torna um disco curvo.
3. A zona cega geométrica
Para qualquer câmera montada acima do solo e inclinada menos de 90° − vfov/2, existe uma região diretamente abaixo do ponto de montagem que nenhum raio do frustum pode alcançar. A borda inferior da imagem aponta a α + vfov/2 abaixo da horizontal; tudo mais próximo do que d_near está inteiramente fora da imagem da câmera.
Mantendo a inclinação e o FOV constantes, a zona cega cresce linearmente com a altura de montagem — a fórmula se reduz a d_near = h × cot(α + vfov/2), onde o termo cotangente é fixado pela lente. Uma câmera inclinada 15° com FOV vertical de 50° tem uma zona cega de 4,8 m a 4 m de altura de montagem e 23,8 m a 20 m — uma proporção de 5× correspondente à proporção de altura. A relação entre área cega e área de cobertura é a restrição dominante no posicionamento de câmeras em mastros altos.
Mesma lente, mesma inclinação de 15°, apenas montada mais alto (h = 20 m): a zona cega cresce proporcionalmente à altura, independentemente da distância focal ou do tamanho do sensor.
4. Distâncias DORI (EN 62676-4)
O padrão DORI (Detect / Observe / Recognize / Identify — Detectar / Observar / Reconhecer / Identificar) define densidades de pixels no alvo a distâncias específicas da câmera. Conforme a EN 62676-4, essas distâncias são distâncias horizontais no solo entre a câmera e o alvo — não distâncias inclinadas ao longo do eixo óptico. As fichas técnicas dos principais fabricantes (Axis, Hikvision, Dahua, Bosch) seguem essa convenção.
Em um mapa 2D, os quatro níveis DORI são simplesmente arcos concêntricos em raios iguais às suas distâncias horizontais, recortados pelo polígono da projeção da câmera. Onde a projeção não alcança aquele raio, a parte correspondente do arco fica oculta — para câmeras com HFOV estreito o cone é fino demais para conter o círculo completo, então as extremidades laterais de cada nível são recortadas, e para câmeras de curto alcance os níveis maiores caem inteiramente fora do cone.
Anéis DORI como arcos no solo dentro da projeção da câmera. h = 4 m, inclinação = 20°, hfov = 90°, alcance = 70 m. Os valores de nível mostrados (8 / 16 / 32 / 64 m) são ilustrativos para uma câmera 1080p típica a ~90° HFOV; as distâncias horizontais reais dependem do sensor e da distância focal. A EN 62676-4 especifica as densidades de pixels em cada nível (Identificar: 250 px/m, Reconhecer: 125 px/m, Observar: 62 px/m, Detectar: 25 px/m), a partir das quais se derivam os alcances horizontais por câmera.
Interpretação por distância inclinada (quando aplicável). Se uma ficha técnica específica indicar o alcance como uma distância inclinada a partir da lente — incomum para óptica CCTV de uso geral, ocasionalmente visto em especificações de lentes térmicas ou teleobjetivas — o alcance horizontal equivalente no solo é √(d_slant² − h²). Uma câmera montada a 6 m com alcance inclinado de Identificação de 8 m cobre um raio horizontal de 5,3 m (√(64 − 36)). O módulo de geometria expõe ambas as formas; o diagrama da página usa a interpretação horizontal padrão.
5. Tipos de projeção de lente
Diferentes designs de lentes mapeiam o ângulo a partir do eixo óptico para o raio do plano de imagem de maneira diferente. As três projeções utilizadas em CCTV são:
| Projeção | r(θ) | Faixa típica |
|---|---|---|
| Retilínea | f · tan θ | HFOV ≲ 120° (maioria das lentes CCTV fixas e varifocais) |
| Equidistante | f · θ | HFOV ≳ 140° (panorâmica / fisheye) |
| Equissólida | 2 f · sin(θ/2) | Lentes fisheye que preservam o ângulo sólido |
θ = ângulo a partir do eixo óptico (radianos); f = distância focal. r(θ) é a distância radial no plano de imagem a partir do ponto principal.
Para lentes retilíneas, o fator lateral fora do eixo tan(θ) excede 1 quando θ ultrapassa 45° do eixo óptico (ou seja, quando o HFOV excede 90°), e cresce sem limite à medida que θ se aproxima de 90° (HFOV se aproximando de 180°). Em ópticas reais, o estiramento dos cantos torna-se severo bem antes de a matemática divergir — a maioria dos projetistas de lentes faz a transição para vidro quase-fisheye em torno de 120–140° HFOV, com lentes fisheye completas usadas acima de ~170°.
O CCTVplanner.io atualmente seleciona a projeção retilínea até 170° HFOV, além do qual o estiramento dos cantos cresce o suficiente para mudarmos para a equidistante, por estabilidade numérica. Câmeras entre ~140° e 170° HFOV são, portanto, modeladas com matemática retilínea mesmo que sua lente física esteja mais próxima de fisheye — aceitamos isso em troca de uma geometria de canto mais simples. A projeção equissólida é suportada na camada de geometria (para dados de fabricantes que a especificam explicitamente), embora ainda não exista uma chave visível ao usuário para ela.
Ressalva da ficha técnica: HFOV vs DFOV
Muitos fabricantes — particularmente as grandes marcas asiáticas (Dahua, Hikvision, Uniview, Tiandy) — informam um único número de campo de visão na ficha técnica que na verdade é o campo de visão diagonal (DFOV), e não o horizontal. Inserir um valor DFOV em uma ferramenta que espera HFOV produz uma projeção 10–15 % larga demais, com o erro concentrado nas bordas laterais — onde a densidade de pixels mais importa.
Para um sensor com proporção horizontal-vertical a (ex.: 16:9 → a = 16/9), a conversão é:
tan(HFOV/2) = tan(DFOV/2) × a / √(a² + 1) tan(VFOV/2) = tan(DFOV/2) × 1 / √(a² + 1)
O mapeamento é não linear no ângulo: atalhos lineares tentadores da forma HFOV ≈ k × DFOV funcionam para lentes estreitas, mas falham gravemente quando o campo de visão se amplia. Para um sensor 16:9 as conversões exatas são:
| DFOV (16:9) | HFOV exato | VFOV exato | Erro do atalho linear |
|---|---|---|---|
| 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° |
"Erro do atalho linear" = HFOV pela fórmula ingênua HFOV = (a / √(a²+1)) × DFOV menos o valor exato. O atalho subestima o HFOV em 5–13° na faixa grande-angular que domina a óptica CCTV moderna — muito mais do que a tolerância de ±1° das fichas técnicas assumida no §9. Use sempre a fórmula baseada em tan ou os valores exatos acima.
O banco de dados de câmeras do CCTVplanner.io armazena o HFOV (a medida canônica de CCTV) e converte na importação para câmeras cujas fichas técnicas especificam apenas o DFOV. Ao inserir uma câmera personalizada manualmente, verifique as unidades antes de digitar o número no campo HFOV — errar nisso é uma das duas razões mais comuns para projeções de levantamento não corresponderem à realidade instalada (a outra é a proporção do sensor).
6. Obstáculos, sombras e a projeção visível
Paredes, cercas e estruturas altas bloqueiam raios da câmera. Para calcular a projeção visível, modelamos cada obstáculo opaco como um polígono (perímetro fechado) ou polilinha (cerca aberta) e projetamos um quadrilátero de sombra por segmento: cada segmento é estendido para longe da câmera em várias vezes o alcance de renderização. A união dessas sombras por segmento é a silhueta do obstáculo mais tudo o que está atrás dele, conforme visto pela câmera.
A projeção visível é então projeção − ⋃ sombras, calculada via o algoritmo de diferença de polígonos de Martínez–Rueda. O resultado é um polígono (ou uma lista de polígonos disjuntos, quando um obstáculo divide o cone) cujas bordas se alinham limpamente tanto com o arco distante do frustum quanto com cada parede bloqueadora.
Para análise consciente de 3D, um obstáculo mais baixo que a altura de montagem da câmera não bloqueia o raio inteiramente — ele projeta uma sombra finita no solo, estendendo-se atrás do obstáculo. Para uma parede a uma distância horizontal d da câmera, com altura de montagem h_cam e altura do topo do obstáculo h_obs, a sombra se estende da parede até uma distância horizontal de:
d_shadow_end = d × h_cam / (h_cam − h_obs) para h_cam > h_obs Para h_obs ≥ h_cam o obstáculo bloqueia totalmente a linha de visão — equivalente a uma sombra infinita. O designer trata esse caso como um bloqueador totalmente opaco (sem visão por cima) e aplica a mesma projeção de sombra por segmento usada no caminho de recorte de obstáculos 2D.
Ativar "Usar altura vertical (3D)" em um edifício ou cerca no designer alterna para esse modelo com projeção de sombra. Quando a câmera é mais baixa do que o obstáculo (ou de altura igual), a chave não tem efeito.
7. Projeção em múltiplos andares
A interseção frustum-solo se generaliza trivialmente para qualquer plano horizontal. Substitua a equação do piso z = 0 por z = z_target, resolva a mesma equação raio-plano para cada raio de canto, e o resultado é a projeção da câmera naquele andar de destino. Uma câmera montada no segundo andar de um átrio cobre o térreo pela mesma construção pela qual uma câmera montada no chão cobre seu próprio andar, apenas com um valor diferente de z_target e um deslocamento vertical modificado entre a câmera e o plano de destino.
A camada matemática para projeção em múltiplos andares já está disponível no módulo de geometria hoje; a interface de seleção de andar e a pré-visualização de cena Three.js estão em fila para uma versão futura.
8. Premissas e limitações
Toda fórmula acima se apoia em um conjunto de premissas simplificadoras. Elas são válidas para a maioria dos cenários CCTV de montagem fixa, mas falham em condições específicas; documentamo-las para que os profissionais possam decidir quando confiar no modelo.
Premissas do modelo
- Solo plano (o piso é o plano
z = 0) — sem inclinação de terreno, sem curvatura terrestre. - Câmera estática no momento da captura — sem movimento PTZ durante o frame, sem vibração.
- Modelo de câmera estenopeica — sem distorção de lente. Lentes reais introduzem distorção radial e tangencial de Brown–Conrady (coeficientes
k₁, k₂, p₁, p₂) que não modelamos. - Calibração ideal — passo de pixel do sensor, distância focal e centro óptico correspondem exatamente às especificações do fabricante.
- Sem artefatos de obturador rolante; toda a imagem é capturada em um instante.
- Sem rolagem da câmera — o eixo óptico é rotacionado apenas por pan e inclinação; o sensor permanece horizontal.
- Caminho óptico único — sem refração de cúpula de vidro, sem superfícies refletivas na cena.
- A refração atmosférica é desprezível em alcances CCTV típicos (erro abaixo de 1 cm a 50 m).
Quando o modelo falha
- Terreno inclinado. A projeção no solo se desloca assimetricamente: o lado a jusante se estende mais do que o modelo prevê, o lado a montante se comprime. O erro é aproximadamente
±h · tan(inclinação)por metro de distância horizontal. - Distorção de lente grande-angular. Acima de ~110° HFOV a projeção retilínea diverge do mapeamento real da lente em 1–5 % nos cantos. As projeções equidistante / equissólida estão disponíveis na camada de geometria para esses casos (ver §5).
- Câmeras com cúpula de vidro. A cúpula introduz um pequeno deslocamento por refração na entrada da lente (milímetros em alturas de montagem típicas). Para trabalho DORI de alta precisão em instalações com vidro espelhado isso se torna não trivial; para planejamento geral está abaixo de outras fontes de erro.
- Óptica de múltiplas reflexões. Reflexões de paredes de vidro, tetos espelhados ou pisos polidos não são traçadas. O modelo retorna apenas a projeção em linha de visão.
- PTZ em movimento. O modelo fornece a projeção instantânea em uma configuração única de pan/inclinação. A cobertura de uma PTZ em movimento ao longo do tempo é a projeção varrida, não a instantânea.
- Tolerância de instalação. Os ângulos reais de instalação desviam do projeto em 1–3° (erro do técnico). A próxima seção quantifica como isso se propaga para o erro no solo.
9. Sensibilidade ao erro
Erros nos parâmetros de entrada (altura de montagem, ângulo de inclinação, FOV) se propagam para erros de posição no solo na projeção. Para a interseção da borda inferior com o solo d_near = h / tan(α + vfov/2), as derivadas parciais dão:
∂d_near/∂h = 1 / tan(α + vfov/2) = d_near / h ∂d_near/∂α = −h / sin²(α + vfov/2) (radianos) ∂d_near/∂vfov = −h / (2 · sin²(α + vfov/2)) (radianos)
As derivadas parciais angulares estão em radianos; multiplique por π/180 (≈ 0,01745) para converter para por grau. A tabela abaixo aplica a conversão.
Para uma configuração típica (h = 10 m, inclinação = 15°, vfov = 50° → d_near ≈ 11,9 m), pequenos erros em cada parâmetro produzem os seguintes desvios em d_near:
| Parâmetro | Erro de entrada | Δ d_near | Observação |
|---|---|---|---|
| inclinação α | ±1° | ±0,42 m | resolução típica de inclinômetro |
| inclinação α | ±3° | ±1,27 m | instalação no olhômetro em suporte |
| altura h | ±0,5 m | ±0,59 m | medição com trena, mastro inacessível |
| vfov | ±1° | ±0,21 m | arredondamento de ficha técnica |
| tudo combinado | RMS | ~1,4 m | a 3° inclinação + 0,5 m altura + 1° fov |
O termo dominante é a incerteza do ângulo de instalação: na configuração acima, cada grau de erro de inclinação custa ~42 cm em precisão de posição no solo em d_near. Um inclinômetro a laser com resolução de 0,1° mantém o erro de d_near impulsionado pela inclinação abaixo de 5 cm; uma instalação em suporte feita no olhômetro é boa até cerca de ±1 m. Para verificação de níveis DORI (onde a diferença entre os anéis no solo de Reconhecer e Identificar pode ser de 2–3 m), a inclinação deve ser medida, não estimada.
A mesma análise de derivada parcial se aplica à largura lateral da projeção via HFOV — um erro de 1° no HFOV produz aproximadamente 2 · d · tan(½°) ≈ 1,7 % de erro de espalhamento lateral à distância d. A 30 m de alcance, são ~52 cm de incerteza lateral, razão pela qual tratamos os números HFOV dos fabricantes como ±1°, e não exatos.
10. Reprodutibilidade
Todas as fórmulas neste artigo são implementadas literalmente no módulo de geometria que acompanha o designer do CCTVplanner.io. O módulo é coberto por uma suíte abrangente de testes unitários abrangendo as projeções retilínea / equidistante / equissólida, casos de borda da zona cega, projeção no solo DORI, recorte booleano de obstáculos por polígonos e a extensão para múltiplos andares. Cada diagrama desta página é renderizado chamando as mesmas funções que o designer em tempo real utiliza.
Pontos de entrada principais
buildFrustum(args)— base da câmera (forward / right / upCam) + metadados do frustumcomputeGroundFootprint(frustum, projection)— polígono amostrado (8 / 32 pontos por borda)slantToGroundRadius(frustum, slantM)— √(slant² − h²) com verificação de alcançabilidadecomputeSegmentShadow / computePolygonShadow— projeção de sombra no solo por segmento / por polígonosubtractObstacleShadows(footprint, shadows)— diferença de polígonos de Martínez–RuedacomputeFloorFootprint(frustum, z, projection)— variante para múltiplos andares
Constantes padrão
defaultLensProjection: retilínea quando HFOV < 170°, equidistante caso contrárioSAMPLES_PER_EDGE: 8 para retilínea, 32 para projeções fisheye- Distância de recorte de sombra:
renderRange × 4(cobre o recorte da borda distante a qualquer distância razoável de obstáculo) - Limitação horizontal da borda distante: raios cuja interseção com o solo exceda
renderRangeem distância horizontal são projetados de volta pararenderRangeao longo de sua direção horizontal (impede artefatos de linhas perdidas próximas ao horizonte no arco distante do polígono).
Reproduzindo a matemática do zero: construa um CameraFrustum com a estrutura publicada { x, y, h, panDeg, tiltDeg, hfovDeg, vfovDeg, renderRangeM, pixelsPerMeter }; amostre os cantos do plano de imagem em sH, sV ∈ [−1, +1] com 8 amostras por borda (32 para fisheye); intersecte cada raio com o plano z = 0; aplique a diferença de polígonos para subtração de sombras. Salvo efeitos de ordenação IEEE 754 no passo booleano de polígonos, o resultado coincide com o polígono renderizado pelo designer em tempo real até a precisão de ponto flutuante (sub-milímetro em entradas em escala real).
Referências
- IEC 62676-4:2014 (com emendas) — Sistemas de videovigilância para uso em aplicações de segurança, parte 4: diretrizes de aplicação (DORI, distâncias de alvo). Texto idêntico publicado como EN 62676-4 na edição europeia.
- Hartley & Zisserman, Multiple View Geometry in Computer Vision, 2ª ed., Cambridge University Press, 2004 (modelos de projeção de câmera, geometria do frustum).
- Kannala & Brandt, "A generic camera model and calibration method for conventional, wide-angle, and fish-eye lenses," IEEE TPAMI, 2006 (comparação de projeções retilínea / equidistante / equissólida).
- Martínez, Rueda & Feito, "A new algorithm for computing Boolean operations on polygons," Computers & Geosciences, 2009 — algoritmo original de Martínez–Rueda. O acompanhamento de 2013 "A simple algorithm for Boolean operations on polygons" (Advances in Engineering Software) é a variante implementada na biblioteca polygon-clipping aqui utilizada.