Catatan: Itu tergantung pada koordinat apa yang Anda gunakan dalam gambar yang diubah ukurannya. Saya berasumsi bahwa Anda menggunakan sistem berbasis nol (seperti C
, tidak seperti Matlab
) dan 0 ditransformasikan menjadi 0. Juga, saya mengasumsikan bahwa Anda tidak memiliki kemiringan antara koordinat. Jika Anda memiliki kemiringan, itu harus dikalikan juga
Jawaban singkat : Anggap Anda menggunakan sistem koordinat di mana u′=u2,v′=v2 , ya, Anda harus kalikanax,ay,u0,v00,5.
Jawaban terinci Fungsi yang mengonversi titik P dalam koordinat dunia ke koordinat kamera (x,y,z,1)−>(u,v,S) adalah:
⎛⎝⎜ax000ay0u0v01⎞⎠⎟⎛⎝⎜⎜⎜R11R21R310R12R22R320R13R23R330TxTyTz1⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜xyz1⎞⎠⎟⎟⎟
Di mana (u,v,S)−>(u/S,v/S,1) , karena koordinatnya homogen.
Singkatnya, ini dapat ditulis sebagai
u=m1Pm3P,v=m2Pm3P
di manaMadalah produk dari dua matriks yang disebutkan di atas, danmiadalah baris i'th dari matriksM.. (Produknya adalah produk skalar).
Mengubah ukuran gambar dapat dipikirkan:
kamu′=u/2,v′=v/2
Jadi
u′=(1/2)M1PM3Pv′=(1/2)M2PM3P
Mengubah kembali ke bentuk matriks memberi kita:
⎛⎝⎜0.50000.50001⎞⎠⎟⎛⎝⎜ax000ay0u0v01⎞⎠⎟⎛⎝⎜⎜⎜R11R21R310R12R22R320R13R23R330TxTyTz1⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜xyz1⎞⎠⎟⎟⎟
Yang sama dengan
⎛⎝⎜0.5ax0000.5ay00.5u00.5v01⎞⎠⎟⎛⎝⎜⎜⎜R11R21R310R12R22R320R13R23R330TxTyTz1⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜xyz1⎞⎠⎟⎟⎟
Untuk informasi tambahan, lihat Forsyth , bab 3 - Kalibrasi kamera geometris.
Andrey menyebutkan bahwa solusinya mengasumsikan 0 ditransformasikan menjadi 0. Jika Anda menggunakan koordinat piksel ini kemungkinan tidak benar ketika Anda mengubah ukuran gambar. Satu-satunya asumsi yang benar-benar perlu Anda buat adalah bahwa transformasi gambar Anda dapat diwakili oleh matriks 3x3 (seperti yang ditunjukkan Andrey). Untuk memperbarui matriks kamera Anda, Anda dapat melakukan pra-mulanya dengan matriks yang mewakili transformasi gambar Anda.
ini dapat diwakili oleh matriks
jadi matriks kamera akhir Anda akan
sumber