Я пытаюсь «уменьшить» размер внешней границы (красного цвета), которая представляет собой набор пикселей по краю изображения. Я уже сократил границу, используя нормальные векторы, и у меня есть набор точек, которые находятся на определенном расстоянии внутри внешней границы. Однако есть много моментов, от которых я мог бы избавиться, чтобы сделать внутреннюю границу (синим) более гладкой. Итак, как мне избавиться от посторонних точек?
Я попытался преобразовать все в полярные координаты, а затем взять точку, ближайшую к центру изображения, для каждого интервала в 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.
Любая помощь будет принята с благодарностью! Мне действительно нужен только способ решения этой проблемы, и я хотел бы выяснить, как реализовать этот подход в Python самостоятельно.