我是靠谱客的博主 甜美裙子,最近开发中收集的这篇文章主要介绍平面标定(Homography变换),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 二、平面标定(Homography变换)
    • 1、定义
    • 2、计算推导
    • 3、应用
      • 1、简单平面的转换
      • 2、在四轴中求取2D点到3D点的转换关系
        • 2.1 相机在手上
          • 2.1.1 转换方程
          • 2.1.2 直接法
          • 2.1.3 旋转法
        • 2.2 相机不在手上
          • 2.2.1 转换方程
          • 2.2.2 直接法
          • 2.2.3 圆弧法

二、平面标定(Homography变换)

1、定义

单应性(homography)变换用来描述物体在两个平面之间的转换关系,是对应齐次坐标下的线性变换,可以通过矩阵表示:

X ′ = H ⋅ X X' = H·X X=HX

2、计算推导

带入数据(x,y)为图片上的点位置:

[ x ′ y ′ w ] = [ h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 h 9 ] [ x y 1 ] left[ begin{matrix} x'\ y'\ w end{matrix} right]= left[ begin{matrix} h1 & h2 & h3\ h4 & h5 & h6\ h7 & h8 & h9 end{matrix} right] left[ begin{matrix} x\ y\ 1 end{matrix} right] xyw=h1h4h7h2h5h8h3h6h9xy1

因为是齐次坐标系,方程左右同时除h9

[ x 1 ′ y 1 ′ w ′ ] = [ x ′ h 9 y ′ h 9 z ′ h 9 ] = [ h 1 ′ h 2 ′ h 3 ′ h 4 ′ h 5 ′ h 6 ′ h 7 ′ h 8 ′ 1 ] [ x y 1 ] left[ begin{matrix} x1'\ y1'\ w' end{matrix} right]= left[ begin{matrix} frac{x'}{h9}\ frac{y'}{h9}\ frac{z'}{h9} end{matrix} right]= left[ begin{matrix} h1' & h2' & h3'\ h4' & h5' & h6'\ h7' & h8' & 1 end{matrix} right] left[ begin{matrix} x\ y\ 1 end{matrix} right] x1y1w=h9xh9yh9z=h1h4h7h2h5h8h3h61xy1

将矩阵展开得到:

