Bagaimana cara mendapatkan kalibrasi kamera yang paling akurat?

16

Pertama, saya harap ini adalah papan Stack Exchange yang benar. Saya minta maaf jika tidak.

Saya sedang mengerjakan sesuatu yang mengharuskan saya untuk mengkalibrasi kamera. Saya telah berhasil mengimplementasikan kode untuk melakukan ini di OpenCV (C ++). Saya menggunakan fungsi papan catur bawaan dan papan catur yang telah saya cetak.

Ada banyak tutorial di internet yang menyatakan untuk memberikan lebih dari satu tampilan papan catur dan mengekstrak sudut-sudut dari setiap frame.

Apakah ada set tampilan optimal untuk diberikan pada fungsi untuk mendapatkan kalibrasi kamera yang paling akurat? Apa yang memengaruhi keakuratan kalibrasi?

Sebagai contoh, jika saya memberikan 5 gambar dengan tampilan yang sama tanpa memindahkan apa pun, hasilnya langsung ketika saya mencoba dan tidak mengumpankan umpan webcam.

FYI kepada siapa pun yang mengunjungi: Baru-baru ini saya tahu Anda bisa mendapatkan kalibrasi kamera yang lebih baik dengan menggunakan kisi-kisi lingkaran asimetris dan fungsi OpenCV yang terkait.

Cheetah
sumber

Jawaban:

8

Anda harus mengambil gambar untuk kalibrasi dari sudut pandang dan sudut yang berbeda, dengan perbedaan selebar mungkin (ketiga sudut Euler harus bervariasi), tetapi agar diameter pola masih pas untuk bidang pandang kamera. Semakin banyak tampilan yang Anda gunakan, kalibrasi yang lebih baik akan. Itu diperlukan karena selama kalibrasi Anda mendeteksi parameter panjang fokus dan distorsi, sehingga untuk mendapatkannya dengan metode kuadrat diperlukan sudut yang berbeda. Jika Anda tidak menggerakkan kamera sama sekali, Anda tidak mendapatkan informasi baru dan kalibrasi tidak berguna. Perlu diketahui, bahwa Anda biasanya hanya membutuhkan focal length, parameter distorsi biasanya diabaikan bahkan untuk kamera konsumen, kamera web dan kamera ponsel. Jika Anda sudah tahu panjang fokus dari spesifikasi kamera, Anda mungkin tidak perlu kalibrasi.

Koefisien distorsi lebih banyak terdapat pada kamera "khusus" seperti sudut lebar atau 360 °.

Inilah entri Wikipedia tentang kalibrasi . Dan ini adalah distorsi non-linear , yang dapat diabaikan untuk sebagian besar kamera.

mirror2image
sumber
Dengan sudut Eulers Saya berasumsi Anda bermaksud memutar kamera di sekitar papan catur (dengan papan catur sebagai poros) di x, y dan menggerakkan kamera ke arah dan menjauh dari papan catur di z? Saya membaca tentang seseorang yang hanya mencetak papan catur yang sudah diubah dan menyimpan kamera di tempat yang sama. Misalnya: i.imgur.com/rYzV4.png dan i.imgur.com/McG9z.png . Apakah menggunakan hal-hal seperti ini merupakan keputusan yang buruk karena mungkin tidak mewakili bagaimana hal-hal akan menyimpang dalam kenyataan?
Cheetah
Ya tentang memindahkan kamera. Ya lagi tentang tetap di tempat.
mirror2image
@ mirror2image Maksud Anda, dalam operasi praktis, lebih baik mengubah sudut yang berbeda. Tetapi itu berarti pandangan yang berbeda akan memiliki sistem koordinasi dunia yang berbeda. Apakah saya perlu menggunakan sistem koordinasi dunia bersama untuk menjaga titik objek dalam sistem koordinasi yang sama?
Richard
3

@ Ben - jumlah tampilan tergantung pada kamera dan akurasi akhir yang diperlukan.

Dengan kualitas yang sangat tinggi, lensa distorsi rendah (SLR 35mm kelas atas) menggunakan banyak gambar papan catur untuk memetakan distorsi dapat menjadi tidak stabil - karena distorsi adalah pecahan dari piksel.
Anda masih memerlukan beberapa pemotretan dengan papan (atau kamera) diputar karena pusat gambar biasanya hanya dalam beberapa piksel dari nominal x / 2, y / 2 dan akan berubah dengan fokus. Dan tentu saja zoom mengubah segalanya.

