博客

← 返回文章列表

用智能手机长焦镜头替代远心光学系统测量锥度的记录

买不起远心镜头。于是用手边智能手机的长焦相机,通过拉开距离来抑制透视误差、逼近平行投影,实测了锥度角。

课题

想用光学手段测量锥度角这类角度尺寸,本来需要的是平行投影,也就是远心光学系统。用普通的中心投影镜头,物体沿景深方向的位置不同,表观角度就会偏移。但工业用远心镜头价格不菲,不是每次验证都能置办的东西。手边有的,只有平时在用的智能手机。

只想看结论的话,请跳转到总结

在这之前还有一段前情:最先尝试用 3D 扫描测量同一个锥度失败了,另文记录

着眼

用长焦镜头拉开拍摄距离,从镜头中心看出去的张角会变小,即使是中心投影,看起来也会接近平行投影。当拍摄距离 L 远大于物体沿景深方向的偏移 Δz 时,透视引起的偏差角

θerrorΔzL

按这一一次近似不断变小。只要挣到足够的 Lθerror 就会收缩。用 iPhone 的长焦相机(3 倍光学,裁切后相当于 15 倍),凭手头的设备就能朝这个方向推进。思路是用「距离」来替代远心镜头所能提供的一部分效果。

方法

实际的设置是:用 iPhone 长焦相机(3 倍光学、裁切至约 15 倍)对目标拍摄多张照片,再用自制的手动辅助工具(Taper Manual Assist)在锥面的两条棱边上各手动指定两个点(A1/A2、B1/B2),由此计算张角。在相同条件下拍摄多张(4 张),以确认重复性。

Taper Manual Assist 的测量界面。在立于窗边的锥形零件剪影上指定 A1/A2、B1/B2 四点和棱边线,右侧面板并列显示手动测量与辅助测量的张角和锥度比

该辅助工具已作为单文件开源项目(MIT)公开。

bakemocho/taper-manual-assist 单文件、纯浏览器运行的锥度角手动测量工具,附带可选的边缘检测辅助功能。 github.com · MIT License

拍摄地点是自家的单间公寓。目标垂直立在窗边书桌的近前侧,从房间中央附近手持手机拍摄。拍摄距离约 2 米。需要说明的是,这一拍摄距离和固定方式是凭记忆的粗略估计,没有当时的测量记录或 EXIF 佐证。未使用三脚架等固定工具,双手持机。选择 iPhone 长焦相机中倍率最高的镜头,变焦到目标充满整个画面为止拍摄。这一操作对应于「3 倍光学 + 裁切至 15 倍」的设置。

另外,这一测量不需要绝对尺度标定(与已知尺寸对应)。张角是在像素坐标上作为两条直线的夹角计算的,锥度比 ΔD/L=2tan(θ/2) 也是仅由角度导出的无量纲量,因此图像上 1 个像素对应多少毫米对结果没有影响。前提条件是像素为正方形,以及锥面的两条棱边大致位于与光轴垂直的同一平面内;这些前提在测量时已作为测量条件记录在导出数据中。

结果

相同条件下 4 次拍摄的汇总如下。

  • 4 次张角平均值:11.543895 deg(最小 11.454754 deg,最大 11.745134 deg,样本标准差 0.135080 deg)
  • 4 次锥度比(ΔD/L)平均值:0.202164(换算为 1:N 平均 1:4.947)
  • 取中位数附近 3 次构成的聚类:张角平均 11.476816 deg,标准差 0.019280 deg,1:N 换算 1:4.976
  • 4 次中有 1 次张角为 11.745134 deg,偏离聚类,作为重复性警告处理(不无条件计入平均)

另外,使用手动辅助 JSON 导出 4 次数据的复测中,稳定核心 2 点的平均值为张角 11.421380 deg、比 0.200003、1:N 换算 1:4.999915(极其接近 1:5)。不过该复测同样是从 4 点中提取 2 点作为「稳定核心」,其余 2 点分别作为偏高、偏低的重复性警告单独记录。

各次实测均给出接近公称 1:5 锥度(张角 11.421186 deg、比 0.2)的数值。我认为诚实的呈现方式不是给出单一的决定性数字,而是作为多次拍摄的离散来展示。

验算

利用公开的镜头规格和拍摄条件,可以事后验证这次测量为何能够成立。

透视误差的估算。把 L=2000mm 代入「着眼」一节的 θerrorΔz/L:棱边平面偏移 Δz=2mm 时为 0.057 deg,即使 5mm 也只有 0.143 deg。只要目标立得竖直、平面对齐在几毫米以内,透视误差就不超过实测离散(0.135 deg)的量级。

距离的收益。同样的 Δz=2mm,如果用广角镜头近距离拍摄(L=300mm),误差是 0.382 deg。退到 2 米,透视误差缩小约 7 倍。「用长焦挣距离」的收益正是这个比值。

离散的来源。张角由两条约 377 px 长的线段方向之差算出,手动点指定抖动 σpx 会使张角波动 2σpx/Lline rad:σpx=0.5px 时为 0.15 deg,1px 时为 0.30 deg。实测的 4 次标准差 0.135 deg 恰好可以用约半个像素的指定抖动解释。也就是说,这一测量中误差的主导因素不是光学系统,而是手动点指定的像素精度。棱边拟合辅助之所以有效,原因正在于此。

景深与衍射。拍摄使用 iPhone 15 Pro 的长焦相机,公称 77 mm 等效、f/2.8(实际焦距约 9 mm,像素间距约 1.1 µm)。即使把容许弥散圆严格取为 2 个像素,2 米处的景深也有约 1.72.4 米的范围,目标几毫米的进深绰绰有余。衍射的 Airy 直径 2.44λN3.8µmλ=550nm)相当于 34 个像素,棱边会有几个像素的模糊,但棱边位置仍可亚像素读取,与上面 0.5 px 的精度并不矛盾。另外,「15 倍等效」中光学只占 3 倍,其余是裁切。裁切只是截取视角,不改变角分辨率;决定分辨率的是像素间距和上述模糊。

局限

这不是真正的远心测量。它只是用中心投影镜头、靠拉开距离把透视误差压到实用上可以忽略的水平的伪平行投影。手动辅助工具的棱边点指定,也只是对投影后 2D 图像上的角度读数,而不是对照 CAD 数据或金属加工校准夹具的测量。因此,这一方法适合「买不起远心镜头时的筛查」,不适合公差最终判定或出厂检验这类需要计量级精度的场合。

总结

「没有测量仪器」不构成放弃测量的理由。即使没有远心镜头这样的专用设备,回到光学的基本原理,用长焦挣距离,再用手边的手机和自制的小辅助工具向平行投影逼近,就能以够用的精度对锥度角做筛查。这是诚明堂平时践行的「理解原理、用手边之物替代专用设备」设计思路在测量领域的一个实例。

这样使用智能手机并非一时的奇技淫巧。Apple 自己就在 Apple TV 的 Color Balance 功能中,把 iPhone 的 True Depth 传感器和环境光传感器当作「测量电视屏幕实际发光」的测量仪器来用。厂商亲自把这台在产线上逐一校准过传感器的手机,转用为光学测量仪器。

再往前追溯,学生时代参加 CanSat 大赛(用易拉罐大小的模拟卫星竞技的比赛)时,就见过别的学校直接把 Android 手机装上机体当控制计算机。把整套传感器和高性能处理器紧凑而廉价地集成在一起的工具,别无他选。这次的锥度测量不过是其应用之一,沿着这条路线想尝试的事情还有很多。