首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >曲线直线的直线识别算法

曲线直线的直线识别算法
EN

Stack Overflow用户
提问于 2016-01-04 11:31:18
回答 3查看 1.1K关注 0票数 0

我不熟悉我将要在这里描述的问题。很抱歉用错了术语。

我要找的是一个算法(最好是C/C++中的库)来识别曲线上的直线部分。输入曲线使用一组(x,y)形式的有序点来定义。我发现了一些关于Hough变换和一个libray OpenCV的文章。使用OpenCV似乎是可能的,但看起来有点过火。我需要一个非常有效的算法来处理一条简单的曲线。有什么办法吗?谢谢。

更新:参见下面的示例,目标是识别红色部分

正如一些人指出的那样,直线部分可能不一定是直线的,也就是说,在这里我可能需要一些偏差的容忍。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-04 12:17:08

计算连续点O(N)之间的斜率。

如果三个连续点在两对之间的斜率几乎相同,那么这三个点几乎处于同一条线上(减去舍入误差)。因此,要找到直线,只需寻找斜坡几乎相等的连续点的部分。你可以在一次通过点O(N)来做这件事。

如果你有很多点,你可以遇到这样的情况:曲线很小,比你在比较斜率时允许的四舍五入误差小。如果您看到这一点,添加另一个检查,以比较第一个斜率在直线上,以确保您不会复合错误。

如果您需要更全面或更快的东西,请考虑使用OpenCV。

票数 3
EN

Stack Overflow用户

发布于 2016-01-04 13:14:14

假设你连续3个积分-- (x1,y1)(x2,y2)(x3,y3)

计算(y1-y2)*(x3-x2) + (x2-x1)*(y3-y2)

如果这是正的,那么这条曲线在(x2,y2)向左转,如果它是负的,那么它就向右转。如果为零,则曲线在(x2,y2)处是直线的。

要找到真正的直线部分,你可以寻找点,这是零。你可能真的很想找到它从左转到右转的地方。

如果你想要一个实际的衡量它转动的多少,那么除以length(segment1)*length(segment2),结果就是转角的罪恶。

票数 3
EN

Stack Overflow用户

发布于 2016-01-04 13:03:00

我不知道为什么那些日子我和RANSAC有着无尽的爱。我甚至在做饭的时候试着用它。但是,RANSACfit-line模型可能是解决问题的最佳解决方案。因为你有很多的离群点(非直线点)和你有一个好的不稳定性(直线点)。在这里,您可以在C++中找到一个现成的实现。RANSAC-like implementation for arbitrary 2D sets

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34590169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档