To Be Continue…
问题重述
关于确定两部相机的相对位置
的相机系统标定
问题,描述为:设计标靶
,取1个边长为100mm的正方形,分别以四个顶点(对应为A、C、D、E)为圆心,12mm为半径作圆。以AC边上距离A点30mm处的B为圆心,12mm为半径作圆,要求
:
圆的圆心
在该相机像平面的像坐标
, 这里坐标系原点取在该相机的光学中心
,x-y平面平行于像平面;像距
(即光学中心到像平面的距离)是1577个像素单位(1毫米约为3.78个像素单位),相机分辨率
为1024×768;精度
和稳定性
进行讨论;相对位置
的数学模型和方法.本文研究数码相机的标定
问题,在了解相机成像模型的前提下,对靶标的像用Matlab
和python
进行处理,得到靶标上五个圆圆心的像坐标
。再利用坐标系间的转换结合python
解方程由圆心的像坐标
解出相机坐标系到世界坐标系之间的旋转变换
R R R和平移变换
T T T,由此确定每部相机及其光轴对世界坐标系的相对位置,进而得到两台相机的相对位置
。
本文牵涉到坐标系的转换,因此首先为整个系统建立如下坐标系:以靶标为参照物的世界坐标系
,以相机光学中心为原点的相机坐标系
、像平面物理坐标系
和像平面像素坐标系
。
对于第一个问题,我们运用同侧外公切线法
求各圆圆心像素坐标的模型,即对于两个等大的圆作外公切线,其中任何一个圆的圆心都在该圆上两个切点的连线上
,该圆圆心在像平面上的像也在两切点的像的连线上
。作两组切点
的像的连线,其交点即
为圆心。根据圆心的像素坐标,可求出圆心在相机坐标系中的物理坐标
。在求解切线的时候,本文使用Matlab
首先进行图像处理,得到其像素轮廓,然后用python
在不同的圆两两之间寻找公切线
,得到切点
,进而得到圆心
。·
在第二问中,我们根据第一问中提出的模型以及靶标的像(图三)求出了五个圆圆心的像坐标(像素坐标):A(322.24,193.44)
,B(419.67,195.65)
,C(630.89,200.45)
,D(288.51,501.96)
,E(591.66,497.00)
。又因为根据第一问得待求参数只有六个了,所以还需要一个点及其像坐标,即为 F(470.67,197.32)
可以取圆A和圆C的内公切线的交点,由高等几何
的知识,共线三点保持简单比不变
等性质,得到含六个方程的线性方程组
,进而解出外参数
。
第三问中,我们考虑模型的精度
和稳定性
。通过比较成像前后的交比(前:1.290,后:1.30)基本不变,该模型具有较好的准确性与稳定性。但是本身有一些客观因素会造成精度的偏差比如相机在获取图像时就存在精度上的偏差,再者由于像素点为离散点
,模型中求出来的不是准确切线,只有在像的大小合适的情况下才能保证精度。至于稳定性,则跟所给靶标圆的半径有关。
第四问中,本文根据针孔摄像机模型以及靶标的几何形状和大小,求出靶标各圆心在相机坐标系的坐标,用同样的方法求出靶标在另一个相机坐标系中的坐标。根据相机坐标系与世界坐标系之间的转换关系
,代入靶标中各圆心在相机坐标系和世界坐标系中的坐标,用Matlab
解非线性方程组可计算出两个相机坐标系的变换关系,包括旋转矩阵
R 和平移矩阵
T。由于每部相机及其光轴对世界坐标系的相对位置已经确定,所以两部相机的相对位置
就确定了。
> 模型假设
物点
、光心
和像点
这三点在同一条直线
;大气
因素对成像的影响;畸变
;焦距相等
;垂直
于像平面;远小于
物距,可近似等于像距;精确
的.> 建模准备
由透镜的成像原理,有
1 f = 1 u + 1 v \frac{1}{f}=\frac{1}{u}+\frac{1}{v} f1=u1+v1
其中, f f f为透镜的
焦距
, u u u为物距
, v v v为像距
。
物体在摄像机成像原理可知,一般地有 u ≫ f u\gg f u≫f,于是 v = f v=f v=f,这时可将透镜成像原理
近似地由小孔成像原理
代替,所以可以用物体在投影平面
的像代替物体在像平面的像。
空间任何一点P在图像上的成像位置可以用针孔模型
近似表示,即任何点P在图像上的投影位置P’,为光心O与P点的连线OP与图像平面坐标系的交点。这种关系也称为中心射影或透视投影
。
> 问题分析
对于第一问,需要确定靶标的上圆的圆心
在相机像平面中的像坐标
,由于相机在成像时图像发生畸变
,所以在像平面上的像不是规则图形。由小孔成像模型知道,物坐标和像坐标之间成比例关系
。因此建立世界坐标系,确定世界坐标系与像坐标系的关系是解决第一问的关键。进而确定旋转矩阵
R R R 和平移变换
T T T,得出世界坐标系到像素坐标的变换矩阵。
对于第二问,本题给的靶标是圆,不能利用边缘抽取的方法或霍夫变换的方法来提取边缘点数据。注意到,在针孔模型下,由于射影变换的不变性
,直线的像仍然是直线。另一方面,对两等圆的外公切线,同一圆上的两切点连线过圆心,所以圆心的像就在两组切点像
的连线上。于是通过求出两组外公切线的切点连线的交点来求圆心。对于求切线的方法,由于图像的轮廓为离散的像素点
,所以采用限定范围
后寻找最接近切点
的像素点
的方法求出切线。可以用matlab
利用Canny
边缘检测法得到图形的轮廓
(边缘点信息),并用python
求出两组外公切线
,得到切点坐标
,进而求出像圆心
的像素坐标
。
在第三问中我们需要设计一种方法来检验模型的可靠性
,并分析此方法的精度
和稳定性
。对此通过比较靶标中圆的圆心在投影矩阵
M作用下得到的像圆心
和拍摄得到的椭圆的几何中心
对比,以检验我们的模型。在模型的稳定性
上,由于像的轮廓为离散点
,所以求出的切线是有偏差
的,当像尺寸过小时,相对偏差会增大。另一方面,当像过大的时候,轮廓可能出现并排的很多像素点,导致找到的切线相对误差变大。通过扰动靶标中圆,并对其像图中椭圆发生的变化进行比较分析,以判断此检验方法的稳定性
,并求出精度
。
在第四问中考虑二个相机的相互关系
时,可以由问题一的投影矩阵
M M M,得到照相机的外部参数
,即它对于世界坐标系的方位。在同一世界坐标系下,再由两个照相机
的像图分别求出他们的方位,这样就可确定这两个相机的相对位置
。
> 符号说明
O i O_{i} Oi:圆 i i i的圆心的像
π n \pi_{n} πn:圆 n n n的像轮廓
P i ( n ) ( x i ( n ) , y i ( n ) ) P_{i}^{(n)}(x_{i}^{(n)},y_{i}^{(n)}) Pi(n)(xi(n),yi(n)): π n \pi_{n} πn上的点
E n E_{n} En: P i ( n ) ( x i ( n ) , y i n ) P_{i}^{(n)}(x_{i}^{(n)},y_{i}^{n}) Pi(n)(xi(n),yin)全体构成的集合
A ′ A' A′、 B ′ B' B′、 C ′ C' C′、 D ′ D' D′、 E ′ E' E′:标靶上的五个原的圆心
F ′ F' F′:像圆 A A A、 C C C的内公切线的像交点
R R R:旋转矩阵
T T T:平移矩阵
M M M:世界坐标系到像素坐标系的变换矩阵
刚体
是由一群数量超多的质点组成。实际而言,不可能精确地追踪其中每一个质点的运动。为了简化运算,可以利用刚体的"刚性",即其内部所有质点彼此之间距离不变
的性质。
Z
轴逆时针旋转 α \alpha α,坐标变换之间的关系[ x y z ] = [ cos α sin α 0 − sin α cos α 0 0 0 1 ] [ x ′ y ′ z ′ ] (i) \begin{bmatrix} x\\y\\z \end{bmatrix}= \begin{bmatrix} \cos\alpha&\sin\alpha&0\\ -\sin\alpha&\cos\alpha&0\\ 0&0&1 \end{bmatrix} \begin{bmatrix} x'\\y'\\z' \end{bmatrix}\tag{i} ⎣⎡xyz⎦⎤=⎣⎡cosα−sinα0sinαcosα0001⎦⎤⎣⎡x′y′z′⎦⎤(i)
y
轴逆时针旋转 β \beta β,坐标变换之间的关系[ x y z ] = [ cos β 0 − sin β 0 1 0 sin β 0 cos β ] [ x ′ y ′ z ′ ] (ii) \begin{bmatrix} x\\y\\z \end{bmatrix}= \begin{bmatrix} \cos\beta&0&-\sin\beta\\ 0&1&0\\ \sin\beta&0&\cos\beta \end{bmatrix} \begin{bmatrix} x'\\y'\\z' \end{bmatrix}\tag{ii} ⎣⎡xyz⎦⎤=⎣⎡cosβ0sinβ010−sinβ0cosβ⎦⎤⎣⎡x′y′z′⎦⎤(ii)
x
轴逆时针旋转 γ \gamma γ,坐标变换之间的关系[ x y z ] = [ 1 0 0 0 cos γ sin γ 0 − sin γ cos γ ] [ x ′ y ′ z ′ ] (iii) \begin{bmatrix} x\\y\\z \end{bmatrix}= \begin{bmatrix} 1&0&0\\ 0&\cos\gamma&\sin\gamma\\ 0&-\sin\gamma&\cos\gamma \end{bmatrix} \begin{bmatrix} x'\\y'\\z' \end{bmatrix}\tag{iii} ⎣⎡xyz⎦⎤=⎣⎡1000cosγ−sinγ0sinγcosγ⎦⎤⎣⎡x′y′z′⎦⎤(iii)
不妨设其中绕x
、y
、z
的旋转矩阵分别为R1
、R2
、R3
,则有
R = R 1 R 2 R 3 (iv) R=R_{1}R_{2}R_{3}\tag{iv} R=R1R2R3(iv)
这就是世界坐标系到相机坐标系的旋转矩阵。
假设在世界坐标系中物体的位置坐标为 ( X w , Y w , Z w ) T (X_{w},Y_{w},Z_w)^{T} (Xw,Yw,Zw)T,相机坐标系中的坐标为 ( X c , Y c , Z c ) T (X_{c},Y_{c},Z_{c})^{T} (Xc,Yc,Zc)T,则联系两个坐标系的旋转变换关系为
[ X c Y c Z c ] = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] [ X w Y w Z w ] \begin{bmatrix} X_{c}\\Y_{c}\\Z_{c} \end{bmatrix}= \begin{bmatrix} r_{11}&r_{12}&r_{13}\\ r_{21}&r_{22}&r_{23}\\ r_{31}&r_{32}&r_{33} \end{bmatrix} \begin{bmatrix} X_{w}\\Y_{w}\\Z_{w} \end{bmatrix} ⎣⎡XcYcZc⎦⎤=⎣⎡r11r21r31r12r22r32r13r23r33⎦⎤⎣⎡XwYwZw⎦⎤再加上平移矩阵 T = ( T 0 , T 1 , T 2 ) T=(T_{0},T_{1},T_{2}) T=(T0,T1,T2),既得两个坐标系的变换关系为
[ X c Y c Z c ] = R [ X w Y w Z w ] + T ′ \begin{bmatrix} X_{c}\\Y_{c}\\Z_{c} \end{bmatrix}=R \begin{bmatrix} X_{w}\\Y_{w}\\Z_{w} \end{bmatrix}+T' ⎣⎡XcYcZc⎦⎤=R⎣⎡XwYwZw⎦⎤+T′写成矩阵乘积的形式如下
[ X c Y c Z c 1 ] = [ R T ′ 0 1 ] [ X w Y w Z w 1 ] (v) \begin{bmatrix} X_{c}\\Y_{c}\\Z_{c}\\1 \end{bmatrix}= \begin{bmatrix} R&T'\\\boldsymbol{0}&1 \end{bmatrix} \begin{bmatrix} X_{w}\\Y_{w}\\Z_{w}\\1 \end{bmatrix}\tag{v} ⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤=[R0T′1]⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤(v)
其中, 0 \boldsymbol{0} 0是 1 × 3 1\times3 1×3的行向量。
相机坐标系到图像物理坐标系的转换是基于相似投影变换
,也即位似变换
,物体在相机坐标系中的坐标为 ( X c , Y c , Z c ) T (X_{c},Y_{c},Z_{c})^{T} (Xc,Yc,Zc)T,物体在图像物理坐标系的坐标为 ( x , y ) T (x,y)^{T} (x,y)T,根据相似关系我们易得如下关系式
Z c f = Y c y = X c x \frac{Z_{c}}{f}=\frac{Y_{c}}{y}=\frac{X_{c}}{x} fZc=yYc=xXc即得
{ x = X c Z c f y = Y c Z c f \begin{aligned} \begin{cases} \displaystyle x=\frac{X_{c}}{Z_{c}}f\\ \displaystyle y=\frac{Y_{c}}{Z_{c}}f \end{cases} \end{aligned} ⎩⎪⎨⎪⎧x=ZcXcfy=ZcYcf同样,我们可以写成矩阵相乘形式如下
Z c [ x y 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X c Y c Z c 1 ] (vi) Z_{c}\begin{bmatrix} x\\y\\1 \end{bmatrix}= \begin{bmatrix} f&0&0&0\\ 0&f&0&0\\ 0&0&1&0 \end{bmatrix} \begin{bmatrix} X_{c}\\Y_{c}\\Z_{c}\\1 \end{bmatrix}\tag{vi} Zc⎣⎡xy1⎦⎤=⎣⎡f000f0001000⎦⎤⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤(vi)
其中 f f f是相机的焦距。
因为像素坐标系是一系列离散的点,我们可以根据比例
关系,物体在图像物理坐标系的坐标为 ( x , y ) T (x,y)^{T} (x,y)T,在像素坐标系的坐标为 ( u , v ) T (u,v)^{T} (u,v)T,根据对应成比例即得如下关系
{ u = x d x + u 0 v = y d y + v 0 \begin{aligned} \begin{cases} u=\frac{x}{\mathrm{d}x}+u_{0}\\ v=\frac{y}{\mathrm{d}y}+v_{0} \end{cases} \end{aligned} {u=dxx+u0v=dyy+v0写成矩阵相乘形式如下
[ u v 1 ] = [ 1 / d x 0 u 0 0 1 / d y v 0 0 0 1 ] [ x y 1 ] (vii) \begin{bmatrix} u\\v\\1 \end{bmatrix}= \begin{bmatrix} 1/\mathrm{d}x&0&u_{0}\\ 0&1/\mathrm{d}y&v_{0}\\ 0&0&1 \end{bmatrix} \begin{bmatrix} x\\y\\1 \end{bmatrix}\tag{vii} ⎣⎡uv1⎦⎤=⎣⎡1/dx0001/dy0u0v01⎦⎤⎣⎡xy1⎦⎤(vii)
其中, d x \mathrm{d}x dx、 d y \mathrm{d}y dy分别表示每个像素在
x
、y
方向上的物理尺寸。
联立上述(v)
、(vi)
、(vii)
式,即得
Z c [ u v 1 ] = [ 1 / d x 0 u 0 0 1 / d y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R T ′ 0 1 ] [ X w Y w Z w 1 ] Z_{c}\begin{bmatrix} u\\v\\1 \end{bmatrix}=\begin{bmatrix} 1/\mathrm{d}x&0&u_{0}\\ 0&1/\mathrm{d}y&v_{0}\\ 0&0&1 \end{bmatrix}\begin{bmatrix} f&0&0&0\\ 0&f&0&0\\ 0&0&1&0 \end{bmatrix}\begin{bmatrix} R&T'\\\boldsymbol{0}&1 \end{bmatrix}\begin{bmatrix} X_{w}\\Y_{w}\\Z_{w}\\1 \end{bmatrix} Zc⎣⎡uv1⎦⎤=⎣⎡1/dx0001/dy0u0v01⎦⎤⎣⎡f000f0001000⎦⎤[R0T′1]⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤为了描述的方便,我们令
[ 1 / d x 0 u 0 0 1 / d y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] = [ f x 0 u 0 0 0 f y v 0 0 0 0 1 0 ] = M 1 \begin{bmatrix} 1/\mathrm{d}x&0&u_{0}\\ 0&1/\mathrm{d}y&v_{0}\\ 0&0&1 \end{bmatrix}\begin{bmatrix} f&0&0&0\\ 0&f&0&0\\ 0&0&1&0 \end{bmatrix}= \begin{bmatrix} f_{x}&0&u_{0}&0\\ 0&f_{y}&v_{0}&0\\ 0&0&1&0 \end{bmatrix}=M_{1} ⎣⎡1/dx0001/dy0u0v01⎦⎤⎣⎡f000f0001000⎦⎤=⎣⎡fx000fy0u0v01000⎦⎤=M1
其中, f x = f / d x f_{x}=f/\mathrm{d}x fx=f/dx, f y = 1 / d y f_{y}=1/\mathrm{d}y fy=1/dy
同理,令
[ R T ′ 0 1 ] = M 2 \begin{bmatrix} R&T'\\\boldsymbol{0}&1 \end{bmatrix}=M_{2} [R0T′1]=M2则世界坐标系到像素坐标系的坐标转换关系可以表示为
Z c [ u v 1 ] = M [ X w Y w Z w 1 ] (viii) Z_{c}\begin{bmatrix} u\\v\\1 \end{bmatrix}=M\begin{bmatrix} X_{w}\\Y_{w}\\Z_{w}\\1 \end{bmatrix}\tag{viii} Zc⎣⎡uv1⎦⎤=M⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤(viii)
其中, M = M 1 M 2 M=M_{1}M_{2} M=M1M2, M M M是 3 × 4 3\times4 3×4的矩阵。
不妨记
M = [ m 11 m 12 m 13 m 14 m 21 m 22 m 23 m 24 m 31 m 32 m 33 m 34 ] M=\begin{bmatrix} m_{11}&m_{12}&m_{13}&m_{14}\\ m_{21}&m_{22}&m_{23}&m_{24}\\ m_{31}&m_{32}&m_{33}&m_{34} \end{bmatrix} M=⎣⎡m11m21m31m12m22m32m13m23m33m14m24m34⎦⎤写成线性方程组
的形式如下
{ Z c u = m 11 X w + m 12 Y w + m 13 Z w + m 14 Z c v = m 21 X w + m 22 Y w + m 23 Z w + m 24 Z c = m 31 X w + m 32 Y w + m 33 Z w + m 34 \begin{aligned} \begin{cases} Z_{c}u=m_{11}X_{w}+m_{12}Y_{w}+m_{13}Z_{w}+m_{14}\\ \\ Z_{c}v=m_{21}X_{w}+m_{22}Y_{w}+m_{23}Z_{w}+m_{24}\\ \\ Z_{c}=m_{31}X_{w}+m_{32}Y_{w}+m_{33}Z_{w}+m_{34} \end{cases} \end{aligned} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧Zcu=m11Xw+m12Yw+m13Zw+m14Zcv=m21Xw+m22Yw+m23Zw+m24Zc=m31Xw+m32Yw+m33Zw+m34从中消去 Z c Z_{c} Zc得
{ u = m 11 X w + m 12 Y w + m 13 Z w + m 14 m 31 X w + m 32 Y w + m 33 Z w + m 34 v = m 21 X w + m 22 Y w + m 23 Z w + m 24 m 31 X w + m 32 Y w + m 33 Z w + m 34 \begin{aligned} \begin{cases} \displaystyle u=\frac{m_{11}X_{w}+m_{12}Y_{w}+m_{13}Z_{w}+m_{14}}{m_{31}X_{w}+m_{32}Y_{w}+m_{33}Z_{w}+m_{34}}\\ \\ \displaystyle v=\frac{m_{21}X_{w}+m_{22}Y_{w}+m_{23}Z_{w}+m_{24}}{m_{31}X_{w}+m_{32}Y_{w}+m_{33}Z_{w}+m_{34}} \end{cases} \end{aligned} ⎩⎪⎪⎪⎨⎪⎪⎪⎧u=m31Xw+m32Yw+m33Zw+m34m11Xw+m12Yw+m13Zw+m14v=m31Xw+m32Yw+m33Zw+m34m21Xw+m22Yw+m23Zw+m24又因为旋转变换的矩阵是正交矩阵,所以还有约束条件
{ r 11 2 + r 12 2 + r 13 2 = 1 r 12 2 + r 22 2 + r 23 2 = 1 r 13 2 + r 32 2 + r 33 2 = 1 \begin{aligned} \begin{cases} r_{11}^{2}+r_{12}^{2}+r_{13}^{2}=1\\ r_{12}^{2}+r_{22}^{2}+r_{23}^{2}=1\\ r_{13}^{2}+r_{32}^{2}+r_{33}^{2}=1 \end{cases} \end{aligned} ⎩⎪⎨⎪⎧r112+r122+r132=1r122+r222+r232=1r132+r322+r332=1
代入上述格式,只需要求解6个外参数,问题只给出5个标靶点(5个方程),所以还需要一个方程,根据射影变换的不变性质,不妨取圆A和圆C的内公切线的连线交点与其像的关系为第6个方程,即可求解
6个外部参数
。
利用标靶上已知点与它们的像坐标之间的转换关系,我们可以求出 M M M矩阵的各参数的值,从而确定出给定相机中物体的像坐标,我们可以根据 M M M矩阵求出物体在世界坐标系的方位,从而可以确定出在世界坐标系的两部位置不同的相机之间的相对位置。
射影变换保持共线三点仍为共线的点及简单比不变,利用圆的外公切线的性质求得像坐标,并将其转换为图像物理坐标,利用MATLAB
求解得圆心在像平面的坐标,根据相机的内参数矩阵求得,再利用高等代数的知识求得外参数。
性质1:直线经小孔后所得到的像仍为直线.
证:过相异两点有且仅有一条直线,根据
平面对偶原则
,如果两个三点形的对应顶点连线共点,则其对应边的交点必定共线。由上图,任取物平面 α \alpha α上直线AB
上一点P
,则经小孔O
后在像平面 β \beta β的成像点为P'
,易知P'
同时在平面OAB
和平面 β \beta β上,所以P'
也在两平面的交线A'B'
上,所以直线经小孔后所得到的像仍为直线。
性质2:两直线交点的像仍为两直线像的交点.
证:据
Desargues finite geometry
,设物平面 α \alpha α上任意两直线AB
、CD
经小孔O
在像平面 β \beta β上所成像直线为A'B'
、C'D'
,任取直线AB
上一点E
,则据性质1易知,点E'
同时在平面ABB'A'
、平面CDD'C'
和平面 β \beta β上,即E'
同时在直线A'B'
和直线C'D'
上,也即两直线交点的像仍为两直线像的交点。容易将其推广到曲线相交的情况。
性质3:物圆的某一条切线及圆的切点的像,该切线仍为像平面的一条直线,并且像切点即为物圆的切点.
证:易知物圆
O
与其切线的交点K
仍为像圆Γ
与像直线的交点。又因为物圆与切线l
相切于一点,所以据性质2,像圆Γ'
(椭圆)与像直线l'
至少有一个交点。假设物圆的切线不是像圆的切线,即像圆与该像直线交于两点A'
、B'
。根据光路可逆原理,将像平面 β \beta β的的像投在物平面$ \alpha $上,则直线l'
与曲线Γ'
的两交点在物平面的像A
、B
即为直线l
与曲线Γ
的交点,与曲线Γ
与直线l
相切与一点K
矛盾,故假设不成立,所以,切线即为像圆的切线,并且物圆切点的像即为像切线与像圆Γ'
的切点。
利用最小二乘法
拟合得椭圆的方程,并求得椭圆的中心,同圆心的像中心做方差分析,得到精确度的评价标准。
问题四:利用世界坐标系中两部位置固定的相机摄的像,代入世界坐标系与图像坐标系的转换矩阵M
,列出方程,即可得出两部相机在世界坐标系的相对位置关系。
灰度处理
,再利用Canny边缘检测算法得到边缘像素点的坐标clear
clc
%读取RGB格式的图像
YuanPic=imread('picture1.jpg');
%RGB到灰度图像的转换
FirstGrayPic=rgb2gray(YuanPic);
%原来图像的矩阵的参数
[rows,cols,colors]=size(YuanPic);
%参数创建一个全零的矩阵
MidGrayPic=zeros(rows,cols);
%创建的全零矩阵转化为uint8格式
MidGrayPic=uint8(MidGrayPic);
for i=1:rows
for j=1:cols
sum=0;
for k=1:colors
%进行转化的关键公式
sum=sum+YuanPic(i,j,k)/3;
end
MidGrayPic(i,j)=sum;
end
end
imwrite(MidGrayPic,'pic/DarkMouseGray.png','png');
%显示原来的RGB图像
figure(1);
imshow(YuanPic,'InitialMagnification','fit');
%显示经过函数运算后的灰度图像
figure(2);
imshow(FirstGrayPic,'InitialMagnification','fit');
%显示转化之后的灰度图像
figure(3);
imshow(MidGrayPic,'InitialMagnification','fit');
Canny算子
提取边缘点的信息clear
clc
rgb=imread('picture1.jpg');
I=rgb2gray(rgb);
Edge=edge(I,'Canny',0.35);
figure(2);
imshow(Edge,'InitialMagnification','fit');
hold on;
离散图
clear
clc
rgb=imread('picture1.jpg');
I=rgb2gray(rgb);
Edge=edge(I,'Canny',0.35);
[x,y]=find(Edge');
% 旋转坐标轴变换
% a=y;b=x;
% y=b;x=a;
figure(3);
for i=1:1309
plot(x(i),y(i),'.r');
hold on;
end
set(gca,'YDir','reverse');
set(gca,'XAxisLocation','top');
> 外公切线法求像素平面的圆心坐标
虽然物体在数码相机成像的过程中会发生形状畸变
,但是仍可以找到一些保持不变
的性质。根据高等几何
知识,共线三点的像仍保持线段的简单比不变
等性质,如曲线的切点,其像仍为曲线的切点;曲线的交点仍为像曲线的交点。本题中求解像平面中圆心的坐标,利用了“任意两靶标的同侧公切线的切点,其像的连线仍为所成像图形的同侧公切线
”和“圆心的像在平行切线切点的像的连线上
”两个不变性质
。具体求像平面圆心坐标步骤
如下:
两组
其与其他圆的像的上下/左右外公切线
的交点。对如下图所示的圆A
,可选取如下所示两组切线来求切点P1
、P2
、P3
和P4
;P1
、P2
和P3
、P4
,则圆心的像即为两条直线P1P2
和P3P4
的交点
。对圆心的像的求解将借助
MATLAB
软件来实现。首先使用imread()
函数将题中所给的靶标的像输入至MATLAB
中,再将其转化为二值图
。由于求圆心的像的坐标仅与像的边界点有关,因此需要剔除像内部的点,提取图像的轮廓
。提取图像轮廓可以采用Canny
边缘检测算法来实现。
虽然图形的切线与图形的交点理论上只有一个,但是由于像是由像素单位
构成的,而像素单位是离散
的。因此像的轮廓并不光滑
,真正的切点有可能没有被包含。故在这种情况下,退而求其次,求最佳的像素点
。显然,一条公切线上的两个最佳点应满足这两个圆的像轮廓上的所有其他像素点都在这两个最佳点连线的同侧
,这时,我们便认为最佳点即为切点
。求解算法如下:
y = y i ( 1 ) − y j ( 2 ) x i ( 1 ) − x j ( 2 ) x + x i ( 1 ) y j ( 2 ) − x j ( 2 ) y i ( 1 ) x i ( 1 ) − x j ( 2 ) y=\frac{y_{i}^{(1)}-y_{j}^{(2)}}{x_{i}^{(1)}-x_{j}^{(2)}}x+\frac{x_{i}^{(1)}y_{j}^{(2)}-x_{j}^{(2)}y_{i}^{(1)}}{x_{i}^{(1)}-x_{j}^{(2)}} y=xi(1)−xj(2)yi(1)−yj(2)x+xi(1)−xj(2)xi(1)yj(2)−xj(2)yi(1)
重复以上操作直至
遍历
E 1 E_{1} E1、 E 2 E_{2} E2中所有元素。
上(左)公切线坐标 | 下(右)公切线坐标 | |
---|---|---|
A A A, B B B | (326,148) (429,156) | (324,230) (418,237) |
E E E, D D D | (295,466) (597,470) | (282,538) (584,536) |
B B B, E E E | (386,182) (248,491) | (460,212) (322,511) |
E E E, C C C | (261,475) (619,184) | (309,528) (661,242) |
A A A, E E E | (281,187) (245,505) | (365,191) (324,501) |
C C C, D D D | (604,218) (549,502) | (676,213) (616,508) |
得到最佳切点的坐标后,通过python
求解圆心坐标
'''以圆A为例计算像圆心'''
a=[{'x': 326.0, 'y': 148.0}, {'x': 429.0, 'y': 156.0}]
b=[{'x': 324.0, 'y': 230.0}, {'x': 418.0, 'y': 237.0}]
c=[{'x': 281.0, 'y': 187.0}, {'x': 245.0, 'y': 505.0}]
d=[{'x': 365.0, 'y': 191.0}, {'x': 324.0, 'y': 501.0}]
a1=a[0];b1=b[0];c1=c[0];d1=d[0]
k1=(a1["y"]-b1["y"])/(a1["x"]-b1["x"])
k2=(c1["y"]-d1["y"])/(c1["x"]-d1["x"])
b1=(a1["x"]*b1["y"]-b1["x"]*a1["y"])/(a1["x"]-b1["x"])
b2=(c1["x"]*d1["y"]-d1["x"]*c1["y"])/(c1["x"]-d1["x"])
x=-(b1-b2)/(k1-k2)
y=(k1*b2-k2*b1)/(k1-k2)
print("x=",end='');print(x)
print("y=",end='');print(y)
> 求解结果
通过以上算法可计算出每个像圆
的不同两组
与其他像圆的上下/左右外公切线的切点
,从而可以得到每个圆心
的像素平面坐标
。
运用
python
编写求解像素图中两圆的外公切线交点
,进而求出像圆的圆心
;再根据求得的图像边缘点
坐标,拟合椭圆
,求出五个椭圆的标准方程
,得到五个椭圆几何中心
,观察发现,像图的几何中心一般不是标靶圆的像圆心
,分析两者的误差
,通过扰动
标靶圆的位置
,得出该模型的精度
与稳定性
。
标靶的点 | 像素平面坐标 |
---|---|
O A O_{A} OA | ( 322.24, 193.44 ) |
O B O_{B} OB | ( 419.67, 195.65 ) |
O C O_{C} OC | ( 630.89, 200.45 ) |
O D O_{D} OD | ( 591.66, 497.00 ) |
O E O_{E} OE | ( 288.51, 501.91 ) |
O F O_{F} OF | ( 470.67, 197.32 ) |
根据(vii)
式,我们有
[ x y 1 ] = [ d x 0 − u 0 d x 0 d y − v 0 d y 0 0 1 ] [ u v 1 ] \begin{bmatrix} x\\y\\1 \end{bmatrix}= \begin{bmatrix} \mathrm{d}x&0&-u_{0}\mathrm{d}x\\ 0&\mathrm{d}y&-v_{0}\mathrm{d}y\\ 0&0&1 \end{bmatrix} \begin{bmatrix} u\\v\\1 \end{bmatrix} ⎣⎡xy1⎦⎤=⎣⎡dx000dy0−u0dx−v0dy1⎦⎤⎣⎡uv1⎦⎤即像素坐标与图像物理坐标(单位:mm)的转换关系如下:
{ x = ( u − u 0 ) d x y = ( v 0 − v ) d y \begin{aligned} \begin{cases} x=(u-u_{0})\mathrm{d}x\\ y=(v_{0}-v)\mathrm{d}y \end{cases} \end{aligned} {x=(u−u0)dxy=(v0−v)dy
根据题意 d x = d y = 1 / 3.78 \mathrm{d}x=\mathrm{d}y=1/3.78 dx=dy=1/3.78, u 0 = 512 u_{0}=512 u0=512, v 0 = 384 v_{0}=384 v0=384
标靶的点 | 图像物理坐标(mm) |
---|---|
O A O_{A} OA | ( -50.20, 50.41 ) |
O B O_{B} OB | ( -24.42, 49.83 ) |
O C O_{C} OC | ( 31.45, 48.56 ) |
O D O_{D} OD | ( 21.07, -29.89 ) |
O E O_{E} OE | ( -59.12, -31.21 ) |
O F O_{F} OF | ( -10.93, -49.92 ) |
如下图所示即为原像素点
、拟合椭圆方程
、像圆心坐标
、椭圆中心
的关系:
python
求切点'''以圆A、B外公切线的切点为例'''
import xlrd
from queue import Queue #导入队列的模块
q=Queue(maxsize=0) #初始化空队列
stack=[]
#打开excel文件并读取数据
rbookA=xlrd.open_workbook(r'圆A.xlsx')
rbookB=xlrd.open_workbook(r'圆B.xlsx')
#sheets方法返回对象列表
rbookA.sheets()
rbookB.sheets()
#xlsx默认有3个工作簿,Sheet1,Sheet2,Sheet3
rsheetA=rbookA.sheet_by_index(0) #取第一个工作簿
rsheetB=rbookB.sheet_by_index(0) #取第一个工作簿
#获取行数
nrowsA=rsheetA.nrows
nrowsB=rsheetB.nrows
#存储信息的列表
a_list=[];b_list=[]
a1_list=[];b1_list=[]
a2_list=[];a3_list=[]
b2_list=[];b3_list=[]
lst1=[];LST=[]
LST2=[];lst=[]
#导入圆A边缘点信息
for i in range(nrowsA):
dic_A={}
x1=rsheetA.cell(i,1).value #获取x坐标
y1=rsheetA.cell(i,0).value #获取y坐标
dic_A["x"]=x1
dic_A["y"]=y1
if 320<x1<335:
a1_list.append(dic_A)
if y1<200:
a2_list.append(dic_A) #上侧
else:
a3_list.append(dic_A) #下侧
a_list.append(dic_A) #圆A所有的点
#导入圆B边缘点信息
for i in range(nrowsB):
dic_B={}
x2=rsheetB.cell(i,1).value #获取x坐标
y2=rsheetB.cell(i,0).value #获取y坐标
dic_B["x"]=x2
dic_B["y"]=y2
if 420<x2<430:
b1_list.append(dic_B)
if y2<200:
b2_list.append(dic_B) #上侧
else:
b3_list.append(dic_B) #下侧
b_list.append(dic_B) #圆B所有的点
#计算圆A和圆B上侧两两配对的点数
for m in range(len(a2_list)):
for n in range(len(b2_list)):
if a2_list[m]["x"]<b2_list[n]["x"]:
lst0=[];dic0={};dic1={}
dic0["x"]=a2_list[m]["x"]
dic1["x"]=b2_list[n]["x"]
dic0["y"]=a2_list[m]["y"]
dic1["y"]=b2_list[n]["y"]
lst0.append(dic0);lst0.append(dic1)
lst1.append(lst0)
#遍历上侧所有的点
for k in range(len(lst1)):
q.put(lst1[k]) #写入队列
stack.append(lst1[k])
stack2=a2_list
for i in range(len(b2_list)):
stack2.append(b2_list[i])
for p in range(len(stack)):
flag=1
Q1=stack[p][0];Q2=stack[p][1]
k1=(Q1["y"]-Q2["y"])/(Q1["x"]-Q2["x"])
b1=(Q1["x"]*Q2["y"]-Q2["x"]*Q1["y"])/(Q1["x"]-Q2["x"])
for r in range(len(stack2)):
Y=k1*stack2[r]["x"]+b1
if stack2[r]["y"]<Y: #切线上的纵坐标大于原像素值
flag=0
break
if flag:
LST.append(Q1);LST.append(Q2)
LST2.append(LST)
print(LST2)
matlab
绘图clear
clc
rgb=imread('picture1.jpg');
I=rgb2gray(rgb);
BW1=edge(I,'canny');
B=BW1;K=sum(B);
k=bwboundaries(B);
E=k{1,1};plot(E(:,2),E(:,1),'.m');hold on;
A=k{2,1};plot(A(:,2),A(:,1),'.b');
B=k{3,1};plot(B(:,2),B(:,1),'.r');
D=k{4,1};plot(D(:,2),D(:,1),'.g');
C=k{5,1};plot(C(:,2),C(:,1),'.y');
set(gca,'YDir','reverse');
set(gca,'XAxisLocation','top');
hold on;plot(630.89,200.45,'*r')
plot(322.24,193.44,'*r');plot(419.67,195.65,'*r')
plot(591.66,497.00,'*r');plot(288.51,501.96,'*r')
plot(322.9129,189.4356,'.k');plot(422.921,197.0369,'.k')
plot(639.8883,213.2367,'.k');plot(582.6726,503.0003,'.k')
plot(284.6779,501.7830,'.k')
> 结果分析
通过试验,我们发现标靶圆经过变换的像图像的几何中心
一般不是圆心的像坐标,通过扰动标靶圆的位置,可以分析模型精度与稳定性。
对于椭圆的标准方程
A x 2 + 2 B x y + C y 2 + D x + E y + F = 0 Ax^{2}+2Bxy+Cy^{2}+Dx+Ey+F=0 Ax2+2Bxy+Cy2+Dx+Ey+F=0
可以将之转化为
A ( x − u ) 2 + 2 B ( x − u ) ( y − v ) + C ( y − v ) 2 + F = 0 A(x-u)^{2}+2B(x-u)(y-v)+C(y-v)^{2}+F=0 A(x−u)2+2B(x−u)(y−v)+C(y−v)2+F=0
具体步骤为,将后式的各乘积乘方项展开,根据与前式对应项系数相等的法则便可求得 u u u、 v v v、 f f f 的值。其中 ( u , v ) (u,v) (u,v)便是该椭圆的中心
。即
{ u = B E − C D A C − B 2 v = B D − A E A C − B 2 \begin{aligned} \begin{cases} \displaystyle u=\frac{BE-CD}{AC-B^{2}}\\ \displaystyle v=\frac{BD-AE}{AC-B^{2}} \end{cases} \end{aligned} ⎩⎪⎨⎪⎧u=AC−B2BE−CDv=AC−B2BD−AE
即可求出像图中拟合椭圆的几何中心坐标,一般不是圆心的像坐标。
进而得到像圆拟合椭圆的标准方程如下表4所示:
拟合椭圆 | 标准方程 |
---|---|
椭圆 A ′ A' A′ | 3.4052 ∗ 1 0 − 5 x 2 + 2.9691 ∗ 1 0 − 6 x y + 3.5346 ∗ 1 0 − 5 y 2 − 2.2554 ∗ 1 0 − 2 x − 1.4350 ∗ 1 0 − 2 y + 4.9416 = 0 3.4052*10^{-5}x^{2}+2.9691*10^{-6}xy+3.5346*10^{-5}y^{2}-2.2554*10^{-2}x-1.4350*10^{-2}y+4.9416=0 3.4052∗10−5x2+2.9691∗10−6xy+3.5346∗10−5y2−2.2554∗10−2x−1.4350∗10−2y+4.9416=0 |
椭圆 B ′ B' B′ | 3.5730 ∗ 1 0 − 5 x 2 + 4.8599 ∗ 1 0 − 6 x y + 3.5632 ∗ 1 0 − 5 y 2 − 3.1180 ∗ 1 0 − 2 x − 1.6097 ∗ 1 0 − 2 y + 8.1219 = 0 3.5730*10^{-5}x^{2}+4.8599*10^{-6}xy+3.5632*10^{-5}y^{2}-3.1180*10^{-2}x-1.6097*10^{-2}y+8.1219=0 3.5730∗10−5x2+4.8599∗10−6xy+3.5632∗10−5y2−3.1180∗10−2x−1.6097∗10−2y+8.1219=0 |
椭圆 C ′ C' C′ | 1.8252 ∗ 1 0 − 5 x 2 + 4.6121 ∗ 1 0 − 6 x y + 1.6965 ∗ 1 0 − 5 y 2 − 2.4342 ∗ 1 0 − 2 x − 1.0186 ∗ 1 0 − 2 y + 8.8502 = 0 1.8252*10^{-5}x^{2}+4.6121*10^{-6}xy+1.6965*10^{-5}y^{2}-2.4342*10^{-2}x-1.0186*10^{-2}y+8.8502=0 1.8252∗10−5x2+4.6121∗10−6xy+1.6965∗10−5y2−2.4342∗10−2x−1.0186∗10−2y+8.8502=0 |
椭圆 D ′ D' D′ | 3.79 ∗ 1 0 − 6 x 2 + 1.4180 ∗ 1 0 − 6 x y + 4.1926 ∗ 1 0 − 6 y 2 − 5.1311 ∗ 1 0 − 3 x − 5.0440 ∗ 1 0 − 3 y + 2.7589 = 0 3.79*10^{-6}x^{2}+1.4180*10^{-6}xy+4.1926*10^{-6}y^{2}-5.1311*10^{-3}x-5.0440*10^{-3}y+2.7589=0 3.79∗10−6x2+1.4180∗10−6xy+4.1926∗10−6y2−5.1311∗10−3x−5.0440∗10−3y+2.7589=0 |
椭圆 E ′ E' E′ | 1.3466 ∗ 1 0 − 5 x 2 + 3.0460 ∗ 1 0 − 6 x y + 1.6934 ∗ 1 0 − 5 y 2 − 9.1953 ∗ 1 0 − 3 x − 1.7862 ∗ 1 0 − 2 y + 5.7694 = 0 1.3466*10^{-5}x^{2}+3.0460*10^{-6}xy+1.6934*10^{-5}y^{2}-9.1953*10^{-3}x-1.7862*10^{-2}y+5.7694=0 1.3466∗10−5x2+3.0460∗10−6xy+1.6934∗10−5y2−9.1953∗10−3x−1.7862∗10−2y+5.7694=0 |
clear
clc
rgb=imread('picture1.jpg');
I=rgb2gray(rgb);
%用Canny算子对其进行边缘检测
BW1=edge(I,'canny');
B=BW1;K=sum(B);
k=bwboundaries(B);
E=k{1,1};
A=k{2,1};
B=k{3,1};
D=k{4,1};
C=k{5,1};
x(:,1)=E(:,2);x(:,2)=E(:,1);
F=@(p,x)p(1)*x(:,1).^2+p(2)*x(:,1).*x(:,2)+p(3)*x(:,2).^2+p(4)*x(:,1)+p(5)*x(:,2)+p(6);
p0=[1 1 1 1 1 1];
warning off
%拟合系数,最小二乘方法
p=nlinfit(x,zeros(size(x,1),1),F,p0);
plot(x(:,1),x(:,2),'ks');
hold on
xmin=min(x(:,1));
xmax=max(x(:,1));
ymin=min(x(:,2));
ymax=max(x(:,2));
ezplot(@(x,y)F(p,[x,y]),[-1+xmin,1+xmax,-1+ymin,1+ymax]);
x=(p(2)*p(5)-2*p(3)*p(4))/(4*p(1)*p(3)-p(2)^2);disp(x);
y=(p(2)*p(4)-2*p(1)*p(5))/(4*p(1)*p(3)-p(2)^2);disp(y);
set(gca,'YDir','reverse');
set(gca,'XAxisLocation','top');
> 精度分析
1.畸变导致误差
2.对离散的像素点进行操作会产生误差
3.模型假设误差
4.精度检验
精度检验可以转换为像上的图形与靶标上的圆的映射关系的检验。具体方法是,首先将像上的轮廓的点投射到以上模型求得的靶标上,然后计算靶标上相应的圆心距离这些点的平均距离
和标准差
,平均距离越贴近于靶标上圆的半径,则模型越准确;标准差越小,说明模型越准确。
> 稳定性分析
经检验,空间共线三点的像仍然保持共线
关系且保持简单比
不变。由此可见,模型具有较高的精确性
与稳定性
。
在射影变换
下,保持点的直线关系
及交比不变
的射影不变量。
>影消点
首先,
影消点
的存在使得两直线的中心射影变换不构成双射(因为两平行直线没有交点)。中心射影
构成双射
约定如下:
无穷远点
;方向
,有唯一无穷远点
,平行的直线交于同一无穷远点
;交于同一无穷远点的直线平行。>交比
共线四点P1
、P2
、P3
、P4
的交比
定义如下:
( P 1 P 2 , P 3 P 4 ) = ( λ 1 − λ 3 ) ( λ 2 − λ 4 ) ( λ 2 − λ 3 ) ( λ 1 − λ 4 ) (P_{1}P_{2},P_{3}P_{4})=\frac{(\lambda_{1}-\lambda_{3})(\lambda_{2}-\lambda_{4})}{(\lambda_{2}-\lambda_{3})(\lambda_{1}-\lambda_{4})} (P1P2,P3P4)=(λ2−λ3)(λ1−λ4)(λ1−λ3)(λ2−λ4)
其中,
P1
、P2
称为基点
,P3
、P4
称为分点
,且 P i = : a + λ i b P_{i}=:a+\lambda_{i}b Pi=:a+λib, ( i = 1 , 2 , 3 , 4 ) (i=1,2,3,4) (i=1,2,3,4)
即
( P 1 P 2 , P 3 P 4 ) = P 1 P 3 ⋅ P 2 P 4 P 2 P 3 ⋅ P 1 P 4 = det ( P 1 ; P 3 ) ⋅ det ( P 2 ; P 4 ) det ( P 2 ; P 3 ) ⋅ det ( P 1 ; P 4 ) (P_{1}P_{2},P_{3}P_{4})=\frac{P_{1}P_{3}\cdot P_{2}P_{4}}{P_{2}P_{3}\cdot P_{1}P_{4}}=\frac{\det(P_{1};P_{3})\cdot \det(P_{2};P_{4})}{\det(P_{2};P_{3})\cdot \det(P_{1};P_{4})} (P1P2,P3P4)=P2P3⋅P1P4P1P3⋅P2P4=det(P2;P3)⋅det(P1;P4)det(P1;P3)⋅det(P2;P4)
其中, P i = ( x i , y i ) , ( i = 1 , 2 , 3 , 4 ) P_{i}=(x_{i},y_{i}),(i=1,2,3,4) Pi=(xi,yi),(i=1,2,3,4)为
齐次线性坐标
,二阶行列式几何意义。
由题给条件及数据可得:A
、B
、C
、 P ∞ P_{\infty} P∞4
点共线(其中 P ∞ P_{\infty} P∞为直线上的无穷远点
),根据交比定义可得:
( A B , C P ∞ ) = A C B C ⋅ B P ∞ A P ∞ = ( A B C ) = A C B C = 10 7 = 1.429 (AB,CP_{\infty})=\frac{AC}{BC}\cdot \frac{BP_{\infty}}{AP_{\infty}}=(ABC)=\frac{AC}{BC}=\frac{10}{7}=1.429 (AB,CP∞)=BCAC⋅AP∞BP∞=(ABC)=BCAC=710=1.429
此时交比即为
简单比
,据射影变换保持共线四点的交比不变。
即应有像A'
、B'
、C'
、P'
四点共线,且 ( A B , C P ∞ ) = ( A ′ B ′ , C ′ P ′ ) (AB,CP_{\infty})=(A'B',C'P') (AB,CP∞)=(A′B′,C′P′)。其中A'
,B'
,C'
为圆心A
,B
,C
的像点,P'
为直线AC
上的影消点
。
检验步骤如下:
i) 验证A'
,B'
,C'
三点共线;
计算可得 A ′ B ′ = ( 25.78 , − 0.58 ) A'B'=(25.78,-0.58) A′B′=(25.78,−0.58)、 A ′ C ′ = ( 81.65 , − 1.85 ) A'C'=(81.65,-1.85) A′C′=(81.65,−1.85),
因为 A ′ C ′ = λ A ′ B ′ ( λ ≈ 3.17 ) A'C'=\lambda A'B'(\lambda\approx3.17) A′C′=λA′B′(λ≈3.17),所以A'
,B'
,C'
三点共线
。
ii) 计算直线AC
像的影消点P'
;
根据上述约定2可得,因为 A C ∥ E D AC\parallel ED AC∥ED,故A'C'
与E'D'
的影消点均为P'
,即P'
为直线A'C'
与E'D'
的交点,其中E'
、D'
为圆E
、D
圆心的像点。
直线A'C'
的方程为:
y − 48.56 = 50.41 − 48.56 − 50.20 − 31.45 ( x − 31.45 ) y-48.56=\frac{50.41-48.56}{-50.20-31.45}(x-31.45) y−48.56=−50.20−31.4550.41−48.56(x−31.45)
直线E'D'
的方程为:
y + 31.21 = 31.21 − 29.89 21.07 + 59.12 ( x + 59.12 ) y+31.21=\frac{31.21-29.89}{21.07+59.12}(x+59.12) y+31.21=21.07+59.1231.21−29.89(x+59.12)
联立上述两式得影消点 P ′ ( 2032.48 , 3.22 ) P'(2032.48,3.22) P′(2032.48,3.22)。
iii) 计算像点A'
,B'
,C'
,P'
的交比.
( A ′ B ′ , C ′ P ′ ) = det ( P 1 ; P 3 ) ⋅ det ( P 2 ; P 4 ) det ( P 2 ; P 3 ) ⋅ det ( P 1 ; P 4 ) = 1.430 = ( A B , C P ∞ ) (A'B',C'P')=\frac{\det(P_{1};P_{3})\cdot \det(P_{2};P_{4})}{\det(P_{2};P_{3})\cdot \det(P_{1};P_{4})}=1.430=(AB,CP_{\infty}) (A′B′,C′P′)=det(P2;P3)⋅det(P1;P4)det(P1;P3)⋅det(P2;P4)=1.430=(AB,CP∞)
又因为 r a n k ( B ′ , C ′ , P ′ ) = 2 \mathrm{rank}(B',C',P')=2 rank(B′,C′,P′)=2,所以
A'
,B'
,C'
,P'
四点共线。
故从检验结果看出,A'
,B'
,C'
, P ∞ P_{\infty} P∞的像点A'
,B'
,C'
,P'
仍然保持共线
及交比不变
。由此可见,该模型具有很好的精确性
与稳定性
。
由问题一求解的 M M M矩阵容易根据两部两部相机的标靶的像求得两部相机在世界坐标系中的
相对位置
。
根据已知的像点坐标和靶标点的几何关系可以列出方程,通过求解出靶标上的点在相机坐标系中的坐标。在用同样的方法找到靶标在另一个相机坐标中的坐标后。列出靶标上五个点(6个方程
)在两个相机坐标系中的坐标变换,即可求解出两个相机坐标系之间的变换矩阵。
如上图10,用两部相机同时摄像时,在标定中我们可以用单相机定标方法得各自相机的外参数,即 R R R、 T T T。不妨设 R 1 R_{1} R1、 T 1 T_{1} T1为相机 C 1 C_{1} C1相对于世界坐标系的旋转矩阵和平移向量, R 2 R_{2} R2、 T 2 T_{2} T2为相机 C 2 C_{2} C2相对于世界坐标系的旋转矩阵和平移向量。从问题一中我们可以得到下述两个方程:
{ X c 1 = R 1 X w + T 1 X c 2 = R 2 X w + T 2 \begin{aligned} \begin{cases} X_{c1}=R_{1}X_{w}+T_{1}\\\\ X_{c2}=R_{2}X_{w}+T_{2} \end{cases} \end{aligned} ⎩⎪⎨⎪⎧Xc1=R1Xw+T1Xc2=R2Xw+T2
消去 X w X_{w} Xw后得到
X c 1 = R 1 R 2 − 1 X c 2 + T 1 − R 1 R 2 − 1 T 2 X_{c1}=R_{1}R_{2}^{-1}X_{c2}+T_{1}-R_{1}R_{2}^{-1}T_{2} Xc1=R1R2−1Xc2+T1−R1R2−1T2
令 R = R 1 R 2 − 1 R=R_{1}R_{2}^{-1} R=R1R2−1, T = T 1 − R 1 R 2 − 1 T 2 T=T_{1}-R_{1}R_{2}^{-1}T_{2} T=T1−R1R2−1T2,则两部相机的关系可以由 R R R和 T T T描述
[1]李鸿燕,张学山. 基于射影变换几何不变性的数码相机双目定位模型[J]. 上海工程技术大学学报,2009,23(04):333-337.
[2]2008 全国大学生数学建模竞赛A题优秀论文
[3]Wikipedia Rigid body
[4]数码相机的定位
[5]Wikipedia Canny edge detector
[6]高等几何(第三版).周兴和,杨明升(M).科学出版社.2015.
[7]Wikipedia Desargues’s theorem
X.1
X.2
X.3