3

假设我有这样的激光扫描位图,上面有一条来自激光的红线,找到该线中心的正确方法是什么?要么将它的坐标存储在一个数组中,要么只在它上面画一条思考线。

你会建议什么方法?最好有一个能够平滑该线的选项。

在此处输入图像描述
(来源:gyazo.com

谢谢

4

3 回答 3

3

我建议

  • 将图像转换为单色
  • 使用“图像阈值”将图像转换为黑白
  • 将图像分割成小部分
  • 对于不是全黑的每个部分,计算霍夫变换和精细逼近段
  • 将这些段合并成链,然后平滑它们(例如使用 Catmull-Rom 样条)

但是,这不是唯一可能的方法,其中有很多

于 2013-11-01T19:02:08.640 回答
1

我会用蠕虫来解决这个问题。让你的蠕虫从一个像素开始,让它沿着直线移动。每次您检测到任何维度的方向变化时,您都会放置一个点。然后通过您的点拟合样条曲线。也将开始和结束位置添加为点。

重要问题:

  • 您需要维护已访问过的像素,以便当蠕虫完成时您可以检测是否需要在剩下的内容上开始新的。
  • 您需要在您的蠕虫中保持一个速度矢量,并根据这将更紧密地继续您当前所在的线路,并根据可能的前向选择权重。这是因为...
  • 您需要处理拓扑更改,其中有两条或多条线与同一点相交。或将行中的拆分为两部分。

为了拟合样条曲线本身,请查看NuGet 上的 Numerics

于 2013-11-01T19:08:31.750 回答
1

我的建议是:

  • 您逐行进行,保存每行中第一次和最后一次出现红色像素的坐标。
  • 然后,在每行的每两个坐标之间或每两个坐标的中间像素之间拉伸一条线。
于 2013-11-01T19:28:42.050 回答