View a markdown version of this page

Memahami Sistem Koordinat dan Sensor Fusion - Amazon SageMaker AI

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memahami Sistem Koordinat dan Sensor Fusion

catatan

Amazon SageMaker Ground Truth tidak lagi terbuka untuk pelanggan baru. Pelanggan yang sudah ada dapat terus menggunakan layanan seperti biasa. AWS terus berinvestasi dalam peningkatan keamanan dan ketersediaan untuk Ground Truth, tetapi kami tidak berencana untuk memperkenalkan fitur baru.

Data awan titik selalu berada dalam sistem koordinat. Sistem koordinat ini mungkin lokal untuk kendaraan atau perangkat yang merasakan lingkungan, atau mungkin sistem koordinat dunia. Saat Anda menggunakan pekerjaan pelabelan awan titik 3D Ground Truth, semua anotasi dihasilkan menggunakan sistem koordinat data input Anda. Untuk beberapa jenis tugas pekerjaan pelabelan dan fitur, Anda harus menyediakan data dalam sistem koordinat dunia.

Dalam topik ini, Anda akan mempelajari hal-hal berikut:

  • Ketika Anda diminta untuk memberikan data input dalam sistem koordinat dunia atau kerangka acuan global.

  • Apa itu koordinat dunia dan bagaimana Anda dapat mengonversi data awan titik ke sistem koordinat dunia.

  • Bagaimana Anda dapat menggunakan sensor dan matriks ekstrinsik kamera Anda untuk memberikan data pose saat menggunakan fusi sensor.

Persyaratan Sistem Koordinat untuk Pekerjaan Pelabelan

Jika data awan titik Anda dikumpulkan dalam sistem koordinat lokal, Anda dapat menggunakan matriks ekstrinsik sensor yang digunakan untuk mengumpulkan data untuk mengubahnya menjadi sistem koordinat dunia atau kerangka acuan global. Jika Anda tidak dapat memperoleh ekstrinsik untuk data awan titik Anda dan, sebagai hasilnya, tidak dapat memperoleh awan titik dalam sistem koordinat dunia, Anda dapat menyediakan data awan titik dalam sistem koordinat lokal untuk deteksi objek awan titik 3D dan jenis tugas segmentasi semantik.

Untuk pelacakan objek, Anda harus menyediakan data awan titik dalam sistem koordinat dunia. Ini karena ketika Anda melacak objek di beberapa bingkai, kendaraan ego itu sendiri bergerak di dunia sehingga semua bingkai membutuhkan titik referensi.

Jika Anda menyertakan data kamera untuk fusi sensor, disarankan agar Anda memberikan pose kamera dalam sistem koordinat dunia yang sama dengan sensor 3D (seperti sensor LiDAR).

Menggunakan Data Point Cloud dalam Sistem Koordinat Dunia

Bagian ini menjelaskan apa itu sistem koordinat dunia (WCS), juga disebut sebagai kerangka acuan global, dan menjelaskan bagaimana Anda dapat menyediakan data awan titik dalam sistem koordinat dunia.

Apa itu Sistem Koordinat Dunia?

WCS atau kerangka acuan global adalah sistem koordinat universal tetap di mana sistem koordinat kendaraan dan sensor ditempatkan. Misalnya, jika beberapa bingkai awan titik terletak di sistem koordinat yang berbeda karena dikumpulkan dari dua sensor, WCS dapat digunakan untuk menerjemahkan semua koordinat dalam bingkai awan titik ini ke dalam sistem koordinat tunggal, di mana semua bingkai memiliki asal yang sama, (0,0,0). Transformasi ini dilakukan dengan menerjemahkan asal setiap bingkai ke asal WCS menggunakan vektor translasi, dan memutar tiga sumbu (biasanya x, y, dan z) ke orientasi kanan menggunakan matriks rotasi. Transformasi tubuh kaku ini disebut transformasi homogen.

Sistem koordinat dunia penting dalam perencanaan jalur global, lokalisasi, pemetaan, dan simulasi skenario penggerak. Ground Truth menggunakan sistem koordinat dunia Cartesian tangan kanan seperti yang didefinisikan dalam ISO 8855, di mana sumbu x maju ke arah gerakan mobil, sumbu y kiri, dan sumbu z menunjuk ke atas dari tanah.

