Bagaimana mengubah ukuran gambar mempengaruhi matriks kamera intrinsik?

18

Saya memiliki matriks kamera (saya tahu parameter intrinsik dan ekstrinsik) yang dikenal untuk gambar ukuran HxW. (Saya menggunakan matriks ini untuk beberapa perhitungan yang saya butuhkan).

Saya ingin menggunakan gambar yang lebih kecil, katakan: (setengah dari aslinya). Perubahan apa yang harus saya lakukan pada matriks, untuk menjaga hubungan yang sama?H2×W2

Saya punya, sebagai parameter intrinsik, ( , rotasi dan terjemahan)KRT

cam=K[RT]

K=(ax0u00ayv0001)

K adalah 3 * 3, saya berpikir untuk mengalikan , , , dan dengan 0,5 (faktor gambar diubah ukurannya), tapi saya tidak yakin.a y u 0 v 0axayu0v0

matlabit
sumber

Jawaban:

13

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 kamu=kamu2,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:

(ax0u00ayv0001)(R11R12R13TxR21R22R23TyR31R32R33Tz0001)(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:

u=u/2,v=v/2

Jadi

u=(1/2)M1PM3Pv=(1/2)M2PM3P

Mengubah kembali ke bentuk matriks memberi kita:

(0.50000.50001)(ax0u00ayv0001)(R11R12R13TxR21R22R23TyR31R32R33Tz0001)(xyz1)

Yang sama dengan

(0.5ax00.5u000.5ay0.5v0001)(R11R12R13TxR21R22R23TyR31R32R33Tz0001)(xyz1)

Untuk informasi tambahan, lihat Forsyth , bab 3 - Kalibrasi kamera geometris.

Andrey Rubshtein
sumber
Terima kasih banyak atas penjelasannya !!! Saya hanya tidak begitu yakin apa yang Anda maksud dengan sistem berbasis nol, saya menggunakan matlab, apakah saya perlu penyesuaian lainnya?
matlabit
u=(u1)/2+1,v=(v1)/2+1
8

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.

[new_camera_matrix] = [image_transform]*[old_camera_matrix]

2n

x=2n(x+.5).5

y=2n(y+.5).5

ini dapat diwakili oleh matriks

(2n02n1.502n2n1.5001)

jadi matriks kamera akhir Anda akan

(2n02n1.502n2n1.5001)(ax0u00ayv0001)

Palu
sumber
2n
1
Saya pikir intinya adalah bahwa pusat piksel "0, 0" tidak benar-benar di "0, 0" (= sudut kiri atas piksel) tetapi pada "0,5, 0,5". Jadi, Anda harus memperhitungkan offset itu sebelum dan sesudah transformasi, dan faktornya selalu 0,5, tidak peduli faktor penskalaan.
Jan Rüegg
Yup, itu benar sekali
Hammer