求可快速移除单像素开放线条且保留闭合线条的卷积核集
需求:高效移除单像素开放线条并保留闭合线条的卷积核集
我开发了一套卷积核,在由0(黑色)和1(白色)组成的二值图像上应用2-3次后,可可靠移除孤立及突出的白点。现有实现代码如下:
import numpy as np from PIL import Image from scipy.ndimage import convolve kernels = [ np.array([[1, 1, 1], [-4, 1, -4], [-4, -4, -4]]), np.array([[-4, -4, 1], [-4, 1, 1], [-4, -4, 1]]), np.array([[-4, -4, -4], [-4, 1, -4], [1, 1, 1]]), np.array([[1, -4, -4], [1, 1, -4], [1, -4, -4]]) ] image_path = 'path/to/image/file' with Image.open(image_path) as image: if image.mode == 'RGBA': image = image.convert('RGB') image_np = np.array(image) mask = np.isin(image_np, [200, 200, 200]).all(axis=-1) binary_mask = np.zeros(image_np.shape[:2], dtype=int) binary_mask[mask] = 1 for kernel in kernels: convolution = convolve(binary_mask, kernel, mode='constant') binary_mask[(binary_mask == 1) & (convolution >= 1)] = 0
这套卷积核的核心优势是能保留闭合线条(如矩形边缘),但存在明显缺陷:对于单像素粗细的开放线条(两端收尾的线条),需要执行线条长度一半次数的卷积才能完全移除,处理长线条时效率极低。
现寻求帮助开发一套卷积核(集),要求仅需少量卷积操作(如2-3次)即可移除单像素粗细的开放线条,同时完整保留单像素粗细的闭合线条。

内容的提问来源于stack exchange,提问作者user20874428
相关产品推荐
相关产品推荐