Kerangka acuan global tergantung pada data. Beberapa kumpulan data menggunakan posisi LiDAR di bingkai pertama sebagai asal. Dalam skenario ini, semua frame menggunakan frame pertama sebagai referensi dan judul dan posisi perangkat akan berada di dekat titik asal di frame pertama. Misalnya, kumpulan data KITTI memiliki bingkai pertama sebagai referensi untuk koordinat dunia. Kumpulan data lain menggunakan posisi perangkat yang berbeda dari asalnya.

Perhatikan bahwa ini bukan sistem GPS/IMU koordinat, yang biasanya diputar 90 derajat sepanjang sumbu z. Jika data awan titik Anda berada dalam sistem GPS/IMU koordinat (seperti OXT dalam dataset AV KITTI open source), maka Anda perlu mengubah asal menjadi sistem koordinat dunia (biasanya sistem koordinat referensi kendaraan). Anda menerapkan transformasi ini dengan mengalikan data Anda dengan metrik transformasi (matriks rotasi dan vektor terjemahan). Ini akan mengubah data dari sistem koordinat aslinya menjadi sistem koordinat referensi global. Pelajari lebih lanjut tentang transformasi ini di bagian berikutnya.

Konversi Data Awan Titik 3D ke WCS

Ground Truth mengasumsikan bahwa data awan titik Anda telah diubah menjadi sistem koordinat referensi pilihan Anda. Misalnya, Anda dapat memilih sistem koordinat referensi sensor (seperti LiDAR) sebagai sistem koordinat referensi global Anda. Anda juga dapat mengambil titik awan dari berbagai sensor dan mengubahnya dari tampilan sensor ke tampilan sistem koordinat referensi kendaraan. Anda menggunakan matriks ekstrinsik sensor, yang terdiri dari matriks rotasi dan vektor terjemahan, untuk mengonversi data awan titik Anda ke WCS atau kerangka acuan global.

Secara kolektif, vektor translasi dan matriks rotasi dapat digunakan untuk membuat matriks ekstrinsik, yang dapat digunakan untuk mengonversi data dari sistem koordinat lokal ke WCS. Misalnya, matriks ekstrinsik LiDAR Anda dapat disusun sebagai berikut, di mana R matriks rotasi dan T merupakan vektor terjemahan:

LiDAR_extrinsic = [R T;0 0 0 1]

Misalnya, dataset KITTI penggerak otonom mencakup matriks rotasi dan vektor terjemahan untuk matriks transformasi ekstrinsik LiDAR untuk setiap bingkai. Modul python pykitti dapat digunakan untuk memuat data KITTI, dan dalam dataset dataset.oxts[i].T_w_imu memberikan transformasi ekstrinsik LiDAR untuk frame i th dengan dapat dikalikan dengan titik-titik dalam bingkai itu untuk mengubahnya menjadi bingkai dunia -. np.matmul(lidar_transform_matrix, points) Mengalikan titik dalam bingkai LiDAR dengan matriks ekstrinsik LiDAR mengubahnya menjadi koordinat dunia. Mengalikan titik dalam bingkai dunia dengan matriks ekstrinsik kamera memberikan koordinat titik dalam kerangka acuan kamera.

Contoh kode berikut menunjukkan bagaimana Anda dapat mengonversi bingkai awan titik dari dataset KITTI menjadi WCS.

import pykitti import numpy as np basedir = '/Users/nameofuser/kitti-data' date = '2011_09_26' drive = '0079' # The 'frames' argument is optional - default: None, which loads the whole dataset. # Calibration, timestamps, and IMU data are read automatically. # Camera and velodyne data are available via properties that create generators # when accessed, or through getter methods that provide random access. data = pykitti.raw(basedir, date, drive, frames=range(0, 50, 5)) # i is frame number i = 0 # lidar extrinsic for the ith frame lidar_extrinsic_matrix = data.oxts[i].T_w_imu # velodyne raw point cloud in lidar scanners own coordinate system points = data.get_velo(i) # transform points from lidar to global frame using lidar_extrinsic_matrix def generate_transformed_pcd_from_point_cloud(points, lidar_extrinsic_matrix): tps = [] for point in points: transformed_points = np.matmul(lidar_extrinsic_matrix, np.array([point[0], point[1], point[2], 1], dtype=np.float32).reshape(4,1)).tolist() if len(point) > 3 and point[3] is not None: tps.append([transformed_points[0][0], transformed_points[1][0], transformed_points[2][0], point[3]]) return tps # customer transforms points from lidar to global frame using lidar_extrinsic_matrix transformed_pcl = generate_transformed_pcd_from_point_cloud(points, lidar_extrinsic_matrix)

