21  几何测量

章节 14 拟合出的直线与圆,在产线眼中只是中间产物。质检报告上签字认可的从来不是”直线方向向量”或”圆的参数”,而是摄像头孔到顶边 47.8 px、孔的圆度 0.25 px、盖板四角是否方正(直角误差 0.09°) 这类可与图纸公差直接比对、可判定合格与否的数。从基元到这些数还要再走一级:几何测量(geometric measurement)——对拟合得到的点、线、圆套用精确的几何公式求距离、角度与交点,再按几何公差的定义评定平行度、圆度与直线度。完整的测量链是:图像 → 边缘点 → 几何基元 → 几何量 → 判定。本章关心两件事:每一级的误差如何传递到最终的数上;以及”带宽”类的几何公差量与”位置”类的尺寸量在统计性质上有何根本不同。

实验对象(图 21.1)是一块真实的手机盖板玻璃(Smart3「几何关系示例方案」样图,2592×1944 单通道灰度):白色背景上一块竖置矩形盖板,外轮廓是暗色边框(bezel),四条干净的直边在四角以真实倒圆角相接;顶部边框内嵌一个圆形摄像头孔与一条听筒条形孔,底部有一块 Home 键贴合区。这是一类极常见的消费电子来料检测件——产线要测的正是孔位、边距、盖板内外尺寸、四角方正度与孔的圆度。本章把 小节 21.2 的全套几何公式在这块真实零件上跑一遍;与合成场景不同,真实零件没有解析真值,所以下文一律按实测值叙述,并以零件自身的几何自洽性(四边应构成近似矩形)作为测量正确性的交叉验证。

图 21.1: 真实手机盖板玻璃样图(2592×1944):白底上的暗色矩形盖板,四条直边经真实倒圆角相接;顶部边框含圆形摄像头孔与听筒条形孔,底部为 Home 键贴合区。本章测量其边、孔、角点之间的几何关系。

21.1 测量链与误差传递

把测量链逐级摊开:边缘点级的误差来自图像噪声与边缘模型的失配;基元级靠多点拟合做统计平均;几何量级是确定性的封闭公式,本身不产生新误差——输入基元差多少,输出几何量就差多少;判定级把几何量与图纸公差比较,前三级累积的误差预算直接决定判定的置信度(以及该在公差上留多少保护带)。所以分析一套视觉量测系统的精度,功夫全在前两级的误差传递(error propagation)上。

第一级是边缘点。经投影平均与抛物线插值(机制见 章节 14章节 20)之后,单个边缘点沿法向的残余噪声记为 \(\sigma_e\)。本例可从拟合残差直接量出它的上界:顶边 60 个边缘点对 FitLine 最小二乘直线的全点 RMSE 仅 0.103 px(左、右长边分别 0.137、0.211 px)。这条 RMSE 里既有传感器噪声、也含真实直边自身的微小形状起伏,因此 \(\sigma_e \lesssim 0.1\) px 是一个保守上界——经过整条流水线,像素级的成像噪声被压到了十分之一像素以内。

第二级是拟合。\(N\) 个独立点拟合一条直线,参数误差按 \(1/\sqrt N\) 缩小;而对方向而言还有第二个杠杆——点集跨度 \(L\)。对均匀散布在跨度 \(L\) 上的 \(N\) 个点,最小二乘直线的方向标准差约为

\[ \sigma_\theta \approx \frac{\sigma_e}{L}\sqrt{\frac{12}{N}}, \]

\(L\) 在分母上:同样的点,量得越长,角度越准。代入本例的长边(\(\sigma_e\lesssim0.1\) px、\(N=90\)\(L\approx1060\) px)得单条线 \(\sigma_\theta\approx 0.002^\circ\),两条独立线的夹角再乘 \(\sqrt2\)测量噪声底约 \(0.003^\circ\)。这个底很关键:实测左右两长边的夹角为 0.065°、上下两短边为 0.237°——都远高于 \(0.003^\circ\) 的噪声底,说明它们是真实零件的边并不严格平行(盖板冲切/贴合的真实几何偏差),而非测量噪声的随机抖动。测量把零件的真实形状分辨了出来,这正是误差预算分析的用途:先知道噪声底在哪,才能判断一个读数是真信号还是噪声。

像素与物理量:本章全部读数以像素(px)为单位。换算到毫米要再乘相机标定的比例因子(每像素对应的物理尺寸),那是 章节 5 的内容。真实样图未附标定,故本章只在像素域内做几何关系与公差带宽的相对评定,不编造物理真值。

基元提取本身沿用 章节 14 的流水线:顶、底两短边各用 60 条搜索线提点后 FitLine 最小二乘拟合;左、右两长边各用 90 条搜索线,并采用 x/y 交换工作法拟合(原因见 小节 21.4);四条边的 ROI 都避开了四角圆角段,只落在直边主体上。摄像头孔用 EllipseLocator 沿 48 条径向搜索线一步定出,孔缘为白孔(内)暗框(外)的亮→暗跳变。

