Kalibrasi kamera / model kamera lubang pin dan bekerja pada posisi 3d

10

Saya memiliki kamera yang dikalibrasi dan memiliki parameter intrinsik. Saya juga memiliki parameter ekstrinsik relatif terhadap suatu titik (asal dunia) pada permukaan planar di dunia nyata. Poin ini telah saya tetapkan sebagai asal dalam koordinat dunia nyata [0,0,0] dengan normal [0,0,1].

Dari parameter ekstrinsik ini, saya dapat mengetahui posisi kamera dan rotasi dalam koordinat dunia 3d pesawat menggunakan ini di sini: http://en.wikipedia.org/wiki/Camera_resectioning

Sekarang saya memiliki titik kedua yang telah saya ekstrak koordinat gambar untuk [x, y]. Bagaimana saya sekarang mendapatkan posisi 3d dari titik ini di sistem koordinat dunia?

Saya pikir intuisi di sini adalah bahwa saya harus melacak sinar yang berasal dari pusat optik kamera (yang sekarang saya memiliki posisi 3D seperti dijelaskan di atas), melalui bidang gambar [x, y] dari kamera dan kemudian melalui pesawat dunia nyata saya yang saya definisikan di atas.

Sekarang saya bisa memotong dunia 3d ray koordinat dengan pesawat seperti yang saya tahu normal dan menunjuk pada pesawat itu. Yang tidak saya dapatkan adalah bagaimana saya mengetahui posisi 3d dan arah ketika meninggalkan bidang gambar melalui piksel. Ini transformasi melalui berbagai sistem koordinat yang membingungkan saya.

Cheetah
sumber
Periksa jawaban ini, mungkin membantu. Jika Anda pikir sesuatu dapat / mungkin selesai katakan saja kepada saya. dsp.stackexchange.com/a/2737/1473
Jav_Rock

Jawaban:

6

Jika Anda memiliki ekstrinsik maka itu sangat mudah. Memiliki ekstrinsik sama dengan memiliki "pose kamera" dan sama seperti memiliki homografi. Periksa pos ini di stackoverflow.

Anda memiliki ekstrinsik, juga disebut pose kamera, yang digambarkan sebagai terjemahan dan rotasi:

Pose=[R|t]=[R11R12R13txR21R22R23tyR31R32R33tz]

Anda bisa mendapatkan Homografi dari Pose dengan cara ini:

H=1tz[R1xR2xtxR1yR2ytyR1zR2ztz]

Kemudian Anda dapat memproyeksikan poin 2D Anda ke poin 3D yang sesuai dengan mengalikan Homografinya dengan poin:

p2D=[xy1] Menambahkan z=1 untuk membuat mereka homogen

p3D=Hp2D

p=p/p(z) Menormalkan poin

Jav_Rock
sumber
apa yang kamu maksud dengan p (z) di sini?
Belal Homaidan
3

Anda memiliki dua opsi, gunakan kembali proyeksi atau proyeksi antara dua pesawat (homografi).

Dengan proyeksi belakang Anda mengambil pseudo kebalikan dari Anda matriks kamera dan mengalikan hasilnya dengan presentasi titik gambar yang homogen:P

P=K[RRC]Xreprojected=P+x

Sekarang Anda memiliki garis 3D yang perjalanan melalui pusat kamera dan titik X . Jika mau, Anda dapat mengonversikan ini ke beberapa presentasi yang lebih mudah ditangani. Misalnya dengan satu titik dan vektor arah (ingat untuk menormalkan koordinat homogen V = ω [ X Y Z 1 ] T sehingga faktor skala ω = 1 sebelum perhitungan aktual):CXV=ω[XYZ1]Tω=1

u=XreprojectedCv=uuL(t)=C+tv

Π=[π1π2π3π4]T,π1X+π2Y+π3Z+π4=0L(t)=Πt

3×3H

Xplane=[XY01]Tx=PXplane=H[XY1]T

x

Xplane=H1x

H

H=R+1dTNT

dT=RC

buq2
sumber
2

Anda tidak dapat mengetahui posisi 3d dari poin kedua. Ini bisa berupa titik mana saja pada sinar dari pusat kamera Anda hingga tak terbatas.

Anda dapat melakukan hal berikut:

  • Buat ruang 3d standar yang menyerupai adegan kehidupan nyata
  • Dapatkan lebih banyak titik gambar dari sudut yang berbeda, menggunakan persimpangan sinar dari sudut yang berbeda, Anda bisa mendapatkan perkiraan titik 3d.
Geerten
sumber
Tunggu sebentar. Saya dapat menemukan titik dunia 3d bahwa sinar 3d memotong permukaan planar, tentunya? Seperti yang saya tahu koordinat dunia 3d dan dunia 3d normal dari pesawat itu ..... titik 3d yang saya coba temukan adalah titik yang memotong permukaan planar !! (Maaf saya merasa penjelasan saya tidak cukup baik)
Cheetah
Apa yang Anda maksud dengan permukaan planar? Gambar pesawat, atau bidang koordinat nol dunia? Dalam kasus yang terakhir, Anda dapat menghitung persimpangan, tetapi itu berarti adegan 3d Anda bukan 3d, tetapi 2d :) (karena ini adalah pesawat).
Geerten
Ya maaf, itu tidak terpikir oleh saya. Saya mengerti apa yang Anda katakan, itu tidak masuk akal bagi saya secara visual. Jadi, ya adegan saya sebenarnya "2d" karena saya memiliki bidang gambar dan saya memiliki bidang dunia nyata, yang asal dunia nyata [0,0,0] terletak pada dan memiliki dunia nyata normal [0,0, 1], oleh karena itu setiap titik yang terletak pada bidang dunia nyata ini adalah dalam bentuk [x, y, 0]. Saya tahu saya bisa menghitung persimpangan meskipun kapak + dengan + cz + d = 0, tapi ini adalah masalah yang saya hadapi. (Bersambung di komentar berikutnya)
Cheetah
Saya memiliki sinar yang dimulai di pusat kamera / asal saya yang memiliki dunia nyata [x, y, z] untuk dan dunia nyata yang normal [nx, ny, nz]. Saya perlu menembakkan sinar dari titik ini yang memotong bidang gambar di [u, v] dan kemudian memotong bidang dunia nyata di [x, y, 0] (inilah x ini, y yang ingin saya dapatkan). Apa yang saya mengalami masalah adalah bagian pertama, persimpangan dengan bidang gambar. Saya tidak bisa melihat bagaimana saya melakukannya?
Cheetah
Anda mungkin ingin melihat: en.wikipedia.org/wiki/Line-plane_intersection
Geerten