在Matlab中检测不规则线条/折线

3
我还很新于Matlab和图像处理。 我想要实现的是在图像中检测不规则线条。例如,在以下图像中,有4个折线:

enter image description here

我的目标是获得一组表示这些4个不规则线条/多边形线的像素点,就像这样:

enter image description here

我已经阅读了一些主题,如边缘检测(Canny)和霍夫线检测。我应用了它们,但我不知道如何为我的目的调整它们,并且我不确定我是否正在向正确的方向发展。 如果您可以给出一些建议或指向有用的资源/文章/算法/库,我将不胜感激。
-------------------编辑------------------------------------

谢谢您提供的所有信息,我觉得它让我朝着正确的方向前进。我的问题比你想象的要简单。我不是试图检测线条是否不规则,而只是获取检测到的线条的像素。在Matlab中,我按照以下路线进行操作:

rgb2gray -> 2bw -> bwmorgh(骨架化) -> bwconncomp(获取连接的组件)

目前看来,结果对我很好,谢谢。


我猜这并不总是清白背景上的黑色线条,对吧? - Benoit_11
嗨,实际问题会更加复杂。它涉及在纸质地图上检测线条。但目前我正在尝试从这个简单的场景开始。如果我能先解决这个问题,我会非常高兴。 - GingerJim
我认为你也可以在MATLAB中使用regionprops中的eccentricity。如果离心率为1,则它是一条直线。 - Autonomous
请问一旦你解决了这个问题,能否把你最终采用的解决方案发表出来?很有意思看看你最终选择的解决方案是什么。 - kkuilla
1个回答

3
对于这种情况,在简单的二进制阈值处理后,骨架化图像,标记线区域,使用它们的端点创建直线(骨架的端点只有1个邻居)。
找到从骨架到该线的最大距离,如果它高于某个阈值(比如说,线长/dmax < 20),则该骨架是一个不规则线条。

http://opencv-code.com/quick-tips/implementation-of-guo-hall-thinning-algorithm/

dmax

针对纸质地图场景

我猜你想要找到特定的道路或边界。至少它们有不同的颜色和宽度,你可能需要进行大量平滑处理,并在之后应用颜色阈值。但仍需处理成千上万个不同的地图才能找到通用算法。


非常感谢您的答复,特别是指引我使用细化/骨架化技术。 - GingerJim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接