gpt4 book ai didi

python - 如何在图像的高斯拉普拉斯算子中找到零交叉点

转载 作者:行者123 更新时间:2023-12-05 02:07:25 27 4
gpt4 key购买 nike

我需要只使用我的方法和 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***

步骤:

  1. 使用高斯滤波器模糊图像
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)
  1. 使用推导拉普拉斯核Ix,Iy
    k = np.array([[0, 1, 0],
[1, -4, 1],
[0, 1, 0]])
  1. 需要在图像的二维数组中找到所有“过零”,并将它们标记为一个,其余为零

我的主要问题是过零,我找不到解决办法。

我需要检查所有没有阈值的交叉口 -> { (-+),(+-),(-0+),(+0-)},以及每个交叉口为 1,其余为零。

(卷积也是我实现的函数conv2D)

最佳答案

我自己实际实现后偶然发现了这个线程。如果您使用 scikit-image,这将相当简单。我会先给出代码,然后再看一遍

from skimage.filters import laplace
import numpy as np

lap = np.sign(laplace(image))
lap = np.pad(lap, ((0, 1), (0, 1)))
diff_x = lap[:-1, :-1] - lap[:-1, 1:] < 0
diff_y = lap[:-1, :-1] - lap[1:, :-1] < 0

edges = np.logical_or(diff_x, diff_y).astype(float)

首先我们找到拉普拉斯算子并取其符号,因为我们对这些值不感兴趣,然后继续用零填充最后一列和最后一行,以进行卷积。然后我们继续沿 x 轴检查是否有来自 - => + 的交叉点。只需将比较更改为相反即可。连续检查三个状态的想法可以类似地完成,其中比较必须评估为 True 才能成为 1

关于python - 如何在图像的高斯拉普拉斯算子中找到零交叉点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61836022/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com