我需要仅使用我的方法和仅使用 matplotlib OpenCV 和 NumPy 构建一个 LoG 文件管理器(但不是为了帮助计算而执行过滤器的内置函数)
def edgeDetectionZeroCrossingLOG(img: np.ndarray) -> (np.ndarray):
"""
Detecting edges using the "ZeroCrossingLOG" method
:param I: Input image
:return: :return: Edge matrix
"""
kernel = np.ndarray((3, 3))
b_img = blurImage1(img, kernel)
k = np.array([[0, 1, 0],
[1, -4, 1],
[0, 1, 0]])
img_dervative = conv2D(img, k)
***Zero-Crossing***
脚步:
- 使用高斯滤波器来模糊图像
def blurImage1(in_image: np.ndarray, kernel_size: np.ndarray) -> np.ndarray:
"""
Blur an image using a Gaussian kernel
:param inImage: Input image
:param kernelSize: Kernel size
:return: The Blurred image
"""
gaussian = np.ndarray(kernel_size)
sigma = 0.3 * ((kernel_size[0] - 1) * 0.5 - 1) + 0.8
for x in range(0, kernel_size[0]):
for y in range(0, kernel_size[1]):
gaussian[x, y] = math.exp(-((x ** 2 + y ** 2) / (2.0 * sigma ** 2))) / (math.pi * (sigma ** 2) * 2)
return conv2D(in_image, gaussian)
- 使用推导拉普拉斯核 Ix,Iy
k = np.array([[0, 1, 0],
[1, -4, 1],
[0, 1, 0]])
- 需要在图像的 2D 数组中找到所有“过零”并将它们标记为 1,其余为零
我的主要问题是过零,我找不到解决办法。
我需要检查所有没有阈值的交叉口 -> { (-+),(+-),(-0+),(+0-)}
,并且每个交叉口都设为 1 ,其余的则为零。
(卷积也是我实现的函数conv2D)