【庖丁解牛】机器视觉核心算法之N点标定


机器视觉在工业领域应用主要分为四大类:识别、检测、测量和定位。据机器视觉产业联盟最新调查结果显示,工业应用场景中,测量和定位应用占比约为26%,广泛应用于3C电子、半导体、汽车制造、新能源等支柱行业。根据笔者多年从业经验,定位类应用是入门门槛最高的一类机器视觉应用,涉及到大量空间几何等数理基础。
作为全球某机器视觉头部大厂的资深工程师,深感学校和互联网上主要资料局限于计算机视觉领域,能落地工业领域的算法寥寥无几,且相关算法原理语焉不详、乏善可陈,或示例代码缺少关键实现、谬误百出, 故作【庖丁解牛】系列课程,掰开揉碎了讲解机器视觉领域核心算法,并提供完整的高质量代码,力争为从业者提供严格贴近工业应用场景的、高质量的国际一线算法剖析
本系列课程围绕工业视觉算法原理及实现,具体场景落地应考虑的工程实践化设计要点及经验,笔者将在其他系列课程中讲解。
庖丁解牛首期公开课的主题是 N点标定

N点标定概述

在介绍N点标定算法之前,我们首先要搞清楚什么是N点标定?为什么要做N点标定?
N点标定是根据输入或配置的N组坐标点对(图像——世界),计算图像坐标映射到世界坐标的射影变换关系
上面这段话翻译过来就是:通过N组对应的图像坐标与世界坐标,求解图像坐标到世界坐标的变换矩阵。
求解这个变换矩阵做什么用?以工业领域某定位应用场景为例进行介绍,场景示意如图1所示。
图1 机械臂定位引导抓取场景
如上图所示,相机拍摄料台上的工件,控制机械臂准确拾取工件。在这个系统中,相机作为视觉传感器,输入是采集得到的工件图像,输出是机械臂要到达的拾取位姿。也即是说,要根据工件图像中的特征信息,即特征点像素坐标,通过某种运算,得到工件在机械臂末端工具坐标系下的坐标,进而控制引导机械臂到达指定位置拾取工件。在这个过程中,我们需要搭一座桥梁,实现特征点像素坐标到机械臂末端工具坐标(后面统称为世界坐标)的转换。这座桥梁,业内通常称之为标定
由于两个平面坐标系之间的射影变换关系为透视变换(射影变换和透视变换两个概念暂时不用理会,后面会介绍),透视变换为8自由度,即需要至少8组方程才能求唯一解。每一组对应点 ( x , y ) \left( x,y \right) (x,y)提供两组方程,因此至少需要不共线的四组对应点才能求唯一解。通常为保证求解结果的精度和鲁棒性,会采集大于四组对应点实现透视矩阵求解。据笔者猜测,N点标定术语大概率来自美国康耐视公司的CogCalibNPointToNPointTool算子,OpenCV中对应算子为findHomography、Halcon中对应算子为vector_to_hom_mat2d,后两者命名偏学术化。业内广泛采用N点标定术语,某种程度上,也体现出康耐视公司在机器视觉测量类和定位类应用的市场地位与影响力。

机器视觉领域商业闭源代表:美国康耐视(Cognex)的VisionPro、德国MVTec的HALCON、加拿大Teledyne DALSA的Sherlock,开源代表:OpenCV。

射影变换

射影变换概念

众所周知,平面上的一点可以用 I R 2 IR^{2} IR2中的一对坐标 ( x , y ) \left( x,y \right) (x,y)来表示。因此,通常 I R 2 IR^{2} IR2等同于一张平面。把 I R 2 IR^{2} IR2看作一个向量空间时,坐标对 ( x , y ) \left( x,y \right) (x,y)是向量,也就是说点等同于向量。研究 I R 2 IR^{2} IR2的几何称为射影几何。

上面这段定义摘自3D立体视觉“圣经”级别的教科书《Multiple View Geometry in Computer Vision》,强烈建议读者朋友对照原书仔细揣摩体悟。如果仍未揣摩明白,只需记住 I R 2 IR^{2} IR2等同于一张平面,研究 I R 2 IR^{2} IR2的几何称为射影几何。
那么,两个平面(或两个平面坐标系)之间存在哪些几何关系呢?这里,笔者先给出结论:两个平面之间的线性映射关系均满足射影变换或单应(homography)。也即是说,当不考虑两个平面之间发生非线性变换(如畸变)时,两平面之间的变换关系均为射影变换。
两个平面间的射影变换存在以下层次:

  1. 欧氏变换,即平移+旋转
  2. 相似变换,即平移+旋转+缩放(不做特殊说明时,均指同步缩放)
  3. 仿射变换,即平移+旋转+缩放+纵横比(X轴和Y轴缩放比率不同)+斜切(X轴和Y轴不垂直)
  4. 透视变换,即平移+旋转+缩放+纵横比+斜切+透视(物理世界中两条平行的直线在图像中发生相交)

不同变换层次的矩阵形式、失真示意和不变性质如图2所示。
图2 射影变换群
由上图可知,透视变换(射影变换)为8自由度,即需要至少四组对应点才能求唯一解;仿射变换为6自由度,即需要至少三组对应点才能求唯一解;相似变换为4自由度,即需要至少两组对应点才能求唯一解。

射影变换形式

欧式变换(平移和旋转的复合)可表示为:
[ x ′ y ′ 1 ] [ c o s θ − s i n θ t x s i n θ c o s θ t y 0 0 1 ] = [ x y 1 ] \left[ \begin{array}{} x^{'} \\ y^{'} \\ 1 \\ \end{array} \right]\left[ \begin{array}{} cos\theta & -sin\theta & t_{x} \\ sin\theta & cos\theta & t_{y} \\ 0 & 0 & 1 \\ \end{array} \right]=\left[ \begin{array}{} x \\ y \\ 1 \\ \end{array} \right] xy1 cosθsinθ0sinθcosθ0txty1 = xy1
欧式变换是刚体的运动模型。
相似变换(欧式变换与均匀缩放的复合)可表示为:
[ x ′ y ′ 1 ] [ s c o s θ − s s i n θ t x s s i n θ s c o s θ t y 0 0 1 ] = [ x y 1 ] \left[ \begin{array}{} x^{'} \\ y^{'} \\ 1 \\ \end{array} \right]\left[ \begin{array}{} scos\theta & -ssin\theta & t_{x} \\ ssin\theta & scos\theta & t_{y} \\ 0 & 0 & 1 \\ \end{array} \right]=\left[ \begin{array}{} x \\ y \\ 1 \\ \end{array} \right] xy1 scosθssinθ0ssinθscosθ0txty1 =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值