Uwaga: To zależy od współrzędnych używanych w obrazie o zmienionym rozmiarze. Zakładam, że używasz układu zerowego (jak C
, w przeciwieństwie do Matlab
), a 0 jest przekształcane na 0. Ponadto, zakładam, że nie masz skosu między współrzędnymi. Jeśli masz przekrzywienie, należy je również pomnożyć
Krótka odpowiedź : Zakładając, że używasz układu współrzędnych, w którym , tak, powinieneś pomnożyć przez 0,5u′= u2), v′= v2)zax, ay, u0, v0
Szczegółowa odpowiedź Funkcja, która przekształca punkt we współrzędnych świata na współrzędne kamery to:P.( x , y, z, 1 ) - > ( u , v , S)
⎛⎝⎜zax000zay0u0v01⎞⎠⎟⎛⎝⎜⎜⎜R11R21R310R12R22R320R13R23R330T.xT.yT.z1⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜xyz1⎞⎠⎟⎟⎟
Gdzie , ponieważ współrzędne są jednorodne.( u , v , S) - > ( u / S, v / S, 1 )
W skrócie można to zapisać jako
gdzie jest iloczynem dwóch wspomnianych powyżej matryc, a jest i ' ty rząd macierzy . (Produkt jest produktem skalarnym).u = m1P.m3)P., v = m2)P.m3)P.
M.mjaM.
Można zmienić rozmiar obrazu:
u′= u / 2 , v′=v/2
A zatem
u′=(1/2)M1PM3Pv′=(1/2)M2PM3P
Konwersja z powrotem do postaci macierzowej daje nam:
⎛⎝⎜0.50000.50001⎞⎠⎟⎛⎝⎜ax000ay0u0v01⎞⎠⎟⎛⎝⎜⎜⎜R11R21R310R12R22R320R13R23R330TxTyTz1⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜xyz1⎞⎠⎟⎟⎟
Co jest równe
⎛⎝⎜0.5ax0000.5ay00.5u00.5v01⎞⎠⎟⎛⎝⎜⎜⎜R11R21R310R12R22R320R13R23R330TxTyTz1⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜xyz1⎞⎠⎟⎟⎟
Aby uzyskać dodatkowe informacje, patrz Forsyth , rozdział 3 - Kalibracja kamery geometrycznej.