Маска линии в PIL

У меня есть эта функция, которая рисует кривую Безье:

from random import randint
from PIL import Image

def plot_curve(image, px, py, steps=1000, color=(0, 0, 0)):
    def B(coord, i, j, t):
        if j == 0:
            return coord[i]
        return (B(coord, i, j - 1, t) * (1 - t) +
                B(coord, i + 1, j - 1, t) * t)

    img = image.load()
    for k in range(steps):
        t = float(k) / (steps - 1)
        x = int(B(px, 0, n - 1, t))
        y = int(B(py, 0, n - 1, t))
        try:
            img[x, y] = color
        except IndexError:
            pass



n = 4

for i in range(0,10):
    coord_x = [randint(0, 999), randint(0, 999), randint(0, 999), randint(0, 999)]
    coord_y = [randint(0, 999), randint(0, 999), randint(0, 999), randint(0, 999)]

    image = Image.new("RGBA", (1000, 1000))

    plot_curve(image, coord_x, coord_y)
    name = '{:03d}'.format(i) + "_double_curve" + ".png"
    image.save("./train/" + name)

как мне вернуть маску координат этой линии, скажем, 10 пикселей с каждой стороны? Я пытался сделать ту же кривую Безье, но с более толстой линией, но я не понимаю, как установить ширину линии, а затем сохранить координаты?


person asparamancer    schedule 09.02.2020    source источник
comment
Каков ожидаемый результат для некоторого (неслучайного) ввода? Но я думаю, что нет математического решения; вычислить точки слева и справа под прямым углом для каждой точки на сегменте линии.   -  person Jongware    schedule 09.02.2020
comment
Как и в ожидаемом выводе самой функции? Он рисует кривую Безье.   -  person asparamancer    schedule 09.02.2020
comment
Нет, я имею в виду формат вашей маски координат.   -  person Jongware    schedule 09.02.2020
comment
Что такое маска линии?   -  person martineau    schedule 09.02.2020
comment
Как выделить его, например. github.com/matterport/Mask_RCNN — маски представляют собой цветные многоугольники над интересующими объектами. Если вы видите ответ на этот вопрос: stackoverflow.com/questions/32504246/ белая область будет по существу похожа на маску, и я думаю, что мне нужно сгенерировать координаты   -  person asparamancer    schedule 09.02.2020
comment
Если смещение кривой уже не встроено, это невероятно сложная проблема, и в отличие от линий или кругов кривая Безье не может быть компенсирована второй одиночной кривой Безье. На самом деле вычисление контура смещения кривой Безье требует огромной работы, поэтому я бы посоветовал поискать в Интернете библиотеку Python, которая сделает это за вас, потому что кто-то, должно быть, уже сделал ее.   -  person Mike 'Pomax' Kamermans    schedule 10.02.2020
comment
Имейте в виду, что если вам просто нужны координаты, вам не нужно на самом деле получать кривые смещения, вам просто нужна исходная кривая. а затем пройтись по этой кривой, смещая каждую точку на кривой вдоль нормали кривой для этой точки. См. ссылку выше (раздел о нормалях) о том, как это сделать. Это довольно легко.   -  person Mike 'Pomax' Kamermans    schedule 10.02.2020
comment
Спасибо @Mike'Pomax'Kamermans, да, я понял, что слишком много думал об этом. И написал смещение, делает то, что мне нужно сейчас.   -  person asparamancer    schedule 11.02.2020