Как изменение размера изображения влияет на встроенную матрицу камеры?

18

У меня есть матрица камеры (я знаю как внутренние, так и внешние параметры), известная по изображению размером HxW. (Я использую эту матрицу для некоторых расчетов).

Я хочу использовать уменьшенное изображение, скажем: (половина оригинала). Какие изменения мне нужно внести в матрицу, чтобы сохранить то же отношение?H2×W2

У меня есть, в качестве внутренних параметров, ( , вращение и перевод)R TKRT

cam=K[RT]

K=(ax0u00ayv0001)

K 3 * 3, я думал , умножая , , и на 0,5 (фактор изображение было изменено), но я не уверен.а у у 0 в 0axayu0v0

matlabit
источник

Ответы:

13

Примечание. Это зависит от того, какие координаты вы используете в измененном изображении. Я предполагаю, что вы используете систему с нулями (например C, в отличие от Matlab) и 0 преобразуется в 0. Кроме того, я предполагаю, что у вас нет перекоса между координатами. Если у вас есть перекос, его также нужно умножить

Краткий ответ : Предполагая, что вы используете систему координат, в которой , да, вы должны умножить на 0,5.u=u2,v=v2ax,ay,u0,v0

Подробный ответ Функция, которая преобразует точку в мировых координатах в координаты камеры :P(x,y,z,1)>(u,v,S)

(ax0u00ayv0001)(R11R12R13TxR21R22R23TyR31R32R33Tz0001)(xyz1)

Где (u,v,S)>(u/S,v/S,1) , поскольку координаты однородны.

Вкратце это можно записать как uзнак равноm1пм3п,vзнак равном2пм3п
, гдеMпредставляет собой произведение двух матриц упоминалось выше, иявляется iой строке матрицы. (Продукт скалярный продукт).мяM

Изменение размера изображения можно подумать о:

U'знак равноU/2,v'знак равноv/2

таким образом

U'знак равно(1/2)M1пM3пv'знак равно(1/2)M2пM3п

Преобразование обратно в матричную форму дает нам:

(0,50000,50001)(aИкс0U00aYv0001)(р11р12р13TИкср21р22р23TYр31р32р33TZ0001)(ИксYZ1)

Который равен

(0,5aИкс00,5U000,5aY0,5v0001)(р11р12р13TИкср21р22р23TYр31р32р33TZ0001)(ИксYZ1)

За дополнительной информацией обращайтесь к Форсайту , глава 3 - Калибровка геометрической камеры.

Андрей Рубштейн
источник
Большое спасибо за объяснение !!! Я просто не уверен, что вы подразумеваете под системой с нулями, я использую Matlab, мне нужны какие-то другие настройки?
Матлабит
U'знак равно(U-1)/2+1,v'знак равно(v-1)/2+1
8

Андрей упомянул, что его решение предполагает, что 0 преобразуется в 0. Если вы используете пиксельные координаты, это, вероятно, неверно, когда вы изменяете размер изображения. Единственное предположение, которое вам действительно нужно сделать, это то, что преобразование вашего изображения может быть представлено матрицей 3х3 (как продемонстрировал Андрей). Чтобы обновить матрицу камеры, вы можете просто умножить ее на матрицу, представляющую преобразование вашего изображения.

[new_camera_matrix] = [image_transform]*[old_camera_matrix]

2N

Икс'знак равно2N*(Икс+0,5)-0,5

Y'знак равно2N*(Y+0,5)-0,5

это может быть представлено матрицей

(2N02N-1-0,502N2N-1-0,5001)

так что ваша окончательная матрица камеры будет

(2N02N-1-0,502N2N-1-0,5001)(aИкс0U00aYv0001)

молоток
источник
2N
1
Я думаю, дело в том, что центр пикселя «0, 0» на самом деле не в «0, 0» (= верхний левый угол пикселя), а в «0,5, 0,5». Таким образом, вы должны учитывать это смещение до и после преобразования, и коэффициент всегда равен 0,5, независимо от коэффициента масштабирования.
Ян
Да, это точно верно
Хаммер