Saya telah mengambil posisi mobil pada bingkai yang berbeda dari video . Misalkan mobil (egleft side car yang datang ke arah kita dalam gambar) centroid pada video frame1 adalah P (x1, y1) dan Q (x2, y2) pada video frame4.
Apakah mungkin untuk merepresentasikan poin P dan Q ke dalam 3D? sehingga saya dapat menghitung jarak piksel yang benar d (PQ) dan akhirnya menghitung jarak aktual
Catatan: Anda dapat mengasumsikan bahwa kamera itu diam, ditempatkan pada ketinggian 10 m dari permukaan tanah. Anda juga dapat mengasumsikan data yang sesuai jika Anda mau juga Anda dapat merujuk gambar berikutnya juga.
Jawaban:
[Diedit] Begini caranya.
Langkah-langkah: 1. Mengisolasi Bagian Road Divider.
Kemudian, menggunakan Houghlines, cari tahu garis terpanjang di Image. Cari tahu titik-titik ekstrem yang melintasi batas gambar. Anda mendapat poin Quadilateral. Saya melewatkan bagian ini dengan Secara Manual Memilih mereka. Dalam kasus saya, lebar jalan di atas gambar adalah 10, dan di bawah adalah 60.
Sekarang, untuk Tujuan, kita harus Gambar sehingga Divider Quadilateral memiliki lebar seragam 60, jadi kita menyimpan di array lain titik baru, yang memiliki titik bawah yang sama, tetapi titik atas dimodifikasi karena mereka membentuk persegi panjang dengan ketinggian sama dengan gambar (atau lebih besar, Anda dapat menyesuaikan sesuai keinginan Anda setelah menjalankannya sekali dan melihat hasilnya), tetapi lebar 60. Ingat, kami mengubah gambar kami sedemikian rupa sehingga pembagi masuk ke dalam Area Persegi Panjang ini. Gambar akan berubah secara otomatis.
Sekarang, gunakan
Mat TransformMat = getPerspectiveTransform(ipPts, opPts);
dari pembuka pada Poin kuadranal awal dan tujuan, kami mendapatkan Matriks Transform, yang kami terapkan pada Gambar Uji kami.
warpPerspective(ipImg, opImg, TransformMat, ipImg.size());
Anda akan melihat banyak Area Dipotong agar sesuai dengan Output dalam Ukuran InputImage. Namun, Anda akan melihat bahwa Gambar Diubah untuk mendapatkan Pembagi paralel, seperti yang kami harapkan. Dengan melakukan beberapa Terjemahan dan Barang, dan mengambil Ukuran Gambar Output yang lebih besar, Anda akan mendapatkan ini. Kita tidak pernah bisa mendapatkan Output Image yang dibungkus dengan sempurna, karena ukurannya bisa sangat besar. Tapi kami akan mencapai beberapa kendala yang akan memenuhi tugas kami. Inilah gambar Terakhir:
sumber
Ini terlihat seperti semacam masalah penelusuran sinar . Jika Anda mengetahui posisi dan orientasi kamera Anda, Anda harus dapat menghitung matriks proyeksi 3x4 dan kebalikannya.
Ini akan memungkinkan Anda untuk mengkonversi dari titik gambar ke posisi 3d (di jalan). Diskusi ini http://opencv-users.1802565.n2.nabble.com/2D-to-3D-projection-with-given-plane-td7272428.html mungkin memiliki informasi yang lebih bermanfaat.
Sedangkan untuk mengaplikasikannya di matlab. Ada affine3d yang bisa Anda gunakan untuk menyimpan transformasi. Mungkin juga ada hal-hal yang berguna untuk proyeksi / penelusuran sinar dalam pertukaran file seperti http://www.mathworks.com/matlabcentral/fileexchange/25974-raytracer tapi saya belum melihat secara detail untuk menemukan apa yang relevan untuk apa kamu ingin.
sumber
Jika Anda dapat mengkalibrasi kamera Anda, dan jika Anda dapat mendeteksi beberapa titik referensi di permukaan jalan, maka Anda bisa mendapatkan koordinat 3D dari titik-titik gambar yang ada di jalan. Ini mengasumsikan bahwa jalan ada di pesawat. Dengan kata lain, jika Anda dapat mendeteksi mobil, maka Anda dapat menghitung koordinat 3D dari bagian bawah mobil. Lihat contoh ini di MATLAB menggunakan Toolbox Sistem Visi Komputer.
sumber