公式①:
{ x 1 ′ = h 1 ′ x + h 2 ′ y + h 3 ′ y 1 ′ = h 4 ′ x + h 5 ′ y + h 6 ′ w ′ = h 7 ′ x + h 8 ′ y + h 9 ′ begin{cases} x1' = h1'x+h2'y+h3' \ y1' = h4'x+h5'y+h6' \ w' = h7'x+h8'y+h9' end{cases} x1=h1x+h2y+h3y1=h4x+h5y+h6w=h7x+h8y+h9
将下面的矩阵用已知的观测值代替:

[ x 1 ′ y 1 ′ w ′ ] = = > ( x R , y R ) left[ begin{matrix} x1'\ y1'\ w' end{matrix} right] ==>(x^R, y^R) x1y1w==>(xR,yR)

根据齐次坐标的齐次性质:

公式②:
x 1 ′ w ′ = x R , y 1 ′ w ′ = y R frac{x1'}{w'}=x^R,frac{y1'}{w'}=y^R wx1=xR,wy1=yR

结合公式①②:

公式③:
{ x R = h 1 ′ x + h 2 ′ y + h 3 ′ h 7 ′ + h 8 ′ + 1 y R = h 4 ′ x + h 5 ′ y + h 6 ′ h 7 ′ + h 8 ′ + 1 begin{cases} x^R = frac{h1'x+h2'y+h3'}{h7'+h8'+1}\ y^R = frac{h4'x+h5'y+h6'}{h7'+h8'+1} end{cases} {xR=h7+h8+1h1x+h2y+h3yR=h7+h8+1h4x+h5y+h6
在公式③中

( x , y ) , ( x R , y R ) (x, y),(x^R, y^R) (x,y)(xR,yR)
为观测到的已知参数,未知参数有h1’h8’共8个,一对点能够产生两个方程,则求解公式③至少需要四组点对,才能求出h1’h8’。一般的数据会多于4组点对,用最小二乘法或ransac来获取最优参数。

求解过后,h1’~h8’为已知,

H ′ = [ h 1 ′ h 2 ′ h 3 ′ h 4 ′ h 5 ′ h 6 ′ h 7 ′ h 8 ′ 1 ] H'= left[ begin{matrix} h1' & h2' & h3'\ h4' & h5' & h6'\ h7' & h8' & 1 end{matrix} right] H=h1h4h7h2h5h8h3h61
可用于单应性变换的计算。

3、应用

1、简单平面的转换

图片A中的点P为(x,y),求对应在另外一个视角的图片B点P’(x’,y’)?

[ x 2 y 2 z 2 ] = H ′ [ x y 1 ] left[ begin{matrix} x2\ y2\ z2 end{matrix} right]= H' left[ begin{matrix} x\ y\ 1 end{matrix} right] x2y2z2=Hxy1

P ′ ( x ′ , y ′ ) = ( x 2 z 2 , y 2 z 2 ) P'(x',y') = (frac{x2}{z2},frac{y2}{z2}) P(x,y)=(z2x2,z2y2)

--------------------------------------------------------2020更新 华丽的分割线--------------------------------------------------------

2、在四轴中求取2D点到3D点的转换关系

2.1 相机在手上

求取

r H c {^r}H{_c} rHc

2.1.1 转换方程

r P o = r T t ⋅ t H C ⋅ C P o {^rP_o = ^rT_t cdot ^tH_C cdot ^CP_o} rPo=rTttHCCPo

参数解释:

r P o ^rP_o rPo(4×1):object在Robot坐标系下的表示

r T t ^rT_t rTt(4×4):Tool到Robot的转换矩阵,即机械手示教器上读回的数值

t H C ^tH_C tHC(3×3):图像平面h1到Tool平面转换矩阵

C P o ^CP_o CPo(2×1齐次变化>3×1):图像中的点

2.1.2 直接法

t T r ⋅ r i P o = t H C ⋅ C i P o ^tT_r cdot ^{ri}P_o = ^tH_C cdot ^{Ci}P_o tTrriPo=tHCCiPo

参数解释: t T r ^tT_r tTr保持不变, t H C ^tH_C tHC为所求的参数, C i P o ^{Ci}P_o CiPo r i P o ^{ri}P_o riPo一一对应。

适用条件:u轴不变的情况,末端执行器与机械手只存在x、y的偏移量。

(提示:机械手位姿数目==图像数目+1)

该方法得到的H矩阵是图像点与△Pos (△Pos = P i − P o r i g i n P_i - P_{origin} PiPorigin) 之间的关系,所以在后期的使用中,需要先确定一个 P o r i g i n P_{origin} Porigin,再利用图像与Homo关系得到△Pos,再叠加上 P o r i g i n P_{origin} Porigin,得到新的一个 r P i ^rP_i rPi

操作过程:

###### 2.1.3 旋转法

t i T r ⋅ r P o = t H C ⋅ C i P o ^{ti}T_r cdot ^rP_o = ^tH_C cdot ^{Ci}P_o tiTrrPo=tHCCiPo

参 数 解 释 : r P o 为 旋 转 法 所 求 量 , 保 持 不 变 , t H C 为 所 求 的 参 数 , C i P o 与 t i T r 一 一 对 应 。 参数解释:^rP_o为旋转法所求量,保持不变,^tH_C为所求的参数,^{Ci}P_o与^{ti}T_r一一对应。 rPotHCCiPotiTr

操作过程(保持标定板不能动):

旋转前后分别记下tool的坐标为

r P 1    r P 2 ^rP_1; ^rP_2 rP1rP2

则可以求得object在robot下的坐标:

r P o = ( r P 1 + r P 2 ) / 2 ^rP_o = (^rP_1+^rP_2)/2 rPo=(rP1+rP2)/2

标定过程:在标定板与相机视野内的前提下移动机械手(xy平面,z,u,v,w保持不变)并拍摄图片,存储每个位置与每张图片,采集9组数据,将采集的数据连入PlaneCalibration工具,计算标定结果。

产生的数据为:旋转法对应的两张图片与两个机械手位姿,九点标定对应的九张图片与九个机械手位姿数据。将图像整合在一个文件夹里,机械手位姿整合在一份文件里,按顺序保存,注意数据的对应关系。

标定过程只用到了标定板上的某个点作为object,当选定了某个点A,你的旋转法就需要保持点A在图像中位置不变。用标定板的作用是为了在视野中更好地识别点A,当你的目标够明显,也可以不适用标定板(一般不采用)。

使用如上方法,根据图像中object的点,能得到它在Robot坐标系(xy平面,z,u,v,w保持不变)的位置,就可以将坐标发给机械手执行,该方法不用求取相机的内外参数,不考虑图像的畸变,可以用于对精度要求不高的项目。

2.2 相机不在手上

求取相机坐标系与机械手的底座坐标系的变换关系

r H c {^r}H{_c} rHc

2.2.1 转换方程

r T t ⋅ t P o = r P o = r H c ⋅ c P o ^rT_tcdot ^tP_o = ^rP_o = ^rH_c cdot ^cP_o rTttPo=rPo=rHccPo

参数解释:

r T t ^rT_t rTt(4×4):Tool到Robot的转换矩阵,即机械手示教器上读回的数值

r P o {^r}P{_o} rPo(3×1):object在robot下的位置

r H c {^r}H{_c} rHc(3×3):图像平面h1到Tool平面转换矩阵

c P t {^c}P{_t} cPt(2×1齐次变化>3×1):tool在图像中的点

2.2.2 直接法

r P o = r H c ⋅ c P o ^rP_o = ^rH_c cdot ^cP_o rPo=rHccPo

标定过程:

###### 2.2.3 圆弧法

r P o = r H c ⋅ c P o ^rP_o = ^rH_c cdot ^cP_o rPo=rHccPo

圆弧法需要将标定板绑在机械手上,该方法也是为了找到 r P o ^rP_o rPo c P o ^cP_o cPo两个数据集间的转换关系。每个Poc都需要由3张相同xy(robot base)坐标下相机拍得的图像,用拟合圆心的方法得到。object定义为拟合得到的圆心,即机械手最末端。

(3张图像拟合的圆心是在本软件中使用的默认图像张数,所以该方法所需要的机械手位姿点数与图像张数必须相等,且是3的倍数。)

因为只是标定两个平面之间的关系, r P o ^rP_o rPo的xy与 r T t ^rT_t rTt的xy数据相同。

用 圆 弧 法 需 要 将 标 定 板 绑 在 机 械 手 上 , 该 方 法 也 是 为 了 找 到 r P o 与 c P o 两 个 数 据 集 间 的 转 换 关 系 用圆弧法需要将标定板绑在机械手上,该方法也是为了找到^rP_o与^cP_o两个数据集间的转换关系 rPocPo

操作步骤:

最后

以上就是甜美裙子为你收集整理的平面标定(Homography变换)的全部内容,希望文章能够帮你解决平面标定(Homography变换)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部