CCTVPLANNER.IO / RISET

    Geometri cakupan kamera CCTV

    Bagaimana kamera yang dimiringkan dan dipasang mencitrakan tanah — geometri frustum, proyeksi lensa, dan standar jarak DORI, diturunkan dari prinsip pertama dan diilustrasikan dengan kode yang sama yang menjalankan perancang langsung.

    1. Dari frustum ke jejak tanah

    Kamera lubang jarum (pinhole) mendefinisikan frustum pandang: piramida bersisi empat yang membentang dari pusat optik kamera ke batas-batas bidang gambarnya. Setiap piksel adalah satu sinar dari pusat optik melewati titik yang bersesuaian pada bidang gambar. Untuk menemukan wilayah tanah yang dicakup kamera, kita mempotongkan setiap sinar dengan bidang tanah dan menyimpan titik-titik yang berada dalam jangkauan kamera.

    Untuk kamera yang dipasang pada ketinggian h, dimiringkan dengan sudut α di bawah horizontal, dengan bidang pandang vertikal vfov, keempat sinar pojok frustum menggambarkan selubung luar cakupan di tanah. Pada konfigurasi pemasangan tipikal (di mana α + vfov/2 < 90°), bentuknya berupa trapesium terpotong dengan sudut melengkung — bukan segitiga atau sektor yang berasal dari titik pemasangan kamera. Saat α + vfov/2 mendekati 90° (kamera dome dengan kemiringan sangat curam yang dipasang di langit-langit), tepi bawah gambar mulai menyentuh tanah di dasar kamera dan trapesium terdegenerasi menuju sektor.

    h = 4 m · tilt = 30° · hfov = 106° · vfov = 70° · range = 25 mlingkaran jangkauan (25 m)

    Jejak tanah tampak atas untuk kamera dengan h = 4 m, kemiringan = 30°, hfov = 106°. Tepi bawah gambar bertemu tanah pada jarak pendek di depan kamera; tepi lateral merebak seperti kipas; tepi jauh dipotong pada jangkauan efektif kamera.

    2. Perpotongan tepi bawah / tepi atas

    Sinar tepi bawah (sV = −1 dalam koordinat bidang gambar) mengenai tanah pada:

    d_near = h / tan(α + vfov/2)

    Sinar tepi atas (sV = +1) mengenai pada:

    d_far = h / tan(α − vfov/2)            jika α > vfov/2  (sepenuhnya di bawah cakrawala)
            tak terbatas                    jika α ≤ vfov/2  (tepi atas di atas cakrawala
                                                                — dipotong di renderRange)
    h = 4 mkamera (h = 4 m)buta 0 – 4.8 md_near = 4.8 mrenderRange = 10 mh = 4 m · tilt α = 15° · vfov = 50°

    Tampak samping, h = 4 m, kemiringan = 15°, vfov = 50°. Dua garis biru adalah sinar tepi bawah dan tepi atas frustum; pita biru tebal di tanah menandai tempat kamera mencitrakan lantai (dari d_near hingga renderRange). Baji merah di bawah tiang adalah wilayah geometris yang tidak dapat diuraikan oleh lensa.

    Untuk tepi lateral (sH = ±1), konstruksi yang sama berlaku pada bidang horizontal: setiap sinar lateral menyapu HFOV kamera pada setiap ketinggian bidang gambar. Untuk lensa rektilinear (optika CCTV dominan) ini diproyeksikan ke garis lurus yang menyebar di tanah, menghasilkan sisi miring trapesium. Untuk lensa fisheye pemetaan yang sama melengkung dan jejak menjadi cakram melengkung.

    3. Titik buta geometris

    Untuk setiap kamera yang dipasang di atas tanah dan dimiringkan kurang dari 90° − vfov/2, terdapat wilayah tepat di bawah titik pemasangan yang tidak dapat dijangkau oleh sinar manapun dari frustum. Tepi bawah gambar menunjuk pada α + vfov/2 di bawah horizontal; segala sesuatu yang lebih dekat dari d_near sepenuhnya berada di luar gambar kamera.

    Dengan kemiringan dan FOV tetap, titik buta tumbuh secara linear dengan ketinggian pemasangan — rumus tereduksi menjadi d_near = h × cot(α + vfov/2), di mana suku kotangen ditetapkan oleh lensa. Kamera yang dimiringkan 15° dengan FOV vertikal 50° memiliki titik buta sebesar 4,8 m pada ketinggian pemasangan 4 m dan 23,8 m pada 20 m — rasio 5× yang sesuai dengan rasio ketinggian. Rasio area buta terhadap area cakupan adalah kendala dominan pada penempatan kamera di tiang tinggi.

    h = 20 mkamera (h = 20 m)buta 0 – 23.8 md_near = 23.8 mrenderRange = 50 mh = 20 m · tilt α = 15° · vfov = 50°

    Lensa yang sama, kemiringan yang sama 15°, hanya dipasang lebih tinggi (h = 20 m): titik buta tumbuh secara proporsional dengan ketinggian, terlepas dari panjang fokus atau ukuran sensor.

    4. Jarak DORI (EN 62676-4)

    Standar DORI (Detect / Observe / Recognize / Identify — Deteksi / Observasi / Pengenalan / Identifikasi) mendefinisikan kerapatan piksel target pada jarak tertentu dari kamera. Menurut EN 62676-4, jarak-jarak tersebut adalah jarak horizontal di tanah antara kamera dan target — bukan jarak miring sepanjang sumbu optik. Lembar data dari pabrikan utama (Axis, Hikvision, Dahua, Bosch) mengikuti konvensi ini.

    Pada peta 2D, keempat tingkat DORI hanyalah busur konsentris dengan jari-jari sama dengan jarak horizontalnya, dipotong oleh poligon jejak kamera. Di mana jejak tidak mencapai jari-jari tersebut, bagian busur yang bersesuaian disembunyikan — untuk kamera dengan HFOV sempit kerucut terlalu tipis untuk menampung lingkaran penuh sehingga ujung-ujung lateral setiap tingkat terpotong, dan untuk kamera berjangkauan pendek tingkat-tingkat yang lebih besar sepenuhnya jatuh di luar kerucut.

    Identifikasi → 8 mPengenalan → 16 mObservasi → 32 mDeteksi → 64 mh = 4 m · tilt = 20° · hfov = 90° · range = 70 mSetiap busur = jarak horizontal dari kamera untuk tingkat yang bersangkutan (EN 62676-4)

    Cincin DORI sebagai busur di tanah di dalam jejak kamera. h = 4 m, kemiringan = 20°, hfov = 90°, jangkauan = 70 m. Nilai tingkat yang ditampilkan (8 / 16 / 32 / 64 m) bersifat ilustratif untuk kamera 1080p tipikal pada ~90° HFOV; jarak horizontal sebenarnya bergantung pada sensor dan panjang fokus. EN 62676-4 menetapkan kerapatan piksel pada setiap tingkat (Identifikasi: 250 px/m, Pengenalan: 125 px/m, Observasi: 62 px/m, Deteksi: 25 px/m), dari mana jangkauan horizontal per kamera diturunkan.

    Interpretasi jarak miring (jika berlaku). Jika lembar data tertentu menetapkan jangkauan sebagai jarak miring dari lensa — tidak umum untuk optika CCTV serbaguna, kadang dijumpai pada spesifikasi lensa termal atau telefoto — maka jangkauan horizontal ekuivalen di tanah adalah √(d_slant² − h²). Kamera yang dipasang pada 6 m dengan jangkauan miring Identifikasi 8 m mencakup jari-jari horizontal 5,3 m (√(64 − 36)). Modul geometri menyediakan kedua bentuk; diagram halaman menggunakan interpretasi horizontal standar.

    5. Tipe proyeksi lensa

    Desain lensa yang berbeda memetakan sudut dari sumbu optik ke jari-jari bidang gambar dengan cara yang berbeda. Tiga proyeksi yang digunakan dalam CCTV:

    Proyeksir(θ)Rentang tipikal
    Rektilinearf · tan θHFOV ≲ 120° (sebagian besar lensa CCTV tetap dan varifokal)
    Ekuidistanf · θHFOV ≳ 140° (panoramik / fisheye)
    Ekuisolid2 f · sin(θ/2)Lensa fisheye yang melestarikan sudut ruang

    θ = sudut dari sumbu optik (radian); f = panjang fokus. r(θ) adalah jarak radial pada bidang gambar dari titik utama.

    Untuk lensa rektilinear, faktor lateral di luar sumbu tan(θ) melampaui 1 ketika θ melewati 45° dari sumbu optik (yakni ketika HFOV melampaui 90°), dan tumbuh tanpa batas saat θ mendekati 90° (HFOV mendekati 180°). Pada optika dunia nyata, peregangan sudut menjadi parah jauh sebelum matematikanya divergen — kebanyakan perancang lensa beralih ke kaca kuasi-fisheye di sekitar 120–140° HFOV, dengan lensa fisheye penuh digunakan di atas ~170°.

    CCTVplanner.io saat ini memilih proyeksi rektilinear hingga 170° HFOV; di atasnya peregangan sudut tumbuh cukup besar sehingga kami beralih ke ekuidistan demi stabilitas numerik. Kamera antara ~140° dan 170° HFOV karenanya dimodelkan dengan matematika rektilinear meskipun lensa fisiknya lebih dekat ke fisheye — kami menerima ini sebagai gantinya geometri sudut yang lebih sederhana. Proyeksi ekuisolid didukung di lapisan geometri (untuk data pabrikan yang mencantumkannya secara eksplisit), meskipun belum ada saklar yang ditampilkan kepada pengguna untuknya.

    Catatan lembar data: HFOV vs DFOV

    Banyak pabrikan — terutama merek-merek besar Asia (Dahua, Hikvision, Uniview, Tiandy) — mengutip satu angka bidang pandang pada lembar data yang sebenarnya merupakan bidang pandang diagonal (DFOV), bukan horizontal. Memasukkan nilai DFOV ke dalam alat yang mengharapkan HFOV menghasilkan jejak 10–15 % terlalu lebar, dengan kesalahan terkonsentrasi pada tepi-tepi lateral di mana kerapatan piksel paling penting.

    Untuk sensor dengan rasio aspek horizontal-vertikal a (mis. 16:9 → a = 16/9), konversinya adalah:

    tan(HFOV/2) = tan(DFOV/2) × a / √(a² + 1)
    tan(VFOV/2) = tan(DFOV/2) × 1 / √(a² + 1)

    Pemetaan tidak linear dalam sudut: pintasan linear yang menggoda berbentuk HFOV ≈ k × DFOV berhasil untuk lensa sempit tetapi gagal parah ketika bidang pandang melebar. Untuk sensor 16:9, konversi tepatnya adalah:

    DFOV (16:9)HFOV tepatVFOV tepatGalat pintasan 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°

    "Galat pintasan linear" = HFOV dari rumus naif HFOV = (a / √(a²+1)) × DFOV dikurangi nilai tepat. Pintasan ini mengecilkan HFOV sebesar 5–13° pada rentang sudut lebar yang mendominasi optika CCTV modern — jauh lebih besar daripada toleransi lembar data ±1° yang diasumsikan di §9. Selalu gunakan rumus berbasis tan atau nilai-nilai tepat di atas.

    Basis data kamera CCTVplanner.io menyimpan HFOV (pengukuran kanonik CCTV) dan mengonversi pada saat impor untuk kamera yang lembar datanya hanya mencantumkan DFOV. Saat memasukkan kamera kustom secara manual, periksa satuan sebelum memasukkan angka ke dalam kolom HFOV — salah dalam hal ini adalah salah satu dari dua alasan paling umum mengapa jejak survei lokasi tidak cocok dengan kenyataan terpasang (yang lain adalah rasio aspek sensor).

    6. Halangan, bayangan, dan jejak yang terlihat

    Dinding, pagar, dan bangunan tinggi memblokir sinar dari kamera. Untuk menghitung jejak yang terlihat, kami memodelkan setiap halangan buram sebagai poligon (perimeter tertutup) atau polilinia (pagar terbuka) dan memproyeksikan segiempat bayangan per segmen: setiap segmen diperpanjang menjauhi kamera hingga beberapa kali jangkauan render. Gabungan dari bayangan per segmen ini adalah siluet halangan ditambah segala sesuatu di belakangnya seperti terlihat dari kamera.

    Jejak yang terlihat kemudian adalah jejak − ⋃ bayangan, yang dihitung melalui algoritma selisih poligon Martínez–Rueda. Hasilnya adalah poligon (atau daftar poligon yang saling lepas, ketika sebuah halangan membelah kerucut) yang tepi-tepinya berjajar rapi dengan busur jauh frustum maupun setiap dinding penghalang.

    Untuk analisis sadar 3D, sebuah halangan yang lebih pendek daripada ketinggian pemasangan kamera tidak memblokir sinar sepenuhnya — ia melemparkan bayangan terhingga di tanah yang membentang di belakang halangan. Untuk dinding pada jarak horizontal d dari kamera, dengan ketinggian pemasangan h_cam dan tinggi puncak halangan h_obs, bayangan membentang dari dinding hingga jarak horizontal:

    d_shadow_end = d × h_cam / (h_cam − h_obs)            untuk h_cam > h_obs
    
    Untuk h_obs ≥ h_cam halangan memblokir garis pandang sepenuhnya
    — ekuivalen dengan bayangan tak terbatas. Perancang memperlakukan
    kasus ini sebagai penghalang yang sepenuhnya buram (tidak ada
    penglihatan melewati) dan menerapkan proyeksi bayangan per
    segmen yang sama yang digunakan di jalur pemotongan halangan 2D.

    Mengaktifkan "Gunakan tinggi vertikal (3D)" pada bangunan atau pagar di perancang akan beralih ke model proyeksi bayangan ini. Ketika kamera lebih pendek dari halangan (atau sama tingginya), saklar tidak berpengaruh.

    7. Proyeksi multi-lantai

    Perpotongan frustum-tanah secara trivial digeneralisasikan ke bidang horizontal mana pun. Ganti persamaan lantai z = 0 dengan z = z_target, selesaikan persamaan sinar-bidang yang sama untuk setiap sinar pojok, dan hasilnya adalah jejak kamera pada lantai target tersebut. Kamera yang dipasang di lantai dua atrium mencakup lantai dasar dengan konstruksi yang sama dengan kamera yang dipasang di tanah mencakup lantainya sendiri, hanya dengan nilai z_target yang berbeda dan offset vertikal yang dimodifikasi antara kamera dan bidang target.

    Lapisan matematika untuk proyeksi multi-lantai sudah ada di modul geometri saat ini; UI pemilih lantai dan pratinjau adegan Three.js sedang antri untuk rilis mendatang.

    8. Asumsi dan batasan

    Setiap rumus di atas bersandar pada serangkaian asumsi penyederhana. Asumsi-asumsi ini berlaku untuk sebagian besar skenario CCTV pemasangan tetap tetapi runtuh dalam kondisi tertentu; kami mendokumentasikannya agar para praktisi dapat memutuskan kapan harus mempercayai model.

    Asumsi model

    • Tanah datar (lantai adalah bidang z = 0) — tanpa kemiringan medan, tanpa kelengkungan Bumi.
    • Kamera statis pada saat pengambilan — tidak ada gerakan PTZ selama frame, tidak ada getaran.
    • Model kamera lubang jarum — tanpa distorsi lensa. Lensa nyata memperkenalkan distorsi radial dan tangensial Brown–Conrady (koefisien k₁, k₂, p₁, p₂) yang tidak kami modelkan.
    • Kalibrasi ideal — langkah piksel sensor, panjang fokus, dan pusat optik sama persis dengan spesifikasi pabrikan.
    • Tanpa artefak rolling-shutter; seluruh gambar ditangkap dalam satu instan.
    • Tanpa rotasi kamera (roll) — sumbu optik diputar hanya oleh pan dan kemiringan; sensor tetap horizontal.
    • Jalur optik tunggal — tanpa pembiasan kubah kaca, tanpa permukaan reflektif dalam adegan.
    • Refraksi atmosfer dapat diabaikan pada jangkauan CCTV tipikal (galat kurang dari 1 cm pada 50 m).

    Saat model runtuh

    • Medan miring. Jejak di tanah bergeser secara asimetris: sisi turun-bukit memanjang lebih jauh dari yang diprediksi model, sisi naik-bukit terkompresi. Galat kira-kira ±h · tan(kemiringan) per meter jarak horizontal.
    • Distorsi lensa sudut lebar. Di atas ~110° HFOV, proyeksi rektilinear berbeda dari pemetaan aktual lensa sebesar 1–5 % di pojok-pojok. Proyeksi ekuidistan / ekuisolid tersedia di lapisan geometri untuk kasus-kasus ini (lihat §5).
    • Kamera kubah kaca. Kubah memperkenalkan pergeseran refraktif kecil pada masuknya lensa (mm pada ketinggian pemasangan tipikal). Untuk pekerjaan DORI presisi tinggi pada instalasi kaca cermin, ini menjadi tidak sepele; untuk perencanaan umum berada di bawah sumber galat lain.
    • Optika multi-pantul. Pantulan dari dinding kaca, langit-langit cermin, atau lantai mengkilap tidak dilacak. Model hanya mengembalikan jejak garis pandang.
    • PTZ bergerak. Model memberikan jejak instan pada satu pengaturan pan/kemiringan. Cakupan PTZ yang bergerak sepanjang waktu adalah jejak tersapu, bukan instan.
    • Toleransi pemasangan. Sudut pemasangan nyata menyimpang dari desain sebesar 1–3° (galat teknisi). Bagian berikutnya mengkuantifikasi bagaimana ini menjalar ke galat di tanah.

    9. Sensitivitas galat

    Galat dalam parameter masukan (ketinggian pemasangan, sudut kemiringan, FOV) menjalar ke galat posisi di tanah dalam jejak. Untuk perpotongan tepi bawah dengan tanah d_near = h / tan(α + vfov/2), turunan parsial memberikan:

    ∂d_near/∂h = 1 / tan(α + vfov/2)        = d_near / h
    ∂d_near/∂α = −h / sin²(α + vfov/2)         (radian)
    ∂d_near/∂vfov = −h / (2 · sin²(α + vfov/2)) (radian)

    Turunan parsial sudut dalam radian; kalikan dengan π/180 (≈ 0,01745) untuk dikonversi per derajat. Tabel di bawah menerapkan konversi.

    Untuk konfigurasi tipikal (h = 10 m, kemiringan = 15°, vfov = 50° → d_near ≈ 11,9 m), galat kecil pada setiap parameter menghasilkan deviasi berikut pada d_near:

    ParameterGalat masukanΔ d_nearCatatan
    kemiringan α±1°±0,42 mresolusi inklinometer tipikal
    kemiringan α±3°±1,27 mpemasangan dengan perkiraan mata pada braket
    tinggi h±0,5 m±0,59 mpengukuran pita, tiang sulit dijangkau
    vfov±1°±0,21 mpembulatan lembar data
    semua digabungRMS~1,4 mpada 3° kemiringan + 0,5 m tinggi + 1° fov

    Suku dominan adalah ketidakpastian sudut pemasangan: dalam konfigurasi di atas, setiap derajat galat kemiringan menghabiskan ~42 cm presisi posisi di tanah pada d_near. Inklinometer laser dengan resolusi 0,1° menjaga galat d_near akibat kemiringan di bawah 5 cm; pemasangan braket dengan perkiraan mata baik hingga sekitar ±1 m. Untuk verifikasi tingkat DORI (di mana selisih antara cincin tanah Pengenalan dan Identifikasi dapat mencapai 2–3 m), kemiringan harus diukur, bukan diperkirakan.

    Analisis turunan parsial yang sama berlaku untuk lebar lateral jejak melalui HFOV — galat 1° pada HFOV menghasilkan kira-kira 2 · d · tan(½°) ≈ 1,7 % galat penyebaran lateral pada jarak d. Pada jangkauan 30 m itu ~52 cm ketidakpastian lateral, yang merupakan alasan kami memperlakukan angka HFOV pabrikan sebagai ±1° alih-alih tepat.

    10. Reproduksibilitas

    Semua rumus dalam artikel ini diimplementasikan persis di modul geometri yang disertakan dengan perancang CCTVplanner.io. Modul ini dilindungi oleh suite uji unit komprehensif yang mencakup proyeksi rektilinear / ekuidistan / ekuisolid, kasus pinggir titik buta, proyeksi DORI di tanah, pemotongan halangan poligon Boolean, dan ekstensi multi-lantai. Setiap diagram pada halaman ini dirender dengan memanggil fungsi-fungsi yang sama yang digunakan oleh perancang langsung.

    Titik masuk utama

    • buildFrustum(args) — basis kamera (forward / right / upCam) + metadata frustum
    • computeGroundFootprint(frustum, projection) — poligon yang disampel (8 / 32 titik per sisi)
    • slantToGroundRadius(frustum, slantM) — √(slant² − h²) dengan pemeriksaan keterjangkauan
    • computeSegmentShadow / computePolygonShadow — proyeksi bayangan di tanah per segmen / per poligon
    • subtractObstacleShadows(footprint, shadows) — selisih poligon Martínez–Rueda
    • computeFloorFootprint(frustum, z, projection) — varian multi-lantai

    Konstanta default

    • defaultLensProjection: rektilinear ketika HFOV < 170°, ekuidistan jika tidak
    • SAMPLES_PER_EDGE: 8 untuk rektilinear, 32 untuk proyeksi fisheye
    • Jarak pemotongan bayangan: renderRange × 4 (mencakup pemotongan tepi jauh pada jarak halangan yang masuk akal)
    • Klemp horizontal tepi jauh: sinar yang perpotongannya dengan tanah melebihi renderRange dalam jarak horizontal diproyeksikan kembali ke renderRange sepanjang arah horizontalnya (mencegah artefak garis liar dekat horizon di busur jauh poligon).

    Reproduksi matematika dari nol: bangun CameraFrustum dengan bentuk yang dipublikasikan { x, y, h, panDeg, tiltDeg, hfovDeg, vfovDeg, renderRangeM, pixelsPerMeter }; sampel pojok bidang gambar pada sH, sV ∈ [−1, +1] dengan 8 sampel per sisi (32 untuk fisheye); potongkan setiap sinar dengan bidang z = 0; terapkan selisih poligon untuk pengurangan bayangan. Selain efek pengurutan IEEE 754 di langkah Boolean poligon, hasilnya cocok dengan poligon yang dirender perancang langsung dengan presisi titik mengambang (sub-milimeter pada masukan skala nyata).

    Referensi

    • IEC 62676-4:2014 (dengan amandemen) — Sistem pengawasan video untuk penggunaan dalam aplikasi keamanan, bagian 4: pedoman aplikasi (DORI, jarak target). Teks identik dipublikasikan sebagai EN 62676-4 dalam edisi Eropa.
    • Hartley & Zisserman, Multiple View Geometry in Computer Vision, edisi ke-2, Cambridge University Press, 2004 (model proyeksi kamera, geometri frustum).
    • Kannala & Brandt, "A generic camera model and calibration method for conventional, wide-angle, and fish-eye lenses," IEEE TPAMI, 2006 (perbandingan proyeksi rektilinear / ekuidistan / ekuisolid).
    • Martínez, Rueda & Feito, "A new algorithm for computing Boolean operations on polygons," Computers & Geosciences, 2009 — algoritma Martínez–Rueda asli. Tindak lanjut tahun 2013 "A simple algorithm for Boolean operations on polygons" (Advances in Engineering Software) adalah varian yang diimplementasikan dalam pustaka polygon-clipping yang digunakan di sini.