21.2 距离、角度与交点

基础几何量只需三个公式。点 \(\mathbf p\) 到过 \(\mathbf a\)\(\mathbf b\) 两点直线 \(L\)点线距离

\[ d(\mathbf p, L)=\frac{\lvert(\mathbf p-\mathbf a)\times(\mathbf b-\mathbf a)\rvert}{\lVert\mathbf b-\mathbf a\rVert}; \]

方向向量为 \(\mathbf u\)\(\mathbf v\) 的两条直线的夹角(直线无向,取锐角):

\[ \theta=\arccos\frac{\lvert\mathbf u\cdot\mathbf v\rvert}{\lVert\mathbf u\rVert\,\lVert\mathbf v\rVert}\in[0^\circ,90^\circ]; \]

交点则是两条直线参数方程联立的 2×2 线性方程组,系数行列式趋零意味着两线近平行、求交病态——工程接口因此都带一个平行判定门槛。

其中”角点”值得多说一句。这块盖板的四角是真实的倒圆角,图像里根本不存在一个尖锐的角点像素可供直接定位;工业上的标准做法是把角点定义为两条拟合直边的虚拟交点(virtual intersection)——它不必真的存在于工件上,倒圆角后的理论角点照样可测。两条边各由几十个边缘点平均而来,交点完整继承它们的精度。本例把这套公式在盖板上用了个遍:上下短边夹角、左右长边夹角、顶边与左边求交得左上角点、摄像头孔心到顶边与右边的边距、角点到孔心的跨件距离,以及由点集到对边距离均值给出的盖板内外宽高(图 21.2)。全部实测值见 表 21.1

图 21.2: 测量叠加图(对比描绘,亮处画黑、暗处画白):四条拟合边线沿盖板外轮廓延伸;顶部右侧为摄像头拟合圆(含圆心十字);左上角的十字是顶边与左边的虚拟交点(角点);自孔心引出的短线段为孔心→顶边、孔心→右边的垂距,长对角线为角点→孔心的跨件距离。
表 21.1: 真实盖板玻璃的几何测量结果(实测值,零件无解析真值;单位 px / °)
几何量 实测 说明
上下短边夹角(°) 0.2365 真实非平行(≫0.003° 噪声底)
左右长边夹角(°) 0.0647 真实非平行
顶边⊥左边直角误差(°) 0.0947 90°−89.9053°,左上角方正度
左上角点(px) (957.475, 121.435) 两直边虚拟交点
孔心→顶边距离(px) 47.769 摄像头上边距
孔心→右边距离(px) 129.780 摄像头右边距
角点→孔心距离(px) 765.908 跨件点点距离
摄像头孔心(px) (1721.930, 168.594) 48 点拟合圆心
摄像头孔半径(px) 17.051 拟合圆半径
盖板宽 左↔︎右(px) 893.020 点集到对边距离均值
盖板高 顶↔︎底(px) 1744.362 点集到对边距离均值

这张表的可信度来自几何自洽:四条边两两测得的夹角——上下 0.24°、左右 0.06°、顶⊥左直角误差 0.09°、顶⊥右 0.16°——都在零点几度内,确认四条独立拟合的边的确围成一个近似矩形;盖板宽 893 px、高 1744 px 也与轮廓暗区跨度一致。距离量则是真实的来料尺寸:摄像头孔上边距 47.8 px、右边距 129.8 px,正是这类盖板装配时摄像头开窗对位要卡的关键间隙。所有读数都停在像素域——换算物理尺寸要乘相机标定比例因子(章节 5)。值得强调的是:几何测量这一级是精确公式,表里每一个数的不确定度全部由边缘点噪声 \(\sigma_e\) 经拟合传递而来,公式本身一字不差。

21.3 平行度、圆度与直线度

尺寸之外,图纸上还有另一类要求,写在几何尺寸与公差(GD&T,geometric dimensioning and tolerancing)的框格里。它们的语言不是”测出多少”,而是公差带(tolerance zone):被测要素必须完整落在某个给定宽度的区域内——平行度(parallelism)的带是与基准线平行的两条直线之间,直线度(straightness)的带是两条平行直线之间,圆度(roundness)的带是两个同心圆之间的环带。这套语言的出发点是装配功能:只要被测要素整体落在带内,不管它的具体形状长什么样,与配合件的装配就有保证。视觉测量评定它们的通用配方是同一个:取被测要素的边缘点集,对评定基准计算偏差,max−min 即为包容点集所需的最小带宽。真实零件的妙处在于:这些带宽里装的是货真价实的形状偏差,无需人为注入缺陷。

