Как избавиться от посторонних точек вне замкнутой кривой с помощью Python - PullRequest
4 голосов
/ 06 апреля 2019

Я пытаюсь «уменьшить» размер внешней границы (красного цвета), которая представляет собой набор пикселей по краю изображения. Я уже сократил границу, используя нормальные векторы, и у меня есть набор точек, которые находятся на определенном расстоянии внутри внешней границы. Однако есть много моментов, от которых я мог бы избавиться, чтобы сделать внутреннюю границу (синим) более гладкой. Итак, как мне избавиться от посторонних точек?

enter image description here

Я попытался преобразовать все в полярные координаты, а затем взять точку, ближайшую к центру изображения, для каждого интервала в pi / 60 радиан от 0 до 2pi. Тем не менее, я понял, что это не сработает для чего-то вроде формы бумеранга, где было бы две точки, которые я хотел бы сохранить в интервале pi / 60.

polarShrunk - набор точек сжатия, преобразованных в полярные координаты. cell_img - это объект с методом distanceBetween, который находит расстояние между двумя точками, и методом findMoments, который находит «центр масс» изображения, когда оно преобразовано в черно-белое изображение. pol2cart преобразует полярные координаты в декартовы

i = 0
smoothArray = []
for x in range(120):
    i += 1
    theta1 = (i - 1)*np.pi/60
    theta2 = i*np.pi/60
    simAnglePoints = []
    for y in polarShrunk:
        if (y[0] < theta2) and (y[1] > theta1):
            simAnglePoints.append(y)
    closestPoint = np.array([10000, 10000])
    for z in np.array(simAnglePoints):
        if cell_img.distanceBetween(np.array(cell_img.pol2cart(z)), cell_img.findMoments) < cell_img.distanceBetween(closestPoint, cell_img.findMoments):
            closestPoint = z
    smoothArray.append(closestPoint)

Мне нужны только точки, которые следуют за черной линией, которую я нарисовал поверх картинки, и чтобы избавиться от всех других точек из массива polarShrunk.

enter image description here

Любая помощь будет принята с благодарностью! Мне действительно нужен только способ решения этой проблемы, и я хотел бы выяснить, как реализовать этот подход в Python самостоятельно.

...