实现目的:在车载环视系统中,会存在有在不同的观察视角下的视图实现需求,这就需要我们找到不同的视角和原图的像素对应关系。一般来说不同视角下的视图实际是通过改变的原图的外参矩阵实现。先将原始图的外参矩阵转换为欧拉角pitch-yaw-roll,然后根据需要改变欧拉角 然后转换为新的外参矩阵
以下是推导过程:
K1_3X3 * RT1_3X3 * K2_3X3^-1 * RT2_3X3^-1 * Zc2 / Zc1 * [u2 v2 1] = [u1 v1 1]
上式中:K1_3X3和 K2_3X3是相机的内参矩阵,因为是同一相机不同视角所以这两者相等。
RT1_3X3 是旋转矩阵(z=0 去掉第三列)和旋转向量的合并
^-1表示逆矩阵。
Zc2 ,Zc1 分别表示两相机尺度变换因子
[u2 v2 1] , [u1 v1 1] 表示去畸变的像素坐标
ps上式是在无畸变情况下的推导过程。
以下是测试代码,原图不方便贴出涉及到公司,需要的可以私信
from pickle import FALSE, TRUE
import cv2
import numpy as np
if __name__ == '__main__':
# 鱼眼畸变图内参
K_ = np.array([426.666666666667,0,960.000000000000,0,426.666666666667,600.000000000000,0,0,1], np.float32).reshape(3,3)
# 鱼眼畸变图畸变系数 用的是opencv fisheye模型
D_ = np.array([0.058968600000, -0.010222100000,0.001918210000, -0.000627711000], np.float32)
#计算出来摄像头外参
Tvec_ = np.array([52.096304699100, 2149.916214944551,-1431.591440962086], np.float32).reshape(3,1)
#人为改变外参--改变旋转向量相当于改变相机的视角