Setelah Anda memiliki pusat lensa-chip dan panjang fokus (dalam X dan Y), Anda hanya perlu papan catur tunggal di bidikan untuk memberi Anda posisi kamera

Martin Beckett
sumber
Saya terus mendapatkan kalibrasi yang sangat buruk dan sejujurnya saya tidak tahu mengapa. Saya memiliki papan catur tercetak di dinding dan saya memindahkan kamera ke posisi yang berbeda sehingga memiliki tampilan yang berbeda di papan catur tetapi setiap kali saya menggunakan fungsi undistort di OpenGL dan hasilnya sangat aneh dan terdistorsi dibandingkan dengan aslinya. Kamera saya adalah Microsoft LifeCam Studio 1080p.
Cheetah
@ Ben Nonaktifkan fokus otomatis apa pun. Pada webcam lensa kecil, panjang fokus dan pusat lensa berubah dengan fokus. Apakah Anda memutar cukup sehingga cocok untuk pusat? Apakah ada kotak yang keluar ke sudut? Terakhir, periksa apakah semua target mendeteksi semua kotak.
Martin Beckett
Fokus otomatis telah dinonaktifkan. Cukup jelaskan? Saya mencoba sudut ekstrem yang saya bisa untuk mengambil poin. Tidak yakin apa yang Anda maksud dengan "kotak keluar ke sudut", jika Anda maksud fungsi yang menarik sudut diekstraksi pada gambar - maka ya. Saya juga sudah memeriksa untuk melihat bahwa semua sudut telah terdeteksi. Saya pikir masalah saya MUNGKIN terletak pada apa yang saya atur panjang fokus awal ke dalam matriks intrinsik yang saya berikan ke fungsi kalibrasi. Saya telah mencoba 1: 1, 16: 9 (apa yang saya yakini rasio aspek webcam) dan juga telah mencoba TIDAK ADA (yang dapat Anda lakukan)
Cheetah
@ Martin Apakah mungkin untuk melakukan kalibrasi dengan menjaga kamera pada posisi alat tulis dan mengubah orientasi papan catur tanpa mengubah jarak antara kamera dan papan catur ??
@Santosh - ya itu jelas sama persis. Anda harus memastikan bahwa Anda telah membahas banyak sudut berbeda
Martin Beckett
3

Saya memutuskan untuk mengirim jawaban ini di sini karena beberapa waktu yang lalu, ini muncul sebagai hasil teratas di Google dan sarannya membantu saya. Jadi saya memutuskan untuk membagikan pengalaman saya juga.

Setelah menghabiskan banyak waktu mencoba mendapatkan kalibrasi stereo terbaik pada Kinect, saya membagikan tips dan temuan saya dalam posting blog di sini .

Meskipun diarahkan untuk kalibrasi stereo dan lebih khusus Kinect, saya percaya tips ini akan membantu siapa saja yang mencoba untuk mengkalibrasi kamera.

Juga, kalau-kalau saya akan mati suatu hari nanti atau lupa memperbarui hosting saya, berikut ini kutipan yang dimodifikasi dari pos:

  1. Pastikan Anda memiliki pola kalibrasi sebesar mungkin. Ikuti apa yang saya katakan di atas. Dapatkan pola yang bagus dicetak secara profesional. Pastikan setiap kotak setidaknya 8 cm x 8 cm. Juga, pastikan satu sisi pola kalibrasi memiliki jumlah kotak ganjil dan sisi lain memiliki jumlah kotak genap (misalnya 9 × 6 atau 7 × 8). Sangat penting untuk mendeteksi pose target dengan benar. Juga, beberapa kotak alat tidak akan dapat mendeteksi pola dalam persyaratan ini tidak terpenuhi. Seperti disebutkan sebelumnya, pola yang saya gunakan yang cocok untuk mencetak pada lembaran besar diunggah di sini (untuk kotak 9cm) dan di sini (untuk kotak 10cm).
  2. Pastikan pola cetakan Anda memiliki batas putih yang cukup di sekelilingnya, jika tidak maka tidak mudah dideteksi oleh sebagian besar kotak alat.
  3. Pastikan Kinect tidak bergerak. Saya menggunakan mount untuk memasang Kinect ke tripod.
  4. Cobalah untuk mendapatkan sebanyak mungkin gambar dari target kalibrasi yang Anda bisa. Kalibrasi terbaik saya diperoleh dengan menggunakan 300 gambar, pada jarak serendah 0,5 meter hingga 10 meter dari kamera. Pastikan Anda memutar pola di sekitar sumbu X, Y dan Z. Coba juga untuk “memasang” tampilan dengan gambar yang diambil pada jarak yang sama: mis. Ambil satu gambar, pindahkan target ke ubin berikutnya di bidang tampilan, ambil yang lain dan ulangi sampai Anda telah “menyusun” semua arus bidang pandang. Tujuannya adalah untuk mencakup seluruh bidang tampilan di setiap jarak sebanyak mungkin.
  5. Gunakan aplikasi kalibrasi stereo MATLAB jika memungkinkan. Ini memungkinkan Anda untuk menyingkirkan pencilan setelah setiap fase kalibrasi.
