CCTVPLANNER.IO / 연구
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°. 두 개의 파란 선은 절두체의 하단 및 상단 가장자리 광선이며, 지면의 굵은 파란 띠는 카메라가 바닥을 결상하는 영역 (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 지도 상에서 네 개의 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에서 사용되는 세 가지 투영:
| 투영 | 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)이지 수평이 아니다. HFOV를 기대하는 도구에 DFOV 값을 입력하면 풋프린트가 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 폴리곤 차분 알고리즘으로 계산한다. 결과는 폴리곤 (또는 장애물이 원뿔을 분할하는 경우 서로 분리된 폴리곤들의 목록)이며, 그 가장자리는 절두체의 원거리 호와 모든 차폐 벽 양쪽에 깔끔히 정렬된다.
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 미만 오차).
모델이 무너지는 경우
- 경사 지형. 지면 풋프린트가 비대칭으로 이동한다: 내리막 측은 모델 예측보다 멀리 뻗고 오르막 측은 압축된다. 오차는 수평 거리 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 지면 투영, 폴리곤 부울 장애물 클리핑, 다층 확장을 다루는 포괄적 단위 테스트 스위트로 보호된다. 이 페이지의 모든 다이어그램은 라이브 디자이너가 사용하는 동일한 함수를 호출하여 렌더링된다.
주요 진입점
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 평면과 교차시키고; 그림자 차감을 위해 폴리곤 클리핑 차분을 적용한다. 폴리곤 부울 단계의 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 라이브러리에 구현된 변형이다.