Примечание. Это зависит от того, какие координаты вы используете в измененном изображении. Я предполагаю, что вы используете систему с нулями (например C
, в отличие от Matlab
) и 0 преобразуется в 0. Кроме того, я предполагаю, что у вас нет перекоса между координатами. Если у вас есть перекос, его также нужно умножить
Краткий ответ : Предполагая, что вы используете систему координат, в которой , да, вы должны умножить на 0,5.u′=u2,v′=v2ax,ay,u0,v0
Подробный ответ Функция, которая преобразует точку в мировых координатах в координаты камеры :P(x,y,z,1)−>(u,v,S)
⎛⎝⎜aИкс000aY0U0v01⎞⎠⎟⎛⎝⎜⎜⎜R11R21R310R12R22R320R13R23R330TxTyTz1⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜xyz1⎞⎠⎟⎟⎟
Где (u,v,S)−>(u/S,v/S,1) , поскольку координаты однородны.
Вкратце это можно записать как
u=m1Pm3п, v =m2пm3п
,
гдеMпредставляет собой произведение двух матриц упоминалось выше, иявляется iой строке матрицы. (Продукт скалярный продукт).мяM
Изменение размера изображения можно подумать о:
U'= u / 2 , v'= v / 2
таким образом
U'= ( 1 / 2 ) М1пM3пv'= ( 1 / 2 ) М2пM3п
Преобразование обратно в матричную форму дает нам:
⎛⎝⎜0,50000,50001⎞⎠⎟⎛⎝⎜aИкс000aY0U0v01⎞⎠⎟⎛⎝⎜⎜⎜р11р21р310р12р22р320р13р23р330TИксTYTZ1⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜ИксYZ1⎞⎠⎟⎟⎟
Который равен
⎛⎝⎜0,5 аИкс0000,5 аY00,5 ед.00,5 В01⎞⎠⎟⎛⎝⎜⎜⎜р11р21р310р12р22р320р13р23р330TИксTYTZ1⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜ИксYZ1⎞⎠⎟⎟⎟
За дополнительной информацией обращайтесь к Форсайту , глава 3 - Калибровка геометрической камеры.
Андрей упомянул, что его решение предполагает, что 0 преобразуется в 0. Если вы используете пиксельные координаты, это, вероятно, неверно, когда вы изменяете размер изображения. Единственное предположение, которое вам действительно нужно сделать, это то, что преобразование вашего изображения может быть представлено матрицей 3х3 (как продемонстрировал Андрей). Чтобы обновить матрицу камеры, вы можете просто умножить ее на матрицу, представляющую преобразование вашего изображения.
это может быть представлено матрицей
так что ваша окончательная матрица камеры будет
источник