• 图像处理:Python使用OpenCV进行图像锐化 (非锐化掩模、拉普拉斯滤波器)



    在图像处理中,锐化操作用于增强图像的边缘和细节,使图像看起来更清晰。常见的图像锐化方法包括非锐化掩模(Unsharp Masking)和拉普拉斯滤波器(Laplacian Filter)。

    非锐化掩模 (Unsharp Masking)

    步骤

    1. 模糊图像:使用高斯模糊滤波器对原图像进行模糊处理,得到模糊图像。
    2. 计算细节层:通过从原图像中减去模糊图像,得到细节层。
    3. 增强图像:将细节层乘以一个增益系数后加回到原图像,得到增强后的图像。

    公式
    设原图像为 ( I ),模糊图像为 (I blur ),细节层为 ( D ),增益系数为 ( k ),最终的锐化图像 ( I’ ) 计算如下:

    D = I − I blur D = I - I_{\text{blur}} D=IIblur

    I ′ = I + k ⋅ D I' = I + k \cdot D I=I+kD

    代码示例

    import cv2
    import numpy as np
    
    def unsharp_mask(image, k=1.5):
        # 高斯模糊图像
        blurred = cv2.GaussianBlur(image, (9, 9), 10.0)
        # 计算细节层
        detail = image - blurred
        # 增强图像
        sharpened = image + k * detail
        return np.clip(sharpened, 0, 255).astype(np.uint8)
    
    image = cv2.imread('Task3.jpg')
    sharpened_image = unsharp_mask(image)
    cv2.imshow('Original Image', image)
    cv2.imshow('Unsharp Masked Image', sharpened_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    拉普拉斯滤波器 (Laplacian Filter)

    步骤

    1. 计算拉普拉斯图像:使用拉普拉斯算子计算图像的二阶导数,得到拉普拉斯图像。
    2. 增强图像:将拉普拉斯图像加回到原图像中,得到锐化后的图像。

    公式
    设原图像为 ( I ),拉普拉斯图像为 ( L ),最终的锐化图像 ( I’ ) 计算如下:

    L = Δ I = ∂ 2 I ∂ x 2 + ∂ 2 I ∂ y 2 L = \Delta I = \frac{\partial^2 I}{\partial x^2} + \frac{\partial^2 I}{\partial y^2} L=ΔI=x22I+y22I

    I ′ = I + k ⋅ L I' = I + k \cdot L I=I+kL

    代码示例

    import cv2
    import numpy as np
    
    def laplacian_sharpen(image, k=1.0):
        # 计算拉普拉斯图像
        laplacian = cv2.Laplacian(image, cv2.CV_64F)
        laplacian = np.uint8(np.absolute(laplacian))
        # 增强图像
        sharpened = cv2.addWeighted(image, 1, laplacian, k, 0)
        return sharpened
    
    image = cv2.imread('path_to_your_image.jpg')
    sharpened_image = laplacian_sharpen(image)
    cv2.imshow('Original Image', image)
    cv2.imshow('Laplacian Sharpened Image', sharpened_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    效果对比

    了将非锐化掩模(Unsharp Masking)和拉普拉斯滤波器(Laplacian Filter)的方法整合到一个代码中,并对比展示效果,将两个锐化方法的结果放在同一个窗口中进行展示

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    def unsharp_mask(image, k=1.5):
        # 高斯模糊图像
        blurred = cv2.GaussianBlur(image, (9, 9), 10.0)
        # 计算细节层
        detail = image - blurred
        # 增强图像
        sharpened = image + k * detail
        return np.clip(sharpened, 0, 255).astype(np.uint8)
    
    def laplacian_sharpen(image, k=1.0):
        # 计算拉普拉斯图像
        laplacian = cv2.Laplacian(image, cv2.CV_64F)
        laplacian = np.uint8(np.absolute(laplacian))
        # 增强图像
        sharpened = cv2.addWeighted(image, 1, laplacian, k, 0)
        return sharpened
    
    def display_images(original, unsharp, laplacian):
        titles = ['Original Image', 'Unsharp Masked ', 'Laplacian Sharpened ']
        images = [original, unsharp, laplacian]
        plt.figure(figsize=(10, 10)) 
        for i in range(3):
            plt.subplot(1, 3, i + 1)
            plt.imshow(cv2.cvtColor(images[i], cv2.COLOR_BGR2RGB))
            plt.title(titles[i])
            plt.xticks([]), plt.yticks([])
    
        plt.show()
    
    def main():
        image_path = 'Task3.jpg'  # 请替换为你的图像路径
        image = cv2.imread(image_path)
    
        if image is None:
            print(f"Error: Unable to load image at {image_path}")
            return
    
        unsharp_image = unsharp_mask(image)
        laplacian_image = laplacian_sharpen(image)
    
        display_images(image, unsharp_image, laplacian_image)
    
    if __name__ == "__main__":
        main()
    
    

    具体效果对比如下:不同的图片的效果可能不同
    在这里插入图片描述

    总结

    这两种锐化方法各有优缺点,要根据具体需求选择合适的方法:

    • 非锐化掩模

      • 优点:能够灵活控制图像的锐化程度,通过调整增益系数和模糊程度,可以获得较为自然的锐化效果。
      • 缺点:在处理带有高噪声的图像时,容易放大噪声。
    • 拉普拉斯滤波器

      • 优点:计算简单,能够快速增强图像边缘和细节。
      • 缺点:容易引入噪声和伪影,对噪声不敏感的图像效果更好。

    通过应用这些方法,可以有效增强图像的边缘和细节,使图像看起来更加清晰和锐利。

  • 相关阅读:
    第五章:最新版零基础学习 PYTHON 教程—Python 字符串操作指南(第七节 - Python 中的字符串模板类)
    计算机中的加法器和比较器
    冒泡,选择,插入,希尔,快速,归并
    GPT-SoVITS声音克隆训练和推理(新手教程,附整合包)
    华为云大数据BI 为中小型企业智慧运营保驾护航
    Python爬虫 爬取下载美国科研网站数据
    pytorch使用GPU加速--windows11,GTX1650Super
    【Go语言】项目实战:客户信息管理系统(需求分析、项目设计、功能实现)
    开启安全测试评估赛道,永信至诚发布“数字风洞”产品体系
    【深度学习3】线性回归与逻辑回归
  • 原文地址:https://blog.csdn.net/weixin_46999174/article/details/139621783