3D相机模型
面扫描针孔相机:面扫描相机使用一个镜头来进行中心投影,图像可能会出现径向和切向畸变。
面扫描远心相机:面扫描相机使用一个远心镜头来进行平行投影,图像可能会出现径向和切向畸变。
线扫描针孔相机:线扫描相机使用一个镜头来进行中心投影,图像可能会出现径向畸变。
对于面扫描相机,点P(C)的投影给出了相机坐标系到亚像素图像的过程,它包括了以下几个步骤:1.点投影到图像平面,i.e:相机的传感器平面。如果是面扫描针孔相机模型,如果焦距在CamParam(相机参数)中大于0,这个投影就可以描述成以下问题:
P(C) = {X, Y, Z}
U = Focus * X / Z;
V = Focus * Y / Z;
如果是面扫描远心相机模型,如果焦距在CamParam(相机参数)中为0,假设摄像机镜头进行的平行投影,在这种情况下,这个投影就被描述成下面的问题:
P(C) = {X, Y, Z}
U = X ;
V = Y ;
对于面扫描相机的两种类型,镜头畸变模型被划分成division(分工)模型和polynomial(多项式)模型。division(分工)模型使用一个参数(Kappa)来表示径向畸变。
如果是division(分工)模型,从畸变图像平面坐标系转换到非畸变图像平面坐标系使用如下公式:
U = u / (1 + Kappa*(u*u + v*v))
V = v/(1+ Kappa*(u*u + v*v))
从非畸变图像平面坐标系到畸变图像平面坐标系的反变换使用如下公式:
u = (2*U)/(1 + sqrt(1 - 4*Kappa*(U*U + V*V)))
v = (2*V)/(1 + sqrt(1 - 4*Kappa*(U*U + V*V)))
如果是polynomial(多项式)模型,使用3个参数K1,K2,K3来表示径向畸变,两个参数P1,P2来表示切向畸变,从畸变图像平面坐标系转换到非畸变图像平面坐标系使用如下公式:
U = u + u*(K1*r*r + K2*r*r*r*r + K3*r*r*r*r*r*r)+ 2*P1*u*v + P2*(r*r + 2*u*u)
V = v + v*(K1*r*r + K2*r*r*r*r + K3*r*r*r*r*r*r)+ P1*(r*r + 2*v*v)+ 2*P2*u*v
r = sqrt(u*u + v*v)
这个问题不能进行反变换,因此,畸变图像平面坐标必须被计算出从非畸变图像平面坐标。
两种畸变模型的使用,在StartCamParam中通过变量的数目来识别,如果StartCamParam包含8个值,说明是division(分工)模型。如果StartCamParam包含12个值,说明是polynomial(多项式)模型。
最后,点从图像平面坐标系转换到图像坐标系即像素坐标系:
c = u / Sx + Cx;
r = v / Sy + Cy;
对于线扫描相机,在相机与目标物体的相对运动建立模型。在HALCON中,假设这个运动是由以下几个条件构成的:
1.相机沿一条直线以恒定的速度移动。
2.相机的方向是固定的。
3.所有的图像都是相对运动的结果。
这个运动被描述成一个运动矢量V=(Vx, Vy, Vz),在[meter/scanline]相机坐标系中,假设一个固定的物体,运动矢量描述相机的运动。实际上,这个过程相当于一个运动的物体沿-V方向相对于固定相机的运动。
这个线扫面相机的坐标系的定义如下:这个坐标系的中心就是投影的中心。Z轴和光轴同向,因此可见点就有一个Z坐标;Y轴同时垂直于传感器线和Z轴,因此这个运动矢量会有一个Y坐标;X轴同时垂直于Y轴和Z轴,从而,X轴,Y轴和Z轴形成了一个坐标系。
在图像采集过程中,相机相对于物体的移动,相机坐标系也会相对于物体运动。图像的每条线是从不同角度拍摄的,这意味着每条线都有不同的姿势。为了使事情更简单,在HALCON中,所有的转换从世界坐标系到相机坐标系,是基于第一条图像线的姿势。在点投影到图像过程中,这个运动矢量V信息就被包含了。因此,基于第一条图像线的姿势可以有函数
find_marks_and_pose 和 camera_calibration来计算返回。
对于线扫描相机,点的投影从相机坐标系到图像平面坐标系的定义如下:
假设:P(c) = {X, Y , Z}
求解m,u,t:
m*D*u = x - t*Vx;
- m*D*pv = y - t*Vy;
m*Focus = z - t*Vz;
D = 1 / (1 + Kappa*(u*u + pv*pv))
pv=Sy*Cy
这已经包含了径向畸变的补偿,注意:这个线扫描相机只能用于division(分工)模型。
最终,点被转换到图像坐标系:
c = u/Sx + Cx
r = t