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