平行度。以左长边拟合线为基准,右长边 90 个边缘点到基准线的距离 max−min 为 1.487 px(跨度约 1060 px);以顶边为基准,底边的平行度为 2.790 px(跨度约 670 px)。这两个数可以拆开来读:上下短边的平行度几乎全部来自那 0.237° 的真实夹角——\(670\times\tan(0.237^\circ)\approx2.77\) px,与实测 2.790 px 仅差 0.02 px,余下的才是底边自身的形状起伏;左右长边的 1.487 px 里,夹角贡献 \(1060\times\tan(0.0647^\circ)\approx1.20\) px,余下约 0.29 px 来自长边自身的弯曲。平行度是系统性倾斜与局部形状之和,且按 max−min 取极值,对基准的拟合误差也照单全收。

圆度。孔径与圆度是装配类工件最常见的一对判定项:前者决定配合间隙,后者决定开窗对位与受力是否均匀。本例摄像头孔的 48 个孔缘边缘点对拟合圆(半径 17.05 px)的径向偏差 max−min 为 0.252 px——这是一个真实的微小失圆量,并非合成缺陷。图 21.3 把径向偏差放大 60 倍画在名义圆上,可以看到真实孔缘并非完美圆:偏差以低阶起伏为主(轻微椭化加局部凸凹),下方与左下弧段略微外凸。这种”低阶为主”的失圆形状,正是冲切/激光开孔工艺的典型印记。需要提醒的是评定基准的角色:最小二乘圆对采样噪声最稳健,但其基准会被任何局部凸凹整体拉动,使失圆量的”账”以不均匀的方式摊到各段弧上——若某弧段有明显压伤,邻近完好弧段会相对新基准外鼓、正对面弧段内收(小节 21.4 的工业案例详述了由此引发的判定纠纷)。

ISO 圆度评定有多种基准圆:最小二乘圆(least-squares circle,LSC)最小区域(minimum zone)圆、最小外接圆与最大内切圆。最小区域圆按定义给出最小带宽,是 GD&T 语义的本体;最小二乘圆计算最稳健、对采样噪声最不敏感,但带宽系统性偏大且基准会被局部缺陷拉动。报告圆度必须注明用的是哪一种。

直线度。左长边的法向偏差 max−min 为 0.624 px,右长边为 0.872 px(均为 90 点、跨度约 1060 px)。图 21.4 的偏差剖面(×40)显示两条边的真实形状:左边(上)较直、只有小幅高频起伏;右边(下)则带一道平缓的弓形弯曲外加一处局部小凸。这两条都是零件的真实边形,没有任何人为台阶——右边更弯也直接解释了上一段里”左右平行度 1.487 px 中有约 0.29 px 来自边形”的那部分。

带宽量是极值统计:采样点越多,噪声的极差期望越大,max−min 也随之缓慢增长——这与中心、角度等平均类量”点数越多越准”恰好相反。所以圆度、直线度的检测协议必须写明采样点数,否则两台设备的数没有可比性。

图 21.3: 圆度极坐标偏差图(径向偏差 ×60 叠加于名义圆):灰色为名义圆,黑色为真实摄像头孔缘(max−min = 0.252 px,48 点);失圆以低阶起伏为主,下方与左下弧段略外凸。
图 21.4: 直线度偏差剖面(法向偏差 ×40,横轴为沿边的位置):上为左长边(0.624 px、较直),下为右长边(0.872 px、带平缓弓形弯曲与一处局部小凸)。

21.4 SciVision 实现

基础几何量由 SCIMV::SciSvGeometryMeasure 提供,每个 API 对应 小节 21.2 的一个公式:

SCIMV::SciSvGeometryMeasure gm;
double angleDeg = 0, d = 0;
rc = gm.IncludedAngle(t1, t2, l1, l2, /*mode 直线夹角*/1, &angleDeg);  // 顶⊥左方正度
rc = gm.PointToLineDistance(holeCenter, t1, t2, &d);                  // 孔心->顶边
SciPoint corner;
rc = gm.LinesIntersection(t1, t2, /*lineType 直线*/0, l1, l2, 0,
                          /*parallelThresh*/7, &corner);              // 倒圆角处的虚拟角点
double dMin = 0, dMax = 0; SciPoint pNear, pFar;
rc = gm.PointsToLineDistance(rightPts, l1, l2, &dMin, &dMax, &pNear, &pFar);
double width = 0.5 * (dMin + dMax);    // 盖板宽(均值)
double parallelism = dMax - dMin;      // 左|右平行度带宽