Sensor Fusion

Ground Truth mendukung fusi sensor data cloud titik dengan hingga 8 input kamera video. Fitur ini memungkinkan pelabel manusia untuk melihat bingkai awan titik 3D berdampingan dengan bingkai video yang disinkronkan. Selain memberikan lebih banyak konteks visual untuk pelabelan, fusi sensor memungkinkan pekerja menyesuaikan anotasi dalam adegan 3D dan dalam gambar 2D dan penyesuaian diproyeksikan ke tampilan lain. Video berikut menunjukkan pekerjaan pelabelan awan titik 3D dengan LiDAR dan fusi sensor kamera.

Gif menunjukkan pekerjaan pelabelan awan titik 3D dengan LiDAR dan fusi sensor kamera.

Untuk hasil terbaik, saat menggunakan fusi sensor, awan titik Anda harus berada di WCS. Ground Truth menggunakan sensor Anda (seperti LiDAR), kamera, dan informasi pose kendaraan ego untuk menghitung matriks ekstrinsik dan intrinsik untuk fusi sensor.

Matriks Ekstrinsik

Ground Truth menggunakan sensor (seperti LiDAR) ekstrinsik dan matriks ekstrinsik dan intrinsik kamera untuk memproyeksikan objek ke dan dari kerangka acuan data awan titik ke kerangka acuan kamera.

Misalnya, untuk memproyeksikan label dari awan titik 3D ke bidang gambar kamera, Ground Truth mengubah titik 3D dari sistem koordinat LiDAR sendiri ke sistem koordinat kamera. Ini biasanya dilakukan dengan terlebih dahulu mengubah titik 3D dari sistem koordinat LiDAR sendiri ke sistem koordinat dunia (atau kerangka acuan global) menggunakan matriks ekstrinsik LiDAR. Ground Truth kemudian menggunakan kamera invers ekstrinsik (yang mengubah titik dari kerangka acuan global ke kerangka acuan kamera) untuk mengubah titik 3D dari sistem koordinat dunia yang diperoleh pada langkah sebelumnya ke bidang gambar kamera. Matriks ekstrinsik LiDAR juga dapat digunakan untuk mengubah data 3D menjadi sistem koordinat dunia. Jika data 3D Anda sudah diubah menjadi sistem koordinat dunia maka transformasi pertama tidak berdampak pada terjemahan label, dan terjemahan label hanya bergantung pada ekstrinsik terbalik kamera. Matriks tampilan digunakan untuk memvisualisasikan label yang diproyeksikan. Untuk mempelajari lebih lanjut tentang transformasi ini dan matriks tampilan, lihatTransformasi Fusi Sensor Kebenaran Tanah.

Ground Truth menghitung matriks ekstrinsik ini dengan menggunakan LiDAR dan data pose kamera yang Anda berikan: heading (dalam kuaternion:qx,,, dan) dan qw (qy,qz,). position x y z Untuk kendaraan, biasanya arah dan posisi dijelaskan dalam kerangka acuan kendaraan dalam sistem koordinat dunia dan disebut pose kendaraan ego. Untuk setiap kamera ekstrinsik, Anda dapat menambahkan informasi pose untuk kamera itu. Untuk informasi selengkapnya, lihat Pose.

Matriks intrinsik

Ground Truth menggunakan matriks ekstrinsik dan intrinsik kamera untuk menghitung metrik tampilan untuk mengubah label ke dan dari pemandangan 3D ke gambar kamera. Ground Truth menghitung matriks intrinsik kamera menggunakan panjang fokus kamera (fx,fy) dan koordinat pusat optik (cx,cy) yang Anda berikan. Untuk informasi selengkapnya, lihat Intrinsik dan Distorsi.

