CCTVPLANNER.IO / ДОСЛІДЖЕННЯ

    Геометрія покриття камер CCTV

    Як нахилена, встановлена камера зображує землю — геометрія фрустума, проєкції об'єктива та стандарт відстаней DORI, виведений з фундаментальних принципів та проілюстрований тим самим кодом, що працює у live-дизайнері.

    1. Від фрустума до проєкції на землі

    Стенопна (pinhole) камера визначає зоровий фрустум: чотиригранну піраміду, що простягається від оптичного центру камери до меж її площини зображення. Кожен піксель — це один промінь з оптичного центру через відповідну точку на площині зображення. Щоб знайти область землі, яку покриває камера, ми перетинаємо кожен промінь з площиною землі та залишаємо точки, що потрапляють у межі дальності камери.

    Для камери, встановленої на висоті h, нахиленої під кутом α нижче горизонталі, з вертикальним полем зору vfov, чотири кутових промені фрустума окреслюють зовнішню оболонку покриття на землі. У типових монтажних конфігураціях (де α + vfov/2 < 90°) форма являє собою зрізану трапецію зі заокругленими кутами — не трикутник і не сектор, що виходить із точки монтажу камери. Коли α + vfov/2 наближається до 90° (дуже круто нахилені стельові dome-камери), нижній край зображення починає торкатися землі біля основи камери, а трапеція вироджується в сектор.

    h = 4 m · tilt = 30° · hfov = 106° · vfov = 70° · range = 25 mколо дальності (25 m)

    Вид зверху на проєкцію на землі для камери з h = 4 м, нахил = 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камера (h = 4 m)сліпа 0 – 4.8 md_near = 4.8 mrenderRange = 10 mh = 4 m · tilt α = 15° · vfov = 50°

    Вид збоку, h = 4 м, нахил = 15°, vfov = 50°. Дві сині лінії — це промені нижнього та верхнього краю фрустума; товста синя смуга на землі позначає, де камера зображує підлогу (від d_near до renderRange). Червоний клин під щоглою — це геометрична область, яку об'єктив не може розпізнати.

    Для бічних країв (sH = ±1) така сама конструкція застосовується в горизонтальній площині: кожен бічний промінь проходить через HFOV камери на кожній висоті площини зображення. Для ректилінійних об'єктивів (домінуючої CCTV-оптики) вони проєктуються на землю як розбіжні прямі лінії, утворюючи похилі сторони трапеції. Для fisheye об'єктивів те саме відображення є викривленим, і проєкція стає викривленим диском.

    3. Геометрична сліпа зона

    Для будь-якої камери, встановленої над землею і нахиленої менше ніж 90° − vfov/2, існує область безпосередньо під монтажним пунктом, до якої не може дістатися жоден промінь фрустума. Нижній край зображення вказує під кутом α + vfov/2 нижче горизонталі; усе, що ближче за d_near, цілком знаходиться поза зображенням камери.

    При незмінних нахилі та FOV сліпа зона зростає лінійно з висотою монтажу — формула зводиться до d_near = h × cot(α + vfov/2), де член котангенса фіксується об'єктивом. Камера з нахилом 15° та вертикальним FOV 50° має сліпу зону 4,8 м при висоті монтажу 4 м і 23,8 м при 20 м — співвідношення 5×, що відповідає співвідношенню висот. Співвідношення площі сліпої зони до площі покриття є домінуючим обмеженням при розміщенні камер на високих щоглах.

    h = 20 mкамера (h = 20 m)сліпа 0 – 23.8 md_near = 23.8 mrenderRange = 50 mh = 20 m · tilt α = 15° · vfov = 50°

    Той самий об'єктив, той самий нахил 15°, лише встановлено вище (h = 20 м): сліпа зона зростає пропорційно до висоти, незалежно від фокусної відстані чи розміру сенсора.

    4. Відстані DORI (EN 62676-4)

    Стандарт DORI (Detect / Observe / Recognize / Identify — Виявити / Спостерігати / Розпізнати / Ідентифікувати) визначає щільності пікселів на цілі на конкретних відстанях від камери. Згідно з EN 62676-4, цими відстанями є горизонтальні відстані по землі між камерою та ціллю — а не похилі відстані вздовж оптичної осі. Технічні описи провідних виробників (Axis, Hikvision, Dahua, Bosch) дотримуються цієї конвенції.

    На 2D-карті чотири рівні DORI — це просто концентричні дуги з радіусами, що дорівнюють їхнім горизонтальним відстаням, обрізані полігоном проєкції камери. Там, де проєкція не сягає відповідного радіуса, відповідна частина дуги прихована — для камер з вузьким HFOV конус занадто тонкий, щоб вмістити повне коло, тому бічні кінці кожного рівня обрізуються, а для камер з малою дальністю більші рівні повністю випадають за межі конуса.

    Ідентифікувати → 8 mРозпізнати → 16 mСпостерігати → 32 mВиявити → 64 mh = 4 m · tilt = 20° · hfov = 90° · range = 70 mКожна дуга = горизонтальна відстань від камери для відповідного рівня (EN 62676-4)

    Кільця DORI як дуги на землі всередині проєкції камери. h = 4 м, нахил = 20°, hfov = 90°, дальність = 70 м. Показані значення рівнів (8 / 16 / 32 / 64 м) є ілюстративними для типової 1080p-камери при ~90° HFOV; фактичні горизонтальні відстані залежать від сенсора та фокусної відстані. EN 62676-4 визначає щільності пікселів на кожному рівні (Ідентифікувати: 250 px/м, Розпізнати: 125 px/м, Спостерігати: 62 px/м, Виявити: 25 px/м), з яких виводяться горизонтальні дальності для кожної камери.

    Інтерпретація похилої відстані (де застосовно). Якщо конкретний технічний опис задає дальність як похилу відстань від об'єктива — рідко для CCTV-оптики загального призначення, іноді трапляється у специфікаціях термальних або телеоб'єктивів — еквівалентна горизонтальна дальність на землі становить √(d_slant² − h²). Камера, встановлена на висоті 6 м, з похилою дальністю Ідентифікації 8 м покриває горизонтальний радіус 5,3 м (√(64 − 36)). Геометричний модуль надає обидві форми; діаграма на сторінці використовує стандартну горизонтальну інтерпретацію.

    5. Типи проєкції об'єктива

    Різні конструкції об'єктивів по-різному відображають кут від оптичної осі на радіус площини зображення. Три проєкції, що використовуються в CCTV:

    Проєкціяr(θ)Типовий діапазон
    Ректилінійнаf · tan θHFOV ≲ 120° (більшість фіксованих та варіфокальних CCTV-об'єктивів)
    Еквідистантнаf · θHFOV ≳ 140° (панорамні / fisheye)
    Еквісолідна2 f · sin(θ/2)Fisheye-об'єктиви, що зберігають тілесний кут

    θ = кут від оптичної осі (у радіанах); f = фокусна відстань. r(θ) — радіальна відстань на площині зображення від головної точки.

    Для ректилінійних об'єктивів позаосьовий бічний коефіцієнт tan(θ) перевищує 1, коли θ виходить за 45° від оптичної осі (тобто коли HFOV перевищує 90°), і зростає необмежено, коли θ наближається до 90° (HFOV наближається до 180°). У реальній оптиці розтягування кутів стає значним задовго до того, як математика розходиться — більшість проєктантів об'єктивів переходить на квазі-fisheye скло близько 120–140° HFOV, з повними fisheye-об'єктивами, що використовуються вище ~170°.

    CCTVplanner.io наразі обирає ректилінійну проєкцію до 170° HFOV, понад яким розтягування кутів стає достатньо великим, щоб ми перемкнулися на еквідистантну для числової стабільності. Камери між ~140° та 170° HFOV, отже, моделюються ректилінійною математикою, навіть якщо їхній фізичний об'єктив ближчий до fisheye — ми приймаємо це в обмін на простішу кутову геометрію. Еквісолідна проєкція підтримується в геометричному шарі (для даних виробників, які явно її вказують), хоча для неї ще немає інтерфейсного перемикача.

    Застереження щодо технічного опису: HFOV проти DFOV

    Багато виробників — особливо великі азійські бренди (Dahua, Hikvision, Uniview, Tiandy) — наводять у технічному описі одне число поля зору, яке насправді є діагональним полем зору (DFOV), а не горизонтальним. Введення значення DFOV в інструмент, що очікує HFOV, дає проєкцію на 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 з наївної формули HFOV = (a / √(a²+1)) × DFOV мінус точне значення. Скорочення занижує HFOV на 5–13° у ширококутному діапазоні, що домінує в сучасній CCTV-оптиці — набагато більше, ніж допуск ±1° технічного опису, припущений у §9. Завжди використовуйте формулу на основі tan або точні значення вище.

    База даних камер CCTVplanner.io зберігає HFOV (канонічне CCTV-вимірювання) і конвертує при імпорті для камер, чиї технічні описи вказують лише DFOV. При ручному введенні власної камери перевіряйте одиниці перш ніж вписати число у поле HFOV — помилка тут є однією з двох найчастіших причин невідповідності проєкцій з обстеження місцевості встановленій реальності (інша — співвідношення сторін сенсора).

    6. Перешкоди, тіні та видима проєкція

    Стіни, паркани та високі споруди блокують промені від камери. Щоб обчислити видиму проєкцію, ми моделюємо кожну непрозору перешкоду як полігон (замкнутий периметр) або полілінію (відкритий паркан) і проєктуємо тіньовий чотирикутник на сегмент: кожен сегмент продовжується геть від камери на декілька разів далі, ніж дальність рендеру. Об'єднання цих посегментних тіней — це силует перешкоди плюс усе, що знаходиться за нею з точки зору камери.

    Видима проєкція — це проєкція − ⋃ тіні, обчислена за допомогою алгоритму різниці полігонів Мартінеса–Руеди. Результат — полігон (або список непересічних полігонів, коли перешкода розщеплює конус), краї якого чисто узгоджуються як з дальньою дугою фрустума, так і з кожною блокувальною стіною.

    Для 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, розв'яжіть те саме рівняння промінь-площина для кожного кутового променя, і результатом є проєкція камери на цьому цільовому поверсі. Камера, встановлена на другому поверсі атріуму, покриває перший поверх тією ж конструкцією, якою наземна камера покриває власний поверх, лише з іншим значенням z_target та зміненим вертикальним зміщенням між камерою і цільовою площиною.

    Математичний шар для багатоповерхової проєкції вже доступний у геометричному модулі сьогодні; UI вибору поверху та превʼю Three.js-сцени стоять у черзі для майбутнього випуску.

    8. Припущення та обмеження

    Кожна формула вище ґрунтується на наборі спрощуючих припущень. Вони справджуються для переважної більшості CCTV-сценаріїв з фіксованим монтажем, але руйнуються за певних умов; документуємо їх, щоб фахівці могли вирішити, коли довіряти моделі.

    Припущення моделі

    • Рівна земля (підлога — це площина z = 0) — без нахилу місцевості, без кривини Землі.
    • Статична камера в момент захоплення — без руху PTZ під час кадру, без вібрацій.
    • Модель стенопної камери — без дисторсії об'єктива. Реальні об'єктиви вносять радіальну та тангенційну дисторсію Брауна–Конраді (коефіцієнти k₁, k₂, p₁, p₂), яку ми не моделюємо.
    • Ідеальне калібрування — крок пікселя сенсора, фокусна відстань та оптичний центр точно відповідають специфікаціям виробника.
    • Без артефактів rolling shutter; усе зображення захоплюється в один момент.
    • Без крену камери — оптична вісь обертається лише панорамуванням і нахилом; сенсор залишається горизонтальним.
    • Один оптичний шлях — без рефракції скляного купола, без віддзеркалюючих поверхонь у сцені.
    • Атмосферна рефракція є нехтовною на типових CCTV-дальностях (помилка менше 1 см на 50 м).

    Коли модель руйнується

    • Похилий рельєф. Проєкція на землі асиметрично зміщується: бік під ухил подовжується більше, ніж передбачає модель, бік на ухил стискається. Помилка приблизно ±h · tan(нахил) на метр горизонтальної відстані.
    • Дисторсія широкоохоплюючого об'єктива. Понад ~110° HFOV ректилінійна проєкція розходиться з фактичним відображенням об'єктива на 1–5 % у кутах. Для цих випадків у геометричному шарі доступні еквідистантна / еквісолідна проєкції (див. §5).
    • Камери зі скляним куполом. Купол вносить невелике зміщення через рефракцію на вході об'єктива (міліметри при типових висотах монтажу). Для високоточних DORI-робіт на установках з дзеркальним склом це стає нетривіальним; для загального планування воно нижче за інші джерела помилок.
    • Багаторазово відбита оптика. Відбиття від скляних стін, дзеркальних стель чи полірованих підлог не трасуються. Модель повертає лише проєкцію по прямій лінії зору.
    • PTZ у русі. Модель дає миттєву проєкцію за одного налаштування panorama/нахилу. Покриття 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 м, нахил = 15°, vfov = 50° → d_near ≈ 11,9 м) малі помилки в кожному параметрі дають такі відхилення в d_near:

    ПараметрВхідна помилкаΔ d_nearПримітка
    нахил α±1°±0,42 мтипова роздільна здатність інклінометра
    нахил α±3°±1,27 мвстановлення на око на кронштейні
    висота h±0,5 м±0,59 мвимірювання рулеткою, недоступна щогла
    vfov±1°±0,21 мокруглення в технічному описі
    усе разомRMS~1,4 мпри 3° нахил + 0,5 м висота + 1° fov

    Домінуючий член — невизначеність установочного кута: у наведеній конфігурації кожен градус помилки нахилу коштує ~42 см точності положення на землі при d_near. Лазерний інклінометр з роздільною здатністю 0,1° утримує помилку d_near, спричинену нахилом, нижче 5 см; установка на кронштейні на око дає точність приблизно ±1 м. Для верифікації рівнів DORI (де різниця між наземними кільцями Розпізнати та Ідентифікувати може становити 2–3 м) нахил слід вимірювати, а не оцінювати.

    Той самий аналіз часткових похідних застосовується до бічної ширини проєкції через HFOV — помилка 1° у HFOV дає приблизно 2 · d · tan(½°) ≈ 1,7 % бічної помилки розкиду на відстані d. На дальності 30 м це ~52 см бічної невизначеності, тому ми трактуємо HFOV-числа виробників як ±1°, а не точні.

    10. Відтворюваність

    Усі формули в цій статті дослівно реалізовані в геометричному модулі, що поставляється з дизайнером CCTVplanner.io. Модуль покрито вичерпним пакетом юніт-тестів, що охоплює ректилінійну / еквідистантну / еквісолідну проєкції, граничні випадки сліпої зони, проєкцію DORI на землю, булеве полігональне обрізання перешкод та багатоповерхове розширення. Кожна діаграма на цій сторінці рендериться викликом тих самих функцій, які використовує live-дизайнер.

    Основні точки входу

    • buildFrustum(args) — базис камери (forward / right / upCam) + метадані фрустума
    • computeGroundFootprint(frustum, projection) — семплований полігон (8 / 32 точки на ребро)
    • slantToGroundRadius(frustum, slantM) — √(slant² − h²) з перевіркою досяжності
    • computeSegmentShadow / computePolygonShadow — проєкція тіні на землі для сегмента / для полігона
    • subtractObstacleShadows(footprint, shadows) — різниця полігонів Мартінеса–Руеди
    • computeFloorFootprint(frustum, z, projection) — багатоповерховий варіант

    Стандартні константи

    • defaultLensProjection: ректилінійна, коли HFOV < 170°, інакше еквідистантна
    • SAMPLES_PER_EDGE: 8 для ректилінійної, 32 для fisheye-проєкцій
    • Відстань обрізки тіні: renderRange × 4 (покриває обрізання дальнього краю на будь-якій розумній відстані перешкоди)
    • Горизонтальне обмеження дальнього краю: промені, перетин яких із землею перевищує renderRange у горизонтальній відстані, проєктуються назад на renderRange уздовж їхнього горизонтального напрямку (запобігає артефактам блукаючих ліній поблизу горизонту на дальній дузі полігона).

    Відтворення математики з нуля: побудуйте CameraFrustum з опублікованою структурою { x, y, h, panDeg, tiltDeg, hfovDeg, vfovDeg, renderRangeM, pixelsPerMeter }; семплуйте кути площини зображення в sH, sV ∈ [−1, +1] з 8 семплами на ребро (32 для fisheye); перетинайте кожен промінь з площиною z = 0; застосовуйте різницю полігонів для віднімання тіней. За винятком ефектів упорядковування IEEE 754 на булевому полігональному кроці, результат відповідає полігону, відрендереному live-дизайнером, з точністю чисел з плаваючою комою (помилка до субміліметра на вхідних даних у реальному масштабі).

    Посилання

    • 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 — оригінальний алгоритм Мартінеса–Руеди. Продовження 2013 року "A simple algorithm for Boolean operations on polygons" (Advances in Engineering Software) — це варіант, реалізований у бібліотеці polygon-clipping, що тут використовується.