如何在图像中检测倾斜的线条?

3
我有一个关于线检测的问题。我有一张图像(实际上是边缘图像/边缘地图),其中包含一些水平、垂直和倾斜的线条。我想从该图像中仅找到倾斜的线条。由于我没有任何关于这些线条的信息,因此必须搜索整个边缘地图以查找坐标(或任何其他相关信息)。现在有人能帮我解决这个问题吗?
非常感谢。

1
我认为cv::HoughLinesP http://opencv.willowgarage.com/documentation/cpp/imgproc_feature_detection.html#index-8169 是一个很好的起点。 - Eric Fortis
查看这些 SO 问题,以获取一个概念:标签:MATLAB hough - Amro
非常感谢大家为解决我的问题做出的贡献 :) - Developer
这是我发现的一个关于使用Radon变换估计图像中线条存在角度的好文档。 - Autonomous
3个回答

1

1

谢谢,虽然我还没有实现,但这很有道理 :) - Developer

0
我最近不得不编写一个球体检测算法,该算法也基于边缘检测。你说你对倾斜线条一无所知,这是有问题的。例如,您可以过滤掉属于直线的任何边缘点,然后使用算法来分组属于倾斜线的点。然后,您可以使用线性方程来找到倾斜线的特征。
希望这有所帮助。

为了检测垂直线,我只需在边缘图上垂直搜索并开始寻找白色像素,从第一个检测到的白色像素开始一直搜索到最后一个白色像素,然后第一个像素成为该线的起点,最后一个像素成为该线的终点。因此,我以这种方式找到了所有垂直线,对于水平线,我在边缘图上进行水平搜索。希望这有意义。 现在我无法找到一种技术来搜索边缘图以检测倾斜线。您能否指导我如何做到这一点?我只是在寻找一种实现我的算法的技术。 - Developer
就像我之前说的,你可以丢弃垂直和水平线。然后你会剩下属于斜线的像素。接下来的步骤是将这些点聚集在一起。你该怎么做呢?既然它们是线条,你可以开始搜索不属于垂直或水平线的相邻像素。你应该设定一些限制,例如在1像素或0.5像素的半径内进行搜索。如果你找到了匹配的像素,你可以开始形成一条线,并从该线的边缘尝试延伸它,直到没有更多的“单独”像素为止。 - FailedDev
我如何区分像素属于垂直、水平还是倾斜线? - Developer
假设你有一个像素a。搜索相邻的像素并尝试形成一条倾斜的线。如果像素a上下左右+-1的像素是其他白色像素,则它们属于垂直和水平线(我猜)。你的线相关吗?还是随机放置的? - FailedDev
它们是随机的。 非常感谢您的回复。 我找到了解决方案,非常简单;) 获取第一个白色像素后,如果遇到下一个白色像素,则同时增加x和y坐标,再次增加,直到获得最后一个白色像素。如果没有,则减少第一个坐标(例如“x”)并增加第二个坐标(例如“y”),如果遇到白色像素,则继续减少x并增加y坐标,直到最后一个白色像素为止(这样可以检测左斜线和右斜线)。否则,只需忽略该白色像素,因为它不属于任何行。 如果有其他好的想法,将不胜感激,因为这很慢。 - Developer
问题在于,如果您对斜线没有任何了解,您将不得不缓慢地扫描整个图像。如果您知道倾斜因子,您可以将点映射到矩阵中,然后解决一个线性方程组。按照系统的规定有效的点当然会属于斜线。 - FailedDev

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