直线一律用两个端点(SciPoint 对)表示。IncludedAnglemode=1 取直线间夹角,结果落在 [0°, 90°]——顶边与左边近乎垂直时返回约 89.9°,方正度即 90° 与之之差。LinesIntersectionparallelThresh=7 是平行判定门槛:两线方向过于接近时求交病态,接口直接拒绝输出交点——本例顶边与左边近乎垂直,远离该门槛。PointsToLineDistance 一次返回点集到直线距离的最小值、最大值及对应点:均值即对边的名义距离(盖板宽/高),max−min 即平行度带宽。圆孔由 SciSvEllipseLocator::EllipseLocator 一步定位,四个输出点数组(拟合点/有效点/剔除点)都必须传实体,否则 rc=120001015。

两条工程提醒。其一,SciSvGDTToolsRoundness/Straightness 返回的是归一化 [0,1] 分数(越接近 1 越”好”),不是 GD&T 公差带宽:本章实测摄像头孔的圆度分数为 0.9964;而左、右两长边的直线度分数都是 1.000000——尽管它们的真实带宽明明是 0.624 px 与 0.872 px、相差近 40%,归一化分数却把二者抹成了同一个饱和值,根本无从据此对着图纸上”直线度 ≤0.02 mm”设阈值。分数与带宽之间也没有公开换算公式,只能作同型工件的相对趋势参考;若一定要用它做监控,须先拿一组已知带宽的标准样件标定出”分数—带宽”对应曲线。判公差的带宽值则一律从点数组自行计算 max−min(即本章正文的全部数字)。其二,FitLine 的输出距离数组 dstPtPositionArr 不是各点到所返回直线的带符号垂距,语义不透明,直线度必须自己写”点到直线带符号距离”(devToLine)再取极差。另有一个老坑顺带说明:FitLine 对严格竖直的点集会返回退化结果,左、右两条竖直长边因此先把所有点的 x/y 交换后拟合,再把所得直线端点换回。生成本章全部图像与数字的完整工程位于 code/geometric_measurement/

工业案例:圆度评定的基准之争

某轴承厂的滚道圆度判定曾陷入僵局:客户入厂检验用圆度仪密集采样数千点、按最小区域法评定;产线视觉系统用几十个边缘点、按最小二乘圆评定。同一工件两个数——产线值系统性偏小约 15%(稀疏采样漏掉峰谷使测值偏小,其影响盖过了最小二乘基准本身偏大的反向效应),产线判合格的件被客户判退,双方各执一词数月。最终的解决方案不在算法而在协议:检测协议中明确写入评定方法(最小区域 vs 最小二乘)与采样点数,并为产线值设定经标定的折算余量。教训只有一句:圆度、直线度这类带宽量没有脱离评定方法的”真值”,报告几何量必须连同评定方法与采样条件一起报告

21.5 小结

  • 测量链是”图像 → 边缘点 → 基元 → 几何量 → 判定”:几何测量一级是精确公式、不产生新误差,最终精度全部由边缘点噪声 \(\sigma_e\) 经拟合(\(1/\sqrt N\))传递而来;本章在真实盖板上测得边缘拟合 RMSE ≲0.1~0.28 px。
  • 先定噪声底,再判真信号:长边方向误差 \(\sigma_\theta\approx(\sigma_e/L)\sqrt{12/N}\approx0.003^\circ\);实测左右边非平行 0.065°、上下边 0.24° 都远在噪声底之上,是真实零件的几何偏差,不是抖动。
  • 虚拟交点测倒圆角的角点:盖板四角是真实倒圆角,角点由顶边与左边的虚拟交点 (957.5, 121.4) 给出,并继承两边各几十点平均的精度。
  • 带宽量(平行度/圆度/直线度)是极值统计且形状真实:左右平行度 1.487 px 可拆为夹角贡献 1.20 px + 边形 0.29 px;摄像头孔真实圆度 0.252 px、左右长边真实直线度 0.624/0.872 px——全部来自零件本身,无需合成缺陷。
  • 关键量从原始点数组自行复算:SDK 的 GD&T 工具返回归一化分数(两条带宽差 40% 的边都得 1.000000),FitLine 的距离数组也非真实垂距——公差判定的数必须自己从点算起。

关于几何量的不确定度分析与亚像素测量的系统论述,可进一步阅读 Steger 等人的著作 (Steger, Ulrich, 和 Wiedemann 2018)。本章用到的平行度、圆度、直线度等几何公差,其符号语言与公差带定义由几何尺寸与公差(GD&T)标准规定:国际体系见 ISO 1101,给出形状、方向、位置与跳动公差的标注与解释规则 (International Organization for Standardization 2017);北美体系见 ASME Y14.5,是同一套语义在工程图上的另一权威表述 (American Society of Mechanical Engineers 2018)小节 21.3 与工业案例反复触及的”评定基准之争”——最小二乘圆与最小区域圆给出不同带宽——在形状误差拟合文献中有专门讨论,Moroni 与 Petrò 比较了各类最小区域拟合算法的原理与代价,可作为把本章 max−min 带宽接到规范化评定方法的入口 (Moroni 和 Petrò 2008)