Как мне соединить прерывистые кривые в matplotlab, scipy и т. д.

У меня есть небольшая проблема, когда я беру контур изображения, я получаю эту фигуру:

Как видите, я могу извлечь контур, но как только я извлеку путь, он оставит эти странные секущие, которые будут пересекать изображение потому что на кривой есть 2 прерывистые области. Интересно, есть ли способ отключить прерывистые строки или мой код извлечения пути неверен

import matplotlib.pyplot as plt
import numpy as np

def contourPath(img, width, height): 
    x         = np.arange(0,width)
    y         = np.arange(height,0,-1)
    X, Y      = np.meshgrid(x,y)
    plot      = plt.contour(X,Y,img, [0])
    pathList  = plot.collections[0].get_paths()
    x, y      = [], []
    for i in range(0, len(pathList)):
        iterPath = pathList[i].iter_segments()
        for point in iterPath:
            pt  = np.rint(point[0])
            x.append(pt[0])
            y.append(pt[1])
    X         =  np.hstack(x)
    Y         =  np.hstack(y)
    return np.dstack((X,Y))[0]

Спасибо за ваше время

для пользователя 545424 Вот думаю. Функция контура Matplotlib работает правильно, поскольку на изображении есть два прерывистых пятна, которые вызвали это небольшое событие.

Я узнал, что эти секущие линии вызваны scypi, но возникает еще одна проблема, связанная с тем, как библиотеки взаимодействуют с контурными точками.

Хорошо, я считаю, что можно замаскировать проблему, найдя путь и интерполировав его. . Но мне нравится избегать повторного поиска пути, так как проблема коммивояжёров не очень хороша на моём компьютере.

У вас есть предложения?

enter image description here

6
задан user1462442 23 June 2012 в 03:34
поделиться