随笔·阅读约 1 分钟·
把整条铁路当成扫描仪:一个 4 万像素宽摄影项目的硬核之路

把整条铁路当成扫描仪:一个 4 万像素宽摄影项目的硬核之路

有人用工业线阵相机在火车、轮渡上拍出了 56000 像素宽的全景照片——原理是把整个铁路网络当成一台平板扫描仪。这篇文章拆解他踩过的每一个坑:速度测量、串口丢数据、后处理地狱。

原文来源:Philo's Website — Using the railway network as a flatbed scanner — 作者用工业线阵相机把铁路网络当成巨型平板扫描仪,拍出了 56000 像素宽的连续全景照片。

先看结论:这张图长什么样?旧金山到奥克兰的轮渡上拍的一张照片,56894×2048 像素,灰度图。不是拼接几十张照片拼出来的——是一次曝光扫出来的完整画面,就像扫描仪扫过整条航线。

这个想法本身就很迷人:把移动的火车当作扫描仪的"扫描头",铁路沿线就是纸面,窗外不断掠过的风景被一根极细的光条逐行记录,最终拼成一张绵延几公里的全景。作者 Philo 在 EMFcamp 2026 上做了演讲,全文 4600 词,把从零到一的整个过程毫无保留地写了出来。

原理:线阵相机与"缝扫描"

普通相机是"面阵"——一次曝光拍一整块像素。线阵相机只有一根线(1×2048 像素),每秒读近 19000 次。当它被装在一个移动的交通工具上,指向窗外,每根线拍到的是那一瞬间的垂直切面。把足够多的线按时间顺序排在一起,就得到一张完整的宽幅图。

这就是缝扫描(slit scan)技术,1990 年代的数字扫描后背就是这么工作的:传感器还造不出大尺寸面阵,就用一根移动的像素线慢慢"扫"过画面。Philo 的灵感来自一个视频——有人把中画幅相机改装成扫描后背。他突发奇想:"如果整个相机移动、而景物不动呢?"于是有了这个项目。

—— 广告 ——

相机与装备:二手市场的胜利

相机是 Basler ruL2048-19gm,一个 2013 年发布的工业 GigE 线阵相机,本意是盯着高速传送带检测产品。全新的最低配型号约 700 美元,作者在 eBay 上花十分之一的价钱买到。它通过千兆以太网连电脑,1×2048 像素传感器每秒读 19000 次。

麻烦在于它"以速度换光量"——最短曝光 1/100 秒,意味着需要非常强的光线。只能白天拍,大部分车站和隧道都拍不了。

其他装备:一个 6 自由度加速度计/陀螺仪(测速度用)、一个 GPS(在波士顿地铁里基本收不到信号)、一个 SAMD21 单片机(把传感器数据转给笔记本)、一个 Vivitar 28mm f/2.8 老镜头转接 C 口。整体用 USB-C 充电宝供电,靠朋友的 3D 打印机做了个外壳。作者吐槽第一版外壳完全忘了"制造公差"这回事,装不进去。

最大的坑:速度测量

缝扫描的核心难点是:你只能隔固定时间取一根线,但景物在画面里移动的速度是不固定的。火车加速、减速、过弯,如果按等时间间隔取线,图像就会拉伸或压缩变形。

作者最初天真地以为"随便量量速度就行",结果发现速度的微小变化都会在图像里造成明显畸变。加速度计不直接测速度,要积分;积分又依赖初始值——他只能假设火车在车站出发时速度为 0,否则就得靠肉眼猜一个"看起来对"的初值。

更大的麻烦:相机每秒抓约 4000 根线,加速度计采样频率只有它的四分之一,所以好几根线要共享同一个速度值。GPS 在大多数波士顿列车上完全没信号,有信号时也只有每秒 10 次,覆盖 400 根线。

后处理地狱

"捕获图像和加速度数据,和让图像真正好看相比,反而是简单的那部分。"

相机每秒产出 4000 根线,远超需要,得选哪些线真正有用。取线太少,图像被压缩;跳线太快,水线处会出现明显的断层。作者最终用加速度计测出的速度来决定取线节奏,但这一步坑最多:

串口通信是重灾区。第一版把浮点数转成字符串通过串口发,结果单片机被字符串转换消耗殆尽。改用原始二进制后,又遇到数据帧同步问题——加速度计数据的起始序列和 GPS 的 NMEA 语句起始序列可能互相撞车。最惨的一次,串口缓冲满了,丢了半秒数据,图像上留下一道永恒的"缝"——"在相机时间里,半秒是永恒。"

预览 GUI 也折腾了很久:OpenCV 的 highgui 每帧强制 1ms 延迟,会漏掉 4 根线;最后用 Dear ImGui + GLFW 自己写了一个。作者形容在多伦多熬夜写 GUI,"旋转图像感觉像是计算机科学里最难的问题"。

为什么这个故事值得读

这个项目没有商业价值,没有产品化可能,但它展现了硬件黑客最迷人的一面:用便宜二手货 + 开源软件 + 大量试错,做出一个"本不该存在"的东西。

几个值得记住的工程智慧:

先验证核心假设,再投入重装备。 作者在沙发上用手机推着椅子做实验,先证明"移动扫描"可行,才去买 700 美元的工业相机。

每个失败都有明确的技术归因。 图像变形 → 速度测量不准;串口丢数据 → 缓冲没及时 flush;GUI 卡顿 → 1ms 强制延迟。所有问题都能定位到具体机制,没有玄学。

接受"够用就行"。 蓝色美纹纸贴传感器、老镜头转接、三脚架架着充电宝和一堆线缆——这玩意儿从外观到实现都充满了临时的味道,但每一步都跑通了。

在 AI 时代,动手做一件"软件永远替代不了"的硬件项目,本身就是在守住工程师最原始的乐趣。Philo 的代码全部开源(捕获端后处理),想看 56000 像素大图的可以去画廊拖拽缩放——那感觉就像站在扫描仪上俯瞰整条海岸线。

分享到
微博Twitter

© 2026 四月

原文链接:https://www.aprilzz.com/ramble/railway-flatbed-scanner