Distorsi Gambar

Distorsi gambar dapat terjadi karena berbagai alasan. Misalnya, gambar mungkin terdistorsi karena efek laras atau mata ikan. Ground Truth menggunakan parameter intrinsik bersama dengan koefisien distorsi untuk menghilangkan distorsi gambar yang Anda berikan saat membuat pekerjaan pelabelan awan titik 3D. Jika gambar kamera sudah tidak terdistorsi, semua koefisien distorsi harus diatur ke 0.

Untuk informasi selengkapnya tentang transformasi yang dilakukan Ground Truth untuk menghilangkan distorsi gambar, lihatKalibrasi Kamera: Ekstrinsik, Intrinsik dan Distorsi.

Kendaraan Ego

Untuk mengumpulkan data untuk aplikasi mengemudi otonom, pengukuran digunakan untuk menghasilkan data awan titik dan diambil dari sensor yang dipasang pada kendaraan, atau kendaraan ego. Untuk memproyeksikan penyesuaian label ke dan dari pemandangan 3D dan gambar 2D, Ground Truth membutuhkan pose kendaraan ego Anda dalam sistem koordinat dunia. Pose kendaraan ego terdiri dari koordinat posisi dan kuaternion orientasi.

Ground Truth menggunakan pose kendaraan ego Anda untuk menghitung matriks rotasi dan transformasi. Rotasi dalam 3 dimensi dapat diwakili oleh urutan 3 rotasi di sekitar urutan sumbu. Secara teori, tiga sumbu apa pun yang mencakup ruang Euclidean 3D sudah cukup. Dalam praktiknya, sumbu rotasi dipilih untuk menjadi vektor dasar. Ketiga rotasi diharapkan berada dalam kerangka acuan global (ekstrinsik). Ground Truth bukan kerangka acuan (intrinsik) yang berpusat pada badan pendukung yang melekat pada, dan bergerak dengan, objek di bawah rotasi. Untuk melacak objek, Ground Truth perlu mengukur dari referensi global di mana semua kendaraan bergerak. Saat menggunakan pekerjaan pelabelan awan titik 3D Ground Truth, z menentukan sumbu rotasi (rotasi ekstrinsik) dan sudut Euler yaw berada dalam radian (sudut rotasi).

Pose

Ground Truth menggunakan informasi pose untuk visualisasi 3D dan fusi sensor. Informasi pose yang Anda masukkan melalui file manifes Anda digunakan untuk menghitung matriks ekstrinsik. Jika Anda sudah memiliki matriks ekstrinsik, Anda dapat menggunakannya untuk mengekstrak sensor dan data pose kamera.

Misalnya dalam dataset KITTI mengemudi otonom, modul python pykitti dapat digunakan untuk memuat data KITTI. Dalam dataset dataset.oxts[i].T_w_imu memberikan transformasi ekstrinsik LiDAR untuk frame i ke dan dapat dikalikan dengan poin untuk mendapatkannya dalam bingkai dunia -. matmul(lidar_transform_matrix, points) Transformasi ini dapat diubah menjadi posisi (vektor terjemahan) dan judul (dalam kuaternion) LiDAR untuk format JSON file manifes input. Transformasi ekstrinsik kamera i untuk cam0 dalam bingkai dapat dihitung dengan inv(matmul(dataset.calib.T_cam0_velo, inv(dataset.oxts[i].T_w_imu))) dan ini dapat diubah menjadi judul dan posisi untukcam0.

import numpy rotation = [[ 9.96714314e-01, -8.09890350e-02, 1.16333982e-03], [ 8.09967396e-02, 9.96661051e-01, -1.03090934e-02], [-3.24531964e-04, 1.03694477e-02, 9.99946183e-01]] origin= [1.71104606e+00, 5.80000039e-01, 9.43144935e-01] from scipy.spatial.transform import Rotation as R # position is the origin position = origin r = R.from_matrix(np.asarray(rotation)) # heading in WCS using scipy heading = r.as_quat() print(f"pose:{position}\nheading: {heading}")
Posisi

