圆孔测量:测量圆孔直径¶
在孔边上布一圈径向卡尺找边缘点,用这些点拟合出一个圆,量出孔的直径,再和你给的参考直径比。通孔、沉孔、倒角孔、安装孔的孔径检测,都可以用它。
直径像素值每次都会给出;导入标定文件之后,还能换算成毫米,并且这个毫米值可以设成自定义变量发给 PLC,口径和卡尺工具一样。
前置条件¶
- 检测方案里已经建好标签外框,模板图已完成旋转拉伸。检测框会跟着定位一起走。
- 孔边在图上看得出明暗变化。孔边糊成一片、人眼都看不出圆的地方量不了。
- 想要毫米值,需要先做过标定,得到一个记录像素当量的 JSON 文件(和卡尺工具用的是同一种文件)。
它包含哪些检测框¶
只有一个:"检测参数"。双击它打开的窗口有四个页签:
| 页签 | 管什么 |
|---|---|
| "设置" | 卡尺数量与宽度、边缘极性与选边规则、参考直径与允许误差、标定与补偿。日常调参都在这一页 |
| "区域" | 搜索圆环的圆心、外径、内外比和角度范围;也可以直接在图上拖圆环 |
| "图形" | 五个显示开关,控制结果图上画什么 |
| "结果" | 直径、圆心、残差汇总,以及每把卡尺的明细表 |
新建与画框¶
- 切到"编辑模式"。
- 点工具栏"新建检测项",类型选"圆孔测量",确定。
- 在模板图上拖出矩形检测框,把整个孔套进去,四周留一点边。这个框只决定"在哪块图上找孔",它会跟着标签外框的定位一起移动。
- 点"训练工程"。
- 双击"检测参数",切到"区域"页,在图上拖圆环:
- 外圆放在孔边外侧,内圆放在孔边内侧,内外圆之间那一圈就是搜索带,孔边必须落在带里。
- 圆心大致对准孔心即可,不必很准——默认开着"两次测量",第一次量出的圆心会自动用来再量一次,初始偏差会被纠正过来。
- 需要精确摆位时,可以在"区域"页里直接填圆心、"外环半径"(Outer Radius)、"径向比例"(Radial Scale,内圆半径 ÷ 外圆半径)、"起始角度"(Start Angle)和"角度范围"(Angle Range)。孔只露出一部分时,把角度范围缩到露出的那段弧上。
- 点窗口左上角的运行按钮跑一次,看"结果"页里找到了多少个点、直径是多少。
第一次打开时的圆环
第一次拿到输入图时,圆环会自动铺在检测框中央、整圈 360°、内外比 0.6。孔在框中央且大小合适时,常常不用拖就能直接量。
参数说明¶
"设置"页 —— 圆孔与卡尺¶
| 参数 | 含义 | 调参建议 |
|---|---|---|
| "卡尺数量" | 沿圆环均匀布多少把径向卡尺,每把卡尺找一个边缘点 | 默认 36。孔大、边缘干净时够用;孔边有缺口、毛刺时加多一些,让剔点后仍有足够的点 |
| "卡尺宽度(px)" | 每把卡尺沿圆周方向取多宽来平均 | 默认 5。噪声大就加宽,孔很小就减窄 |
"设置"页 —— 边缘¶
| 参数 | 含义 | 调参建议 |
|---|---|---|
| "极性" | 沿半径从孔心向外看边缘的明暗过渡方向,下拉三选一(由明到暗 / 由暗到明 / 任意) | 背光通孔(孔亮、件暗)选"由明到暗";正面光下的暗孔选"由暗到明";不确定先用"任意"跑通再收紧 |
| "对比度阈值" | 边缘对比度门槛,低于它的明暗过渡不算边缘 | 找到的点太少就往下调;挑到杂边就往上调 |
| "滤波半宽(px)" | 平滑窗口的半宽,值越大越平滑 | 孔边毛糙、有噪点时往上调;调太大会把边缘抹钝 |
| "边缘选择" | 一把卡尺里有多条边时挑哪一条:"最接近期望半径" / "对比度最强" / "由内向外第一条" / "由内向外最后一条" | 默认"最接近期望半径"(期望半径 = 内外圆的中间)。倒角、沉孔会出现两圈边缘,用它配合把圆环中线摆在要量的那圈边上 |
| "两次测量" | 用第一次拟合出的圆心和半径,缩窄搜索带再量一次 | 默认打开。圆环摆得不够准时靠它纠偏;一般不要关 |
| "剔除点数上限" | 拟合时最多丢掉多少个偏离最远的点 | 默认 4。孔边有缺口、异物、毛刺时适当加大 |
| "最低有效点比例(%)" | 找到边的卡尺、以及最终参与拟合的点,各自至少要占卡尺总数的多少 | 默认 60。低于它直接判 NG,防止只凭几个点拟合出一个假圆 |
"设置"页 —— 判定¶
| 参数 | 含义 | 调参建议 |
|---|---|---|
| "参考直径(px)" | 标准品上这个孔的直径应该是多少像素 | 别凭空填。先跑几件良品,看"结果"页的"直径(px)",取中间值填进来 |
| "允许误差(±px)" | 实测直径允许偏离参考直径多少像素 | 差值在范围内判 PASS,超出判 NG。先按良品的波动给,再收紧 |
| "最大 RMS 残差(px,0=不判)" | 拟合残差的均方根上限,超过判 NG | 默认 0 不判。孔变形、椭圆、缺口也要判出来时再设 |
"设置"页 —— 标定¶
| 参数 | 含义 | 调参建议 |
|---|---|---|
| "像素当量" | 当前的换算系数(mm/px) | 只读。没导入过标定文件时显示"未导入" |
| "导入标定文件…" | 选一个 JSON 标定文件 | 文件里必须有像素当量字段,导入成功会提示换算系数是多少 mm/px |
| "偏差补偿(mm)" | 给毫米结果加一个固定偏移 | 用环规或针规量一次已知直径,把软件结果和量具的差值填这里补平 |
| "参考直径(mm)" | 参考直径换算成毫米 | 只读。没导入标定文件时是空白 |
| "本次结果(mm)" | 本次的毫米直径,已经含补偿 | 只读。没跑过时显示"null";判 NG 或未标定时是 0 |
"图形"页 / "结果"页¶
| 页签 | 里面有什么 | 怎么用 |
|---|---|---|
| "图形" | "显示拟合圆""显示拟合用点""显示剔除点""显示卡尺框""显示圆环区域"五个开关 | 调试时全打开:黄色点是参与拟合的点,红色点是被剔掉的点;卡尺框青色 = 点被采用,红色 = 找到边但被剔掉,黄色 = 没找到边 |
| "结果" | 上方是直径(px)、直径(mm)、圆心、RMS / 最大残差、有效点 / 卡尺数;下方是每把卡尺的角度、找到没有、用没用、残差、对比度 | 定"参考直径(px)"就看这里的直径;某个方向总找不到边,就去表里看是哪几把卡尺 |
结果与判定¶
按下面的顺序判,命中一条就停:
- 找到边的卡尺太少,或剔点后参与拟合的点太少(都按"最低有效点比例(%)"算)→ NG。
- 设了"最大 RMS 残差",而本次残差超过它 → NG。
- 实测直径与"参考直径(px)"之差不超过"允许误差(±px)" → PASS,否则 NG。
毫米换算¶
毫米直径 = 实测直径(px)× 像素当量 + "偏差补偿(mm)"。
- 没导入过标定文件时,对外输出的毫米值一律是 0;判 NG 时输出也是 0。要把直径发给 PLC,必须先导入标定文件、把这一项判到 PASS。
- 发给上位机:在树里右键这个圆孔测量检测项 →"设为自定义变量",给它取个变量名,再到通讯配置里把这个变量挂出去。
训练与调试¶
- 画好矩形检测框、点"训练工程",再在"区域"页拖好圆环。
- 点运行按钮,到"结果"页确认找到的点足够多、直径合理;"图形"页打开全部开关,看拟合圆是否压在孔边上。
- 换几件良品(用"打开调试文件夹"过一批实拍图),记下每件的直径,看波动有多大。
- 把中间值填进"参考直径(px)",把波动范围略放宽后填进"允许误差(±px)"。
- 要输出毫米值:导入标定文件,用环规 / 针规量一个已知直径,把差值填进"偏差补偿(mm)"。
- 点"保存工程"。
常见问题¶
| 现象 | 原因 | 处理 |
|---|---|---|
| 倒角孔、沉孔量出来的直径忽大忽小,或整体偏大一圈 | 孔边有两圈边缘(倒角外缘和孔壁内缘),卡尺在两圈之间乱挑 | "边缘选择"用"最接近期望半径",并把圆环的中线摆在要量的那一圈边上;不要用"对比度最强" |
| 正面打光时量出的孔偏小,或者边缘点分成两圈 | 正面光会照到孔壁,孔壁本身也成了一圈边缘 | 通孔优先用背光,孔边最干净;只能正面光时按上一条选边 |
| 找不到圆,直接判 NG | 孔边不在圆环带里,或"对比度阈值"太高 | 在"区域"页把圆环拖到外圆在孔外、内圆在孔内;再降门槛 |
| 某一段弧上总找不到点 | 那一段被遮挡、有缺口或反光 | 缩小"角度范围"避开那一段,或加大"剔除点数上限" |
| 直径每件跳动很大 | 卡尺太窄,噪声直接影响结果;或孔边毛糙 | 加宽"卡尺宽度(px)";适当加大"滤波半宽(px)";加多"卡尺数量" |
| 毫米值一直是 0 | 没导入标定文件,或这一次判了 NG | 先导入卡尺同款的标定 JSON;再把判定调到 PASS |
| 毫米值整体偏了一个固定量 | 找到的是图像上的明暗边缘,和量具的基准不完全一致 | 用环规 / 针规量一次已知直径,把差值填进"偏差补偿(mm)" |
| 提示输入图片不是灰度图 | 圆孔测量只吃灰度图 | 检查检测方案的取像设置 |
| 检测框跟着产品跑偏 | 标签外框定位没跟上 | 回标签外框调定位 |