2013-10-26 4 views
1

У меня есть следующие участки контура:Extract конкретные пути от Matplotlib контура участка

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

Если возможно, я хотел бы пары (кх, ку) точек, которые составляют эти удлиненные круги, без любой из точек других артефактов.

Я видел, что есть способ извлечь значения точек из контура по линиям this question, однако, это дает мне набор (2000,2000) точек, которые я не знаю, как фильтровать. Я думал, может быть, что-то можно сделать на основе путей из контурных сюжетов?

Обратите внимание, что на самом деле можно увидеть, где фигуры окружности берутся в строке из 6 графиков, но проблема в том, что для создания 2 меньших внутренних окружностей необходимо объединить подзаголовки 2,3,4 и 5 . Для больших наружных, это проще, так как они по сравнению хорошо разделены в сюжетных 5 и 6.

ответ

2

в то время как вы набор точек извлеченных из контуров, попробуйте RANSAC. Реализована реализация в C# для извлечения кругов из шумных точек here. Выполняется общая и простая реализация Pythonhere.

Вы также можете попробовать Least Square Circle Fitting, для которого приведен пример в Pythonhere.

Удачи.

Смежные вопросы