• 用于图像处理的高斯滤波器 (LoG) 拉普拉斯


    一、说明

            欢迎来到拉普拉斯和高斯滤波器的拉普拉斯的故事。LoG是先进行高斯处理,继而进行拉普拉斯算子的图像处理算法。用拉普拉斯具有过零功能,实现边缘岭脊提取。

    二、LoG算法简述

            在这篇博客中,让我们看看拉普拉斯滤波器和高斯滤波器的拉普拉斯滤波器以及 Python 中的实现。拉普拉斯滤波器的故事始于图论中的拉普拉斯矩阵,这是在矩阵中表示图的最简单方法。图像的拉普拉斯高亮了强度快速变化的区域。任何具有明显不连续性的特征都将由拉普拉斯算子增强。拉普拉斯滤波器属于导数滤波器类别。它是一种二阶滤波器,用于图像处理,用于边缘检测和特征提取。当我们使用一阶导数滤波器时,我们必须应用单独的滤波器来检测垂直和水平边缘,然后将两者结合起来。但是拉普拉斯滤波器可以检测所有边缘,而不管方向如何。

            在数学上,拉普拉斯滤波器定义为:

            拉普拉斯滤波器函数

            存在 2 种类型的拉普拉斯滤波器。

    1. 拉普拉斯阳性
    2. 负拉普拉斯

            正拉普拉斯算子使用掩码,中心元素为负值,角元素为 0。此滤镜可识别图像的外边缘。下面给出了一个过滤器掩码示例。

    阳性拉普拉斯掩模

            负拉普拉斯算子用于查找图像的内边缘。它使用标准蒙版,中心元素为正元素,角元素为 0,所有其他元素为 -1。下面给出一个示例。

    负拉普拉斯掩码

            在这两种情况下,筛选器中的值总和应为 0。标准面罩有不同的变体可供选择。你可以试穿它。

    三、过零功能

            过零点是数学函数的符号在函数图中发生变化的点。在图像处理中,使用拉普拉斯滤波器的边缘检测是通过将图中导致零的点标记为潜在的边缘点来进行的。此方法适用于在两个方向上查找边缘的图像,但当在图像中发现噪点时效果不佳。因此,我们通常在拉普拉斯滤波器之前应用 Guassian 滤波器对图像进行平滑处理。它通常被称为瓜西拉普拉斯 (LoG) 滤波器。我们可以将 Guassian 和 Laplacian 运算组合在一起,组合滤波器的数学表示如下:

    LoG滤波器功能

    四、代码块

            方法 1

            下面提到了实现 LoG 过滤器的 OpenCV 内置函数方法。

    1. #OPENCV implementation
    2. import cv2
    3. import matplotlib.pyplot as plt
    4. image = cv2.imread(r"E:\eye.png", cv2.IMREAD_COLOR)
    5. image = cv2.GaussianBlur(image, (3, 3), 0)
    6. image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    7. filtered_image = cv2.Laplacian(image_gray, cv2.CV_16S, ksize=3)
    8. # Plot the original and filtered images
    9. plt.figure(figsize=(10, 5))
    10. plt.subplot(121)
    11. plt.imshow(image, cmap='gray')
    12. plt.title('Original Image')
    13. plt.subplot(122)
    14. plt.imshow(filtered_image, cmap='gray')
    15. plt.title('LoG Filtered Image')
    16. plt.show()

            程序输出:

            方法 2

            在 openCV 中实现 LoG 过滤器的 Python 函数如下所示。

    1. import cv2
    2. import matplotlib.pyplot as plt
    3. import numpy as np
    4. def LoG_filter_opencv(image, sigma, size=None):
    5. # Generate LoG kernel
    6. if size is None:
    7. size = int(6 * sigma + 1) if sigma >= 1 else 7
    8. if size % 2 == 0:
    9. size += 1
    10. x, y = np.meshgrid(np.arange(-size//2+1, size//2+1), np.arange(-size//2+1, size//2+1))
    11. kernel = -(1/(np.pi * sigma**4)) * (1 - ((x**2 + y**2) / (2 * sigma**2))) * np.exp(-(x**2 + y**2) / (2 * sigma**2))
    12. kernel = kernel / np.sum(np.abs(kernel))
    13. # Perform convolution using OpenCV filter2D
    14. result = cv2.filter2D(image, -1, kernel)
    15. return result
    16. # Example usage:
    17. image = cv2.imread(r"E:\eye.png", cv2.IMREAD_GRAYSCALE) # Replace 'path_to_your_image.png' with your image path
    18. sigma = 2.0
    19. filtered_image = LoG_filter_opencv(image, sigma)
    20. filtered_image = cv2.convertScaleAbs(filtered_image)
    21. plt.imshow(filtered_image, cmap="gray")

            程序的输出:

            方法 3

            下面给出了使用 scipy 包的 LoG 过滤器的 Python 函数实现。

    1. import numpy as np
    2. import matplotlib.pyplot as plt
    3. from scipy.ndimage import convolve
    4. from scipy import misc
    5. def LoG_filter(image, sigma, size=None):
    6. # Generate LoG kernel
    7. if size is None:
    8. size = int(6 * sigma + 1) if sigma >= 1 else 7
    9. if size % 2 == 0:
    10. size += 1
    11. x, y = np.meshgrid(np.arange(-size//2+1, size//2+1), np.arange(-size//2+1, size//2+1))
    12. kernel = -(1/(np.pi * sigma**4)) * (1 - ((x**2 + y**2) / (2 * sigma**2))) * np.exp(-(x**2 + y**2) / (2 * sigma**2))
    13. kernel = kernel / np.sum(np.abs(kernel))
    14. # Perform convolution
    15. result = convolve(image, kernel)
    16. return result
    17. # Example usage:
    18. image = cv2.imread(r"E:\eye.png", cv2.IMREAD_GRAYSCALE) # Replace 'path_to_your_image.png' with your image path
    19. sigma = 2.0
    20. filtered_image = LoG_filter(image, sigma)
    21. # Plot the original and filtered images
    22. plt.figure(figsize=(10, 5))
    23. plt.subplot(121)
    24. plt.imshow(image, cmap='gray')
    25. plt.title('Original Image')
    26. plt.subplot(122)
    27. plt.imshow(filtered_image, cmap='gray')
    28. plt.title('LoG Filtered Image')
    29. plt.show()

            程序输出:

            希望您喜欢阅读。这是关于图像处理中常用过滤器的另一篇文章的链接 用于图像处理的不同过滤器 | by 拉吉·利尼 |中

  • 相关阅读:
    Keepalived+LVS负载均衡
    Black Friday案例分析
    多领域介绍昇思MindSpore最新技术动态
    职称评审的业绩要求,余老师为人才讲讲都需要符合什么条件的业绩
    leetcode 532. 数组中的 k-diff 数对
    阿里云服务器公网带宽如何修改?
    DNS域名系统 - CDN内容分发网络
    OpenCV2 module ‘cv2‘ has no attribute ‘legacy‘
    微信小程序如何循环控制一行显示几个
    Python21day学习---numpy基础操作----day18
  • 原文地址:https://blog.csdn.net/gongdiwudu/article/details/134302397