Python使用均方根法拟合多条直线

Python使用均方根法拟合多条直线,python,opencv,Python,Opencv,我有一个几乎是多条直线的图像。我想用均方根法拟合这些直线上的点。然而,我想多行适合这是显而易见的从下图。我曾经尝试过Hough变换和python中的fitline方法,但是它们给了我一些倾斜的线条,这就是为什么我认为我会选择RMS方法。我知道如何将一条直线拟合到各点,但是否有任何方法可以根据需要同时拟合3条直线 图片: 除非目标线非常接近平行,否则按坡度进行聚类将有效;在这种情况下,您可能需要进行更多的处理,例如对每个线段进行斜率/截距对,并对这些结果进行聚类。在任何情况下,都没有必要重复Hou

我有一个几乎是多条直线的图像。我想用均方根法拟合这些直线上的点。然而,我想多行适合这是显而易见的从下图。我曾经尝试过Hough变换和python中的fitline方法,但是它们给了我一些倾斜的线条,这就是为什么我认为我会选择RMS方法。我知道如何将一条直线拟合到各点,但是否有任何方法可以根据需要同时拟合3条直线

图片:

除非目标线非常接近平行,否则按坡度进行聚类将有效;在这种情况下,您可能需要进行更多的处理,例如对每个线段进行斜率/截距对,并对这些结果进行聚类。在任何情况下,都没有必要重复HoughLines

考虑到你有平行的,分离的线,我建议你做一些预处理。您是否有一个现成的方法,允许您近似计算线段的端点?如果是这样的话,试着做一个简单的两点公式来获得这些线的(斜率、截距)对,并对这些对进行聚类。这将整齐地将线段排序为适当的线性集


如果没有识别出这些片段,可以先尝试使用光谱聚类算法来识别它们;选择一个密度和连通性都很强的;你并不真正关心间隙敏感性。

除非你有非常接近平行的目标线,否则按斜率进行聚类是可行的;在这种情况下,您可能需要进行更多的处理,例如对每个线段进行斜率/截距对,并对这些结果进行聚类。在任何情况下,都没有必要重复HoughLines

考虑到你有平行的,分离的线,我建议你做一些预处理。您是否有一个现成的方法,允许您近似计算线段的端点?如果是这样的话,试着做一个简单的两点公式来获得这些线的(斜率、截距)对,并对这些对进行聚类。这将整齐地将线段排序为适当的线性集


如果没有识别出这些片段,可以先尝试使用光谱聚类算法来识别它们;选择一个密度和连通性都很强的;你并不真正关心间隙灵敏度。

快速想法:1)HoughLines 2)按坡度或距离对线进行聚类(比如k-means)3)对于每个聚类:a)将所有线绘制成一个空白遮罩b)将其放大一点c)对输入应用遮罩以获得仅此聚类的原始像素d)findNonZero e)RMSNice!上面的图片实际上是由高斯模糊后的霍夫线输出。你认为你的方法会直接在这些直线上工作而不是再次应用Hough变换吗?是的,它应该工作。我只是写了一个类似的回复。除非有非常接近平行的目标线,否则按坡度进行聚类是可行的;在这种情况下,您可能需要进行更多的处理,例如对每个线段进行斜率/截距对,并对这些结果进行聚类。在任何情况下,都没有必要重复HoughLines。@Sibi哦,我没有意识到这一点。在这种情况下,可能只是集群,然后在端点上执行RMS。@Prune不幸的是,在一些图像中,我有平行但相距很远的线条。我认为如果我考虑斜率和距离的话,k-均值应该工作,但是计算线之间的距离可能会变得单调乏味。你对聚类还有什么其他想法吗?快速想法:1)HoughLines 2)按坡度和可能的距离聚类(比如k-means)线条3)对于每个聚类:a)将所有线条绘制成一个空白遮罩b)将其放大一点c)对输入应用遮罩以获得仅此聚类的原始像素d)findNonZero e)RMSNice!上面的图片实际上是由高斯模糊后的霍夫线输出。你认为你的方法会直接在这些直线上工作而不是再次应用Hough变换吗?是的,它应该工作。我只是写了一个类似的回复。除非有非常接近平行的目标线,否则按坡度进行聚类是可行的;在这种情况下,您可能需要进行更多的处理,例如对每个线段进行斜率/截距对,并对这些结果进行聚类。在任何情况下,都没有必要重复HoughLines。@Sibi哦,我没有意识到这一点。在这种情况下,可能只是集群,然后在端点上执行RMS。@Prune不幸的是,在一些图像中,我有平行但相距很远的线条。我认为如果我考虑斜率和距离的话,k-均值应该工作,但是计算线之间的距离可能会变得单调乏味。您对集群还有其他想法吗?