2013-10-26 105 views
1

我有以下的等高线图:提取特定的路径

fig, axes = plt.subplots(1,6, figsize=(18,3)) 

for idx in range(6): 
    axes[idx].contour(KX[kxl:kxr,kxl:kxr],KY[kxl:kxr,kxl:kxr],eigs[kxl:kxr,kxl:kxr,idx].real, levels=[0]) 
    axes[idx].set_xlabel(x_label_k) 

axes[0].set_ylabel(y_label_k) 

6 eigenvalue contours

重叠它们下面的图片结果:

fig, ax = plt.subplots(1,1, figsize=(4,4)) 

for idx in range(6): 
    ax.contour(KX[kxl:kxr,kxl:kxr],KY[kxl:kxr,kxl:kxr],eigs[kxl:kxr,kxl:kxr,idx].real, levels=[0]) 

ax.set_xlabel(x_label_k) 
ax.set_ylabel(y_label_k) 

overlapped contours

从上面的图片,我对绘图感兴趣只是4“圈状”被如下所示的编辑后的图像中的形状:

edited circles

如果可能的话,我想对(KX,KY)点组成这些细长圈,而不来自其他工件的任何点。

我已经看到,有一种方法可以沿着this question的线从等值线图中提取点值,但是,这给我一组(2000,2000)点,我不知道如何过滤。我在想,也许可以根据轮廓图的路径完成一些事情?

请注意,实际上可以看到6个图中的圆形起始位置,但问题是为了组成2个较小的内部圆,必须组合子图2,3,4和5 。对于较大的外部的,它更简单,因为它们是相对的孔中副区5分离和6

回答

2

尽管已经设置了一个从轮廓提取,尝试RANSAC。在C#中从嘈杂点提取圆圈的实现给出here。一般和简单的Python实现给出here

您也可以尝试Least Square Circle Fitting,在Python中给出的例子为here

祝你好运。