Python 如何在图像的拉普拉斯高斯函数中找到零交叉点

Python 如何在图像的拉普拉斯高斯函数中找到零交叉点,python,image-processing,computer-vision,laplacianofgaussian,Python,Image Processing,Computer Vision,Laplacianofgaussian,我需要只使用我的方法和matplotlib OpenCV和NumPy构建日志文件管理器(但不使用只为帮助计算而进行筛选的内置函数) 步骤: 使用高斯滤波器模糊图像 使用推导拉普拉斯核Ix,Iy 需要在图像的2D数组中找到所有的“零交叉点”,并将它们标记为一个零交叉点和其他零交叉点 我的主要问题是过零,我找不到办法 我需要检查所有没有阈值的交叉点->{(-+)、(+)、(-0+)、(+0-},并且每个交叉点都设为1,其余为0 (卷积也是由我用conv2D函数实现的)在我自己实际实现它之后,我偶然发

我需要只使用我的方法和matplotlib OpenCV和NumPy构建日志文件管理器(但不使用只为帮助计算而进行筛选的内置函数)

步骤:

  • 使用高斯滤波器模糊图像
  • 使用推导拉普拉斯核Ix,Iy
  • 需要在图像的2D数组中找到所有的“零交叉点”,并将它们标记为一个零交叉点和其他零交叉点
  • 我的主要问题是过零,我找不到办法

    我需要检查所有没有阈值的交叉点->
    {(-+)、(+)、(-0+)、(+0-}
    ,并且每个交叉点都设为1,其余为0


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

    在我自己实际实现它之后,我偶然发现了这个线程。如果您使用scikit图像,这是相当简单的。我先介绍代码,然后再看一遍

    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)
    
    从skimage.filters导入laplace
    将numpy作为np导入
    搭接=np.符号(拉普拉斯(图像))
    搭接=np.衬垫(搭接,((0,1),(0,1)))
    diff_x=lap[:-1,:-1]-lap[:-1,1::<0
    差异y=圈[:-1,:-1]-圈[1:,:-1]<0
    边=np.logical_或(diff_x,diff_y).aType(float)
    
    首先我们找到拉普拉斯算子并取它的符号,因为我们对值不感兴趣,然后继续用零填充最后一列和最后一行,进行卷积。
    然后,我们继续沿x轴检查是否存在来自
    -=>+
    的交叉。只需将比较更改为另一种方式。检查一行中的三种状态的想法可以类似地进行,其中比较必须计算为
    True
    ,以便
    1

    查找所有正像素,查看每个像素是否有负值或零值邻居。如果是这样的话,两者之间就有一个零交叉点。那么内斯特为什么呢?在img上到处跑?是的。至少在第一个实现中。一旦你有了这个工作,你可以看看矢量化它的选项,但首先让它工作。
    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)
    
        k = np.array([[0, 1, 0],
                      [1, -4, 1],
                      [0, 1, 0]])
    
    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)