Apakah mungkin untuk mengkonversi dari bentuk 2D ke 3D?

8

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 mobil bergerak di jalan juga Anda dapat merujuk gambar berikutnya juga.

tampilan samping dan tampilan depan

sagar
sumber
1
Menandai 50% dari pertanyaan Anda dengan berani, benar-benar tidak membantu.
jojek
1
@jojek pak saya telah menambahkan satu angka untuk referensi
sagar

Jawaban:

4

[Diedit] Begini caranya.

Langkah-langkah: 1. Mengisolasi Bagian Road Divider.

Gambar yang DipotongIsolasi strip Kuning

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.

Kuadran untuk Berubah

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());

Gambar Berubah

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:

Gambar Berubah Akhir

Shreelock
sumber
1
@ A Matlabber Pak di Matlab apakah ada fungsi untuk mengkonversi dari proyeksi 2d ke 3d. ??
sagar
Masalah Anda bukan masalah proyeksi 2d ke 3d. Ini masalah transformasi Homografis dan Pemetaan Perspektif, kemudian memproses lebih lanjut yang akan membantu Anda menghitung jarak (apa yang ingin Anda capai dengan membuat '3d'). Mungkin diskusi ini dapat membantu Anda.
shreelock
1
@A Matlabber Pak semakin sulit untuk memahami Transformasi Homografis dan Pemetaan Perspektif. Saya mencari di google, tetapi tidak mendapatkan ide tentang hal itu ..
sagar
Anda dapat google untuk beberapa contoh Transformasi Homografis dan Pemetaan Perspektif. Ini adalah topik pengantar, yang diajarkan di banyak kursus online visi komputer. Saya cukup sibuk sekarang, kalau tidak saya akan memberi Anda beberapa refrences tentang mereka. Cobalah mencari kursus tentang Image Processing / Computer Vision, mereka jarang memiliki demonstrasi / latihan pemrograman pada seperti jenis masalah.
shreelock
@ A Matlabber ok, saya akan melakukan apa yang Anda katakan. Terima kasih.
sagar
3

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.

nivag
sumber
Pak semakin sulit untuk memahami Transformasi Homografis dan Pemetaan Perspektif. Saya mencari di Google juga tautan yang diberikan, tetapi tidak mendapatkan gagasan tentang hal itu ..
sagar
1
@sagar Mencari "Multiple View Geometry in Computer Vision" dari Hartley & Zisserman. Ini adalah buku yang menjelaskan homografi dengan cara alami (menggunakan koordinat homogen, di mana transformasinya linier).
Libor
1

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.

Dima
sumber