M2X
sumber
2

Berikut adalah daftar 'praktik terbaik' untuk kalibrasi kamera yang awalnya saya posting di sini: https://calib.io/blogs/knowledge-base/calibration-best-practices

  • Pilih target kalibrasi ukuran yang tepat. Cukup besar untuk membatasi parameter dengan benar. Lebih disukai itu harus mencakup kira-kira. setengah dari total area bila terlihat fronto-parallel pada gambar kamera.
  • Lakukan kalibrasi pada perkiraan jarak kerja (WD) aplikasi akhir Anda. Kamera harus fokus pada jarak ini dan fokus tidak berubah setelah kalibrasi.
  • Target harus memiliki jumlah fitur yang tinggi. Lebih baik menggunakan pola yang bagus. Namun, pada beberapa titik ketahanan deteksi menderita. Rekomendasi kami adalah menggunakan penghitungan pola halus untuk kamera di atas 3MPx dan jika pencahayaannya terkontrol dan bagus.
  • Kumpulkan gambar dari berbagai bidang dan kemiringan. Pindahkan target untuk sepenuhnya menutupi area gambar dan bertujuan untuk cakupan yang merata. Distorsi lensa dapat ditentukan dengan benar hanya dari gambar fronto-parallel, tetapi estimasi panjang fokus bergantung pada pengamatan forortorting. Sertakan gambar frontoparalel, dan gambar yang diambil dengan papan miring hingga +/- 45 derajat di kedua arah horisontal dan vertikal. Memiringkan lebih banyak biasanya bukan ide yang baik karena akurasi lokalisasi fitur menderita.
  • Gunakan pencahayaan yang bagus. Ini sering diabaikan, tetapi sangat penting. Target kalibrasi sebaiknya disebarkan secara difus melalui pencahayaan fotografi yang terkontrol. Sumber titik kuat menimbulkan pencahayaan yang tidak merata, mungkin membuat deteksi gagal, dan tidak memanfaatkan rentang dinamis kamera dengan sangat baik. Bayangan dapat melakukan hal yang sama.
  • Cukup observasi. Biasanya, kalibrasi harus dilakukan pada setidaknya 6 pengamatan (gambar) dari target kalibrasi. Jika kamera tingkat tinggi atau model distorsi digunakan, lebih banyak pengamatan bermanfaat.
  • Pertimbangkan untuk menggunakan target kode unik seperti papan CharuCo. Ini memungkinkan Anda untuk mengumpulkan pengamatan dari tepi sensor dan lensa kamera, dan karenanya membatasi parameter distorsi dengan sangat baik. Juga, mereka memungkinkan Anda untuk mengumpulkan data bahkan ketika titik fitur tunggal tidak memenuhi persyaratan lainnya.
  • Kalibrasi hanya seakurat target kalibrasi yang digunakan. Gunakan target cetak laser hanya untuk memvalidasi dan menguji.
  • Pemasangan yang benar dari target kalibrasi dan kamera. Untuk meminimalkan distorsi dan membungkuk pada target yang lebih besar, pasang mereka baik secara vertikal, atau berbaring di atas dukungan yang kaku. Pertimbangkan memindahkan kamera dalam kasus-kasus ini sebagai gantinya. Gunakan tripod berkualitas, dan hindari menyentuh kamera selama akuisisi.
  • Hapus pengamatan buruk. Periksa dengan cermat kesalahan proyeksi ulang. Baik per-view dan per-feature. Jika salah satu dari ini muncul sebagai outlier, kecualikan dan kalibrasi ulang.

Alat daring untuk menghasilkan PDF untuk target kalibrasi ditemukan di sini: https://calib.io/pages/camera-calibration-pattern-generator

Jakob
sumber
Hai, selamat datang di DSP SE. Jawaban yang mempromosikan diri sendiri umumnya tidak diterima di sini. Silakan pertimbangkan untuk menjadikannya jawaban berkualitas lebih tinggi.
jojek