Dalam file manifes input, position mengacu pada posisi sensor sehubungan dengan bingkai dunia. Jika Anda tidak dapat menempatkan posisi perangkat dalam sistem koordinat dunia, Anda dapat menggunakan data LiDAR dengan koordinat lokal. Demikian pula, untuk kamera video yang dipasang Anda dapat menentukan posisi dan arah dalam sistem koordinat dunia. Untuk kamera, jika Anda tidak memiliki informasi posisi, silakan gunakan (0, 0, 0).

Berikut ini adalah bidang dalam objek posisi:

  1. x(float) — koordinat x kendaraan ego, sensor, atau posisi kamera dalam meter.

  2. y(float) — koordinat y kendaraan ego, sensor, atau posisi kamera dalam meter.

  3. z(float) — koordinat z kendaraan ego, sensor, atau posisi kamera dalam meter.

Berikut ini adalah contoh objek position JSON:

{ "position": { "y": -152.77584902657554, "x": 311.21505956090624, "z": -10.854137529636024 } }
Judul

Dalam file manifes input, heading adalah objek yang mewakili orientasi perangkat sehubungan dengan bingkai dunia. Nilai judul harus dalam kuaternion. Ku aternion adalah representasi dari orientasi yang konsisten dengan sifat bola geodesik. Jika Anda tidak dapat menempatkan judul sensor di koordinat dunia, silakan gunakan kuaternion identitas(qx = 0, qy = 0, qz = 0, qw = 1). Demikian pula, untuk kamera, tentukan judul dalam kuaternion. Jika Anda tidak dapat memperoleh parameter kalibrasi kamera ekstrinsik, gunakan juga kuaternion identitas.

Bidang dalam heading objek adalah sebagai berikut:

  1. qx(float) - komponen x kendaraan ego, sensor, atau orientasi kamera.

  2. qy(float) - komponen y kendaraan ego, sensor, atau orientasi kamera.

  3. qz(float) - komponen z kendaraan ego, sensor, atau orientasi kamera.

  4. qw(float) - w komponen kendaraan ego, sensor, atau orientasi kamera.

Berikut ini adalah contoh objek heading JSON:

{ "heading": { "qy": -0.7046155108831117, "qx": 0.034278837280808494, "qz": 0.7070617895701465, "qw": -0.04904659893885366 } }

Untuk mempelajari selengkapnya, lihat Hitung Kuaternion dan Posisi Orientasi.

Hitung Kuaternion dan Posisi Orientasi

Ground Truth mensyaratkan bahwa semua orientasi, atau judul, data diberikan dalam kuaternion. Ku aterni on adalah representasi orientasi yang konsisten dengan sifat bola geodesik yang dapat digunakan untuk memperkirakan rotasi. Dibandingkan dengan sudut Euler, mereka lebih mudah untuk menyusun dan menghindari masalah kunci gimbal. Dibandingkan dengan matriks rotasi mereka lebih kompak, lebih stabil secara numerik, dan lebih efisien.

Anda dapat menghitung kuaternion dari matriks rotasi atau matriks transformasi.

Jika Anda memiliki matriks rotasi (terdiri dari rotasi sumbu) dan vektor translasi (atau asal) dalam sistem koordinat dunia alih-alih matriks transformasi kaku 4x4 tunggal, maka Anda dapat langsung menggunakan matriks rotasi dan vektor terjemahan untuk menghitung kuaternion. Perpustakaan seperti scipy dan pyqater nion dapat membantu. Blok kode berikut menunjukkan contoh menggunakan pustaka ini untuk menghitung kuaternion dari matriks rotasi.

import numpy rotation = [[ 9.96714314e-01, -8.09890350e-02, 1.16333982e-03], [ 8.09967396e-02, 9.96661051e-01, -1.03090934e-02], [-3.24531964e-04, 1.03694477e-02, 9.99946183e-01]] origin = [1.71104606e+00, 5.80000039e-01, 9.43144935e-01] from scipy.spatial.transform import Rotation as R # position is the origin position = origin r = R.from_matrix(np.asarray(rotation)) # heading in WCS using scipy heading = r.as_quat() print(f"position:{position}\nheading: {heading}")

