Как применить размытие по Гауссу к многоугольнику, нарисованному внутри большего изображения - PullRequest
0 голосов
/ 17 февраля 2019

Я хочу применить размытие по Гауссу к координатам пикселей многоугольника внутри большого изображения, а затем сделать что-то с размытым многоугольником по тем же координатам.Функция draw polygon , существующая в skimage, дает мне координаты непосредственно изображения, а не маски.В идеале я хочу применить фильтр к самой маске, но функция draw polygon не дает мне маску.

img = np.zeros((10, 10), dtype=np.uint8)
r = np.array([1, 2, 8, 1])
c = np.array([1, 7, 4, 1])
rr, cc = polygon(r, c)
# Apply Gaussian blur here on the locations specified by the polygon
img[rr, cc] = 1 # or do something else on the blurred positions.

Я не могу, очевидно, сначала запустить размытие по Гауссу на изображении, потому что если язапустил размытие по Гауссу на rr, cc, я получил бы десятичные значения и не смог бы получить доступ к тому же многоугольнику при индексации.Как мне решить проблему?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Вот как я это решил.

mask = np.zeros_like(img)
mask[rr, cc] = 1  # or anything else on the blurred positions
mask = filters.gaussian(mask, sigma=3)
0 голосов
/ 18 февраля 2019

SciPy's Размытие по Гауссу не принимает маску в качестве входных данных, поэтому вам нужно размыть все изображение, а затем скопировать значения только для этого многоугольника.В этом случае вы согласны с индексами:

from skimage import filters

img_blurred = filters.gaussian(img)
img_poly_blurred = np.copy(img)  # don't modify img in-place unless you're sure!
img_poly_blurred[rr, cc] = img_blurred[rr, cc]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...