如何在较大图像内绘制的多边形上应用高斯模糊
How to apply Gaussian blur on a polygon drawn inside a larger image
我想对较大图像内多边形的像素坐标应用高斯模糊,然后在同一坐标上对模糊多边形进行一些操作。 skimage
中存在的 draw polygon 函数直接给我图像的坐标,而不是蒙版。理想情况下,我想在蒙版本身上应用滤镜,但 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
上的高斯模糊,我会得到十进制值,而不会能够通过索引访问相同的多边形。我该如何解决这个问题?
SciPy 的 Gaussian blur 不将蒙版作为输入,因此您需要模糊整个图像,然后仅复制该多边形的值。在那种情况下,您可以使用索引:
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]
我是这样解决的。
mask = np.zeros_like(img)
mask[rr, cc] = 1 # or anything else on the blurred positions
mask = filters.gaussian(mask, sigma=3)
我想对较大图像内多边形的像素坐标应用高斯模糊,然后在同一坐标上对模糊多边形进行一些操作。 skimage
中存在的 draw polygon 函数直接给我图像的坐标,而不是蒙版。理想情况下,我想在蒙版本身上应用滤镜,但 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
上的高斯模糊,我会得到十进制值,而不会能够通过索引访问相同的多边形。我该如何解决这个问题?
SciPy 的 Gaussian blur 不将蒙版作为输入,因此您需要模糊整个图像,然后仅复制该多边形的值。在那种情况下,您可以使用索引:
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]
我是这样解决的。
mask = np.zeros_like(img)
mask[rr, cc] = 1 # or anything else on the blurred positions
mask = filters.gaussian(mask, sigma=3)