Alat UI seperti Konverter Rotasi 3D juga bisa berguna.

Jika Anda memiliki matriks transformasi ekstrinsik 4x4, perhatikan bahwa matriks transformasi berada dalam bentuk di [R T; 0 0 0 1] mana R matriks rotasi dan T merupakan vektor terjemahan asal. Itu berarti Anda dapat mengekstrak matriks rotasi dan vektor translasi dari matriks transformasi sebagai berikut.

import numpy as np transformation = [[ 9.96714314e-01, -8.09890350e-02, 1.16333982e-03, 1.71104606e+00], [ 8.09967396e-02, 9.96661051e-01, -1.03090934e-02, 5.80000039e-01], [-3.24531964e-04, 1.03694477e-02, 9.99946183e-01, 9.43144935e-01], [ 0, 0, 0, 1]] transformation = np.array(transformation ) rotation = transformation[0:3,0:3] translation= transformation[0:3,3] from scipy.spatial.transform import Rotation as R # position is the origin translation position = translation r = R.from_matrix(np.asarray(rotation)) # heading in WCS using scipy heading = r.as_quat() print(f"position:{position}\nheading: {heading}")

Dengan pengaturan Anda sendiri, Anda dapat menghitung matriks transformasi ekstrinsik menggunakan GPS/IMU posisi dan orientasi (lintang, bujur, ketinggian dan gulungan, pitch, yaw) sehubungan dengan sensor LiDAR pada kendaraan ego. Misalnya, Anda dapat menghitung pose dari data mentah KITTI menggunakan pose = convertOxtsToPose(oxts) untuk mengubah data oxts menjadi pose euklidean lokal, yang ditentukan oleh matriks transformasi kaku 4x4. Anda kemudian dapat mengubah matriks transformasi pose ini menjadi kerangka acuan global menggunakan matriks transformasi kerangka referensi dalam sistem koordinat dunia.

struct Quaternion { double w, x, y, z; }; Quaternion ToQuaternion(double yaw, double pitch, double roll) // yaw (Z), pitch (Y), roll (X) { // Abbreviations for the various angular functions double cy = cos(yaw * 0.5); double sy = sin(yaw * 0.5); double cp = cos(pitch * 0.5); double sp = sin(pitch * 0.5); double cr = cos(roll * 0.5); double sr = sin(roll * 0.5); Quaternion q; q.w = cr * cp * cy + sr * sp * sy; q.x = sr * cp * cy - cr * sp * sy; q.y = cr * sp * cy + sr * cp * sy; q.z = cr * cp * sy - sr * sp * cy; return q; }

Transformasi Fusi Sensor Kebenaran Tanah

Bagian berikut membahas lebih detail tentang transformasi fusi sensor Ground Truth yang dilakukan menggunakan data pose yang Anda berikan.

LiDAR Ekstrinsik

Untuk memproyeksikan ke dan dari adegan LiDAR 3D ke gambar kamera 2D, Ground Truth menghitung metrik proyeksi transformasi yang kaku menggunakan pose dan arah kendaraan ego. Ground Truth menghitung rotasi dan translasi koordinat dunia ke bidang 3D dengan melakukan urutan rotasi dan translasi sederhana.

Ground Truth menghitung metrik rotasi menggunakan kuaternion judul sebagai berikut:

Persamaan: Metrik rotasi awan titik Truth Ground.

Di sini, [x, y, z, w] sesuai dengan parameter dalam objek heading JSON,[qx, qy, qz, qw]. Ground Truth menghitung vektor kolom terjemahan sebagaiT = [poseX, poseY, poseZ]. Kemudian metrik ekstrinsik adalah sebagai berikut:

LiDAR_extrinsic = [R T;0 0 0 1]

Kalibrasi Kamera: Ekstrinsik, Intrinsik dan Distorsi

Kalibrasi kamera geometris, juga disebut sebagai reseksi kamera, memperkirakan parameter lensa dan sensor gambar dari kamera gambar atau video. Anda dapat menggunakan parameter ini untuk mengoreksi distorsi lensa, mengukur ukuran objek dalam satuan dunia, atau menentukan lokasi kamera dalam pemandangan. Parameter kamera termasuk intrinsik dan koefisien distorsi.

