Saya memiliki kamera tetap dengan yang dikenal cameraMatrix
dan distCoeffs
. Saya juga punya papan catur yang diperbaiki juga, transform
dan rotation
vektor juga dihitung menggunakan solvePnP
.
Saya bertanya-tanya bagaimana mungkin untuk mendapatkan lokasi 3D dari titik 2D di pesawat yang sama dengan papan catur itu berada, seperti gambar di bawah ini:
Satu hal yang pasti adalah bahwa Z dari titik itu adalah 0, tetapi bagaimana mendapatkan X dan Y dari titik itu.
opencv
2d-3d-conversion
EBAG
sumber
sumber
Jawaban:
Anda dapat menyelesaikan ini dengan 3 langkah sederhana:
Langkah 1:
Hitung vektor arah 3d, yang diekspresikan dalam bingkai koordinat kamera, dari sinar yang sesuai dengan titik gambar 2d yang diberikan dengan membalikkan model proyeksi kamera:
Langkah 2:
Hitung arah 3d dari vektor sinar ini dalam bingkai koordinat yang terpasang pada papan catur, menggunakan pose relatif antara kamera dan papan catur:
Langkah 3:
Temukan titik 3d yang diinginkan dengan menghitung persimpangan antara sinar 3d dan bidang papan catur dengan Z = 0:
sumber
Karena kasing Anda terbatas pada dataran, Cara sederhana adalah menggunakan Homografi.
Pertama, undistort gambar Anda. Kemudian gunakan findHomography untuk menghitung matriks Homografi yang mengubah koordinat piksel Anda (gambar) menjadi koordinat nyata (ruang euclidean misalnya dalam cm). Sesuatu yang mirip dengan ini:
sumber