平面标定(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 圆弧法
- 2.1 相机在手上
二、平面标定(Homography变换)
1、定义
单应性(homography)变换用来描述物体在两个平面之间的转换关系,是对应齐次坐标下的线性变换,可以通过矩阵表示:
X′=H⋅XX' = H·X X′=H⋅X
2、计算推导
带入数据(x,y)为图片上的点位置:
[x′y′w]=[h1h2h3h4h5h6h7h8h9][xy1]\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] ⎣⎡x′y′w⎦⎤=⎣⎡h1h4h7h2h5h8h3h6h9⎦⎤⎣⎡xy1⎦⎤
因为是齐次坐标系,方程左右同时除h9
[x1′y1′w′]=[x′h9y′h9z′h9]=[h1′h2′h3′h4′h5′h6′h7′h8′1][xy1]\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] ⎣⎡x1′y1′w′⎦⎤=⎣⎢⎡h9x′h9y′h9z′⎦⎥⎤=⎣⎡h1′h4′h7′h2′h5′h8′h3′h6′1⎦⎤⎣⎡xy1⎦⎤
将矩阵展开得到:
公式①:
{x1′=h1′x+h2′y+h3′y1′=h4′x+h5′y+h6′w′=h7′x+h8′y+h9′\begin{cases} x1' = h1'x+h2'y+h3' \\ y1' = h4'x+h5'y+h6' \\ w' = h7'x+h8'y+h9' \end{cases} ⎩⎪⎨⎪⎧x1′=h1′x+h2′y+h3′y1′=h4′x+h5′y+h6′w′=h7′x+h8′y+h9′
将下面的矩阵用已知的观测值代替:
[x1′y1′w′]==>(xR,yR)\left[ \begin{matrix} x1'\\ y1'\\ w' \end{matrix} \right] ==>(x^R, y^R) ⎣⎡x1′y1′w′⎦⎤==>(xR,yR)
根据齐次坐标的齐次性质:
公式②:
x1′w′=xR,y1′w′=yR\frac{x1'}{w'}=x^R,\frac{y1'}{w'}=y^R w′x1′=xR,w′y1′=yR
结合公式①②:
公式③:
{xR=h1′x+h2′y+h3′h7′+h8′+1yR=h4′x+h5′y+h6′h7′+h8′+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′+1h1′x+h2′y+h3′yR=h7′+h8′+1h4′x+h5′y+h6′
在公式③中
(x,y),(xR,yR)(x, y),(x^R, y^R) (x,y),(xR,yR)
为观测到的已知参数,未知参数有h1’h8’共8个,一对点能够产生两个方程,则求解公式③至少需要四组点对,才能求出h1’h8’。一般的数据会多于4组点对,用最小二乘法或ransac来获取最优参数。
求解过后,h1’~h8’为已知,
H′=[h1′h2′h3′h4′h5′h6′h7′h8′1]H'= \left[ \begin{matrix} h1' & h2' & h3'\\ h4' & h5' & h6'\\ h7' & h8' & 1 \end{matrix} \right] H′=⎣⎡h1′h4′h7′h2′h5′h8′h3′h6′1⎦⎤
可用于单应性变换的计算。
3、应用
1、简单平面的转换
图片A中的点P为(x,y),求对应在另外一个视角的图片B点P’(x’,y’)?
[x2y2z2]=H′[xy1]\left[ \begin{matrix} x2\\ y2\\ z2 \end{matrix} \right]= H' \left[ \begin{matrix} x\\ y\\ 1 \end{matrix} \right] ⎣⎡x2y2z2⎦⎤=H′⎣⎡xy1⎦⎤
P′(x′,y′)=(x2z2,y2z2)P'(x',y') = (\frac{x2}{z2},\frac{y2}{z2}) P′(x′,y′)=(z2x2,z2y2)
--------------------------------------------------------2020更新 华丽的分割线--------------------------------------------------------
2、在四轴中求取2D点到3D点的转换关系
2.1 相机在手上
求取
rHc{^r}H{_c} rHc
2.1.1 转换方程
rPo=rTt⋅tHC⋅CPo{^rP_o = ^rT_t \cdot ^tH_C \cdot ^CP_o} rPo=rTt⋅tHC⋅CPo
参数解释:
rPo^rP_orPo(4×1):object在Robot坐标系下的表示
rTt^rT_trTt(4×4):Tool到Robot的转换矩阵,即机械手示教器上读回的数值
tHC^tH_CtHC(3×3):图像平面h1到Tool平面转换矩阵
CPo^CP_oCPo(2×1齐次变化>3×1):图像中的点
2.1.2 直接法
tTr⋅riPo=tHC⋅CiPo^tT_r \cdot ^{ri}P_o = ^tH_C \cdot ^{Ci}P_o tTr⋅riPo=tHC⋅CiPo
参数解释:tTr^tT_rtTr保持不变,tHC^tH_CtHC为所求的参数,CiPo^{Ci}P_oCiPo与riPo^{ri}P_oriPo一一对应。
适用条件:u轴不变的情况,末端执行器与机械手只存在x、y的偏移量。
(提示:机械手位姿数目==图像数目+1)
该方法得到的H矩阵是图像点与△Pos (△Pos = Pi−PoriginP_i - P_{origin}Pi−Porigin) 之间的关系,所以在后期的使用中,需要先确定一个PoriginP_{origin}Porigin,再利用图像与Homo关系得到△Pos,再叠加上PoriginP_{origin}Porigin,得到新的一个rPi^rP_irPi。
操作过程:
###### 2.1.3 旋转法
tiTr⋅rPo=tHC⋅CiPo^{ti}T_r \cdot ^rP_o = ^tH_C \cdot ^{Ci}P_o tiTr⋅rPo=tHC⋅CiPo
参数解释:rPo为旋转法所求量,保持不变,tHC为所求的参数,CiPo与tiTr一一对应。参数解释:^rP_o为旋转法所求量,保持不变,^tH_C为所求的参数,^{Ci}P_o与^{ti}T_r一一对应。 参数解释:rPo为旋转法所求量,保持不变,tHC为所求的参数,CiPo与tiTr一一对应。
操作过程(保持标定板不能动):
旋转前后分别记下tool的坐标为
rP1rP2^rP_1\; ^rP_2 rP1rP2
则可以求得object在robot下的坐标:
rPo=(rP1+rP2)/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 相机不在手上
求取相机坐标系与机械手的底座坐标系的变换关系
rHc{^r}H{_c} rHc
2.2.1 转换方程
rTt⋅tPo=rPo=rHc⋅cPo^rT_t\cdot ^tP_o = ^rP_o = ^rH_c \cdot ^cP_o rTt⋅tPo=rPo=rHc⋅cPo
参数解释:
rTt^rT_trTt(4×4):Tool到Robot的转换矩阵,即机械手示教器上读回的数值
rPo{^r}P{_o}rPo(3×1):object在robot下的位置
rHc{^r}H{_c}rHc(3×3):图像平面h1到Tool平面转换矩阵
cPt{^c}P{_t}cPt(2×1齐次变化>3×1):tool在图像中的点
2.2.2 直接法
rPo=rHc⋅cPo^rP_o = ^rH_c \cdot ^cP_o rPo=rHc⋅cPo
标定过程:
###### 2.2.3 圆弧法
rPo=rHc⋅cPo^rP_o = ^rH_c \cdot ^cP_o rPo=rHc⋅cPo
圆弧法需要将标定板绑在机械手上,该方法也是为了找到rPo^rP_orPo与cPo^cP_ocPo两个数据集间的转换关系。每个Poc都需要由3张相同xy(robot base)坐标下相机拍得的图像,用拟合圆心的方法得到。object定义为拟合得到的圆心,即机械手最末端。
(3张图像拟合的圆心是在本软件中使用的默认图像张数,所以该方法所需要的机械手位姿点数与图像张数必须相等,且是3的倍数。)
因为只是标定两个平面之间的关系,rPo^rP_orPo的xy与rTt^rT_trTt的xy数据相同。
用圆弧法需要将标定板绑在机械手上,该方法也是为了找到rPo与cPo两个数据集间的转换关系用圆弧法需要将标定板绑在机械手上,该方法也是为了找到^rP_o与^cP_o两个数据集间的转换关系 用圆弧法需要将标定板绑在机械手上,该方法也是为了找到rPo与cPo两个数据集间的转换关系
操作步骤:
平面标定(Homography变换)相关推荐
- 张正友平面标定方法 超详细
利用摄像机所拍摄到的图像来还原空间中的物体.在这里,不妨假设摄像机所拍摄到的图像与三维空间中的物体之间存在以下一种简单的线性关系:[像]=M[物],这里,矩阵M可以看成是摄像机成像的几何模型. M中 ...
- 工业机器人工具中心点标定的意义_一种利用平面标定板的机器人工具中心点标定方法_2015108676182_说明书_专利查询_专利网_钻瓜专利网...
技术领域 本发明涉及机器人工具中心点(Toolcenterpoint,TCP)标定方法,尤其涉及一种利用平面标定板的机器人工具中心点标定方法. 背景技术 机器人工具中心点(Toolcenterpoin ...
- 干货!自动泊车之AVM环视系统(联合标定/视角变换/纹理映射)
作者 | 中投靓仔 编辑 | 汽车人 原文链接:https://zhuanlan.zhihu.com/p/572325879 点击下方卡片,关注"自动驾驶之心"公众号 ADAS ...
- matlab 光平面标定代码,线结构光视觉传感器/线激光深度传感器标定工具(matlab)...
线结构光视觉传感器/线激光深度传感器标定工具(matlab) 发布时间:2018-03-13 17:32, 浏览次数:655 , 标签: matlab 线结构光视觉系统有着结构简单.使用灵活.受周围光 ...
- 线激光扫描三维重建 平移装置 光平面标定
先前开源的一套旋转式三维彩色扫描仪Demo 得了很多小伙伴的关注, 但是当时仅为雏形Demo,仍然有许多悬而未决的问题,对于初学者非常不友好,很难复现. 基于MATLAB的线激光三维彩色扫描仪_B ...
- 2D平面上的变换和3D空间中的变换以及求无穷远点
求两个平行线的无穷远点,最简单的方法(二维空间和三维空间都适用) 两个平行线的交点就是无穷远点.求解的方法就是把直线的方向向量(向量我们都用列向量表示)拿到,然后给最后一维加个0就是它们的交点(无穷远 ...
- 透视变换 单应性矩阵怎么求 matlab,单应性(homography)变换的推导
矩阵的一个重要作用是将空间中的点变换到另一个空间中.这个作用在国内的<线性代数>教学中基本没有介绍.要能形像地理解这一作用,比较直观的方法就是图像变换,图像变换的方法很多,单应性变换是其中 ...
- 线结构光平面标定矩阵变换算子
这五个算子在线结构光的标定中用于矩阵变换,为了计算物体移动的距离 第一个 pose_to_hom_mat3d算子将 3D 姿势转换为均匀的转换矩阵,在线结构光平面标定中,这个算子把相机外参转为一个矩阵 ...
- N点标定-坐标系变换
文章目录 1:标定算法 2:外部链接 1:标定算法 vector_to_hom_mat2d(Px, Py, Qx, Qy, HomMat2D) 这里参考了halcon算子块的官方文档,使用的是最小二乘 ...
- 线结构光平面标定计算算子
总体介绍: 这三个算子通过两幅图片中的光线点的相对于相机的坐标计算出光平面的方程,需要的标定文件怎么获得可以参考这个专栏里前面的文章 第一个 compute_3d_coordinates_of_lig ...
最新文章
- 宿主如何访问虚拟机中的web服务器
- SAP医药医疗行业解决方案
- 禅道8.2.4 腾讯云迁移至VM
- xshell自动化脚本
- CFNet 论文解读
- RTP协议全解(H264码流和PS流)
- Quartz 2d绘图
- Entity Framework Core 之简单介绍
- Cortex-M3-异常与中断-向量表 s
- icoding复习6 图
- 转:链表相交问题 详解
- vim下php文件中自动缩排html代码
- 计算机病毒是以独立的文件形式存在的对吗,计算机病毒以什么形式存在?
- 教师管理系统_ER图_功能图_数据字典_数据库脚本
- 龙门标局:注册地理标志证明商标有什么作用
- 高速公路ETC卡签之我见4-卡签结构说明
- iOS开发——BAT网易笔试面试题参考答案
- golang源代码阅读--Negroni
- Unity导入package简单操作流程
- 已备案未注册老域名挖掘工具
热门文章
- 误差传递公式(law of propagation of uncertainties)
- 偏最小二乘回归(PLSR)算法原理
- MethodArgumentNotValidException异常拦截提示信息太长?
- 【数据结构06】二叉平衡树(AVL树)
- 西门子博图怎么导入库文件_【傻瓜教程】博途中库的建立与使用方法(工控公开课 今晚8点 老地方 不见不散!)...
- PPT 无法播放媒体/视频媒体不可用怎么解决
- NPDP产品经理认证班将于近期开课
- radon变换(c++、OpenCV实现)
- 支持iphone的打印服务器,MAC苹果电脑系统 如何添加网络打印机(适用于Mac OS)
- 时间序列(数据分析)