仅在边缘应用高斯滤波器
Apply gaussian filter only on the edge
我有一个二进制掩码,如何在掩码的边界上应用标准单位偏差的高斯核来平滑边界?
在蒙版上应用高斯模糊滤镜时,它只会模糊蒙版的边界。
示例:
import cv2
orig_img = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE) # Read image as Grayscale.
blur = cv2.GaussianBlur(orig_img, (15, 15), 0)
结果:
如果您想保持蒙版不变,并且只平滑蒙版周围的像素,我建议使用少量迭代,并取最大值。
获取原始图像和模糊图像之间的最大值,确保原始蒙版像素保持不变,因为它们的值为 255(可能的最大值)。
这是一个代码示例:
import cv2
orig_img = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE) # Read image as Grayscale.
img = orig_img.copy()
for i in range(10):
blur = cv2.GaussianBlur(img, (15, 15), 0)
img = cv2.max(blur, img) # Getting the maximum in order to mask the margins brighter
blur = cv2.max(orig_img, img) # Getting the maximum for keeping the original mask pixels unmodified.
cv2.imshow('blur', blur)
cv2.waitKey()
cv2.destroyAllWindows()
结果:
另一种选择是在GaussianBlur
之前使用形态膨胀:
import cv2
orig_img = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE) # Read image as Grayscale.
img = cv2.dilate(orig_img, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7)))
blur = cv2.GaussianBlur(img, (15, 15), 0)
blur = cv2.max(blur, orig_img) # Getting the maximum for keeping the original mask pixels unmodified.
cv2.imshow('blur', blur)
cv2.waitKey()
cv2.destroyAllWindows()
结果:
我有一个二进制掩码,如何在掩码的边界上应用标准单位偏差的高斯核来平滑边界?
在蒙版上应用高斯模糊滤镜时,它只会模糊蒙版的边界。
示例:
import cv2
orig_img = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE) # Read image as Grayscale.
blur = cv2.GaussianBlur(orig_img, (15, 15), 0)
结果:
如果您想保持蒙版不变,并且只平滑蒙版周围的像素,我建议使用少量迭代,并取最大值。
获取原始图像和模糊图像之间的最大值,确保原始蒙版像素保持不变,因为它们的值为 255(可能的最大值)。
这是一个代码示例:
import cv2
orig_img = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE) # Read image as Grayscale.
img = orig_img.copy()
for i in range(10):
blur = cv2.GaussianBlur(img, (15, 15), 0)
img = cv2.max(blur, img) # Getting the maximum in order to mask the margins brighter
blur = cv2.max(orig_img, img) # Getting the maximum for keeping the original mask pixels unmodified.
cv2.imshow('blur', blur)
cv2.waitKey()
cv2.destroyAllWindows()
结果:
另一种选择是在GaussianBlur
之前使用形态膨胀:
import cv2
orig_img = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE) # Read image as Grayscale.
img = cv2.dilate(orig_img, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7)))
blur = cv2.GaussianBlur(img, (15, 15), 0)
blur = cv2.max(blur, orig_img) # Getting the maximum for keeping the original mask pixels unmodified.
cv2.imshow('blur', blur)
cv2.waitKey()
cv2.destroyAllWindows()
结果: