Как получить очки в стереоизображении от внешних параметров
Я откалибровал пару камер, зная их внутренние и внешние параметры. Зная, что они оба смотрят на плоскость, если я определю некоторые точки на одном изображении, как я могу получить точку на другом изображении?
Камеры расположены довольно близко друг от друга, поэтому предположим, что нет никаких преград, обе могут видеть один и тот же объект.
Есть ли openCV unction или набор функций для этого? Моя точка зрения на Z=0 в мире.
В принципе:
P_CAM1=(200,300) -> P_CAM2= ?
1 ответ
Решение
Ответ:
- Нерассортировать изображения.
cv::undistort
- подсчитывать
P1ccdf = A^(-1)*P1
-> Точка P1 в f=1 мировой системе координат. - Рассчитать точку в мире ref
Z=0
для этого:- Рассчитать координаты оптического центра в мире: Copt1=[0,0,0,1]T
Copt1w=-R1t*T1
- вычислить вектор между Coptw1 и P1ccdf: с некоторой математикой ->
V1w=R1T*P1ccdf
Coptw1+lambda*V1w=[Pxw,Pyw,0]T
->lambda=-cpotw(z)/V1(z)
Coptw1+lambda*V1w=[Pxw,Pyw,0]T=P1w
- Рассчитать координаты оптического центра в мире: Copt1=[0,0,0,1]T
- Защитите точку мира в cam2
P1ccd2f = R2T2 *[Pxw Pyw 0 1]T
P1ccd2f=P1ccd2f/P1ccd2f(3)
P2=A2*P1ccd2f
где
P
означает точкуA
является внутренней матрицей (4х4)RT
это матрица камеры (3х4)