Kamera Ekstrinsik

Jika pose kamera diberikan, maka Ground Truth menghitung ekstrinsik kamera berdasarkan transformasi kaku dari bidang 3D ke bidang kamera. Perhitungannya sama dengan yang digunakan untukLiDAR Ekstrinsik, kecuali bahwa Ground Truth menggunakan pose kamera (positiondanheading) dan menghitung ekstrinsik terbalik.

camera_inverse_extrinsic = inv([Rc Tc;0 0 0 1]) #where Rc and Tc are camera pose components

Intrinsik dan Distorsi

Beberapa kamera, seperti kamera lubang jarum atau mata ikan, dapat menyebabkan distorsi yang signifikan pada foto. Distorsi ini dapat diperbaiki menggunakan koefisien distorsi dan panjang fokus kamera. Untuk mempelajari selengkapnya, lihat Kalibrasi kamera Dengan OpenCV di dokumentasi OpenCV.

Ada dua jenis distorsi yang dapat dikoreksi oleh Ground Truth: distorsi radial dan distorsi tangensial.

Distorsi radial terjadi ketika sinar cahaya menekuk lebih dekat tepi lensa daripada di pusat optiknya. Semakin kecil lensa, semakin besar distorsi. Kehadiran distorsi radial bermanifestasi dalam bentuk laras atau efek mata ikan dan Ground Truth menggunakan Formula 1 untuk menguranginya.

Formula 1:

Formula 1: persamaan untuk x_ {dikoreksi} dan y_ {dikoreksi}, untuk menghilangkan distorsi radial.

Distorsi tangensial terjadi karena lensa yang digunakan untuk mengambil gambar tidak sejajar sempurna dengan bidang pencitraan. Ini bisa diperbaiki dengan Formula 2.

Formula 2:

Rumus 2: persamaan untuk x_ {dikoreksi} dan y_ {dikoreksi}, untuk mengoreksi distorsi tangensial.

Dalam file manifes input, Anda dapat memberikan koefisien distorsi dan Ground Truth akan mengurangi distorsi gambar Anda. Semua koefisien distorsi adalah pelampung.

  • k1,k2,k3, k4 — Koefisien distorsi radial. Didukung untuk model kamera fisheye dan lubang jarum.

  • p1, p2 — Koefisien distorsi tangensial. Didukung untuk model kamera lubang jarum.

Jika gambar sudah tidak terdistorsi, semua koefisien distorsi harus 0 dalam manifes input Anda.

Untuk merekonstruksi gambar yang dikoreksi dengan benar, Ground Truth melakukan konversi satuan gambar berdasarkan panjang fokus. Jika panjang fokus umum digunakan dengan rasio aspek tertentu untuk kedua sumbu, seperti 1, dalam rumus atas kita akan memiliki panjang fokus tunggal. Matriks yang berisi keempat parameter ini disebut sebagai matriks kalibrasi intrinsik dalam kamera.

Matriks kalibrasi intrinsik dalam kamera.

Sementara koefisien distorsi sama terlepas dari resolusi kamera yang digunakan, ini harus diskalakan dengan resolusi saat ini dari resolusi yang dikalibrasi.

Berikut ini adalah nilai float.

  • fx- panjang fokus dalam arah x.

  • fy- panjang fokus dalam arah y.

  • cx- x koordinat titik utama.

  • cy- koordinat y titik utama.

Ground Truth menggunakan ekstrinsik kamera dan intrinsik kamera untuk menghitung metrik tampilan seperti yang ditunjukkan pada blok kode berikut untuk mengubah label antara pemandangan 3D dan gambar 2D.

def generate_view_matrix(intrinsic_matrix, extrinsic_matrix): intrinsic_matrix = np.c_[intrinsic_matrix, np.zeros(3)] view_matrix = np.matmul(intrinsic_matrix, extrinsic_matrix) view_matrix = np.insert(view_matrix, 2, np.array((0, 0, 0, 1)), 0) return view_matrix