• python图像处理 ——图像锐化


    前言

    由于收集图像数据的器件或传输图像的通道存在一些质量缺陷,或者受其他外界因素的影响,使得图像存在模糊和有噪声的情况,从而影响到图像识别工作的开展。一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时图像边缘信息主要集中在其高频部分。这将导致原始图像在平滑处理之后,图像边缘和图像轮廓模糊的情况出现。为了减少这类不利效果的影响,就需要利用图像锐化技术,使图像的边缘变得清晰。

    一、原理

    图像锐化是指增强图像的边缘和细节信息,使图像看起来更加清晰和生动。其原理主要是减小图像中像素值相对差异较小的区域,增加像素值相对差异较大的区域。一般而言,锐化处理的方法主要分为两类:增强高频信息和抑制低频信息

    增强高频信息的方法主要是通过使用高通滤波器来实现,例如使用SobelLaplacian等滤波器。这些滤波器可以增强图像中的高频信息,即边缘和细节信息,使其更加明显和突出。

    抑制低频信息的方法主要是通过使用平滑滤波器来实现,例如使用均值高斯等滤波器。这些滤波器可以减小图像中的低频信息,使其更加平滑和模糊,从而突出高频信息。

    二、 空间域锐化滤波

    图像模糊通过平滑(加权平均)来实现,类似于积分运算。图像锐化则通过微分运算(有限差分)实现,使用一阶微分或二阶微分都可以得到图像灰度的变化值。

    图像锐化的目的是增强图像的灰度跳变部分,使模糊的图像变得清晰。图像锐化也称为高通滤波,通过和增强高频,衰减和抑制低频。图像锐化常用于电子印刷、医学成像和工业检测。

    恒定灰度区域,一阶导数为零,二阶导数为零;
    1.灰度台阶或斜坡起点区域,一阶导数非零,,二阶导数非零;
    2.灰度斜坡区域,一阶导数非零,二阶导数为零。
    3.图像梯度提取方法简单直接,能够有效的描述图像的原始状态,因此发展出多种图像梯度算子:Roberts、Prewitt、Sobel、Laplacian、Scharr。

    1.拉普拉斯算子(Laplacian)

    Laplacian算子是一种用于图像处理和计算机视觉的数学运算符。它是二阶导数算子的一种,可以用于检测图像中的边缘和纹理等特征。在离散形式下,Laplacian算子可以表示为:

    Δ f ( x , y ) = f ( x − 1 , y ) + f ( x + 1 , y ) + f ( x , y − 1 ) + f ( x , y + 1 ) − 4 f ( x , y ) \Delta f(x,y) = f(x-1,y) + f(x+1,y) + f(x,y-1) + f(x,y+1) - 4f(x,y) Δf(x,y)=f(x1,y)+f(x+1,y)+f(x,y1)+f(x,y+1)4f(x,y)

    其中 f ( x , y ) f(x,y) f(x,y) 是图像在 ( x , y ) (x,y) (x,y) 处的像素值, Δ f ( x , y ) \Delta f(x,y) Δf(x,y) 是Laplacian算子在 ( x , y ) (x,y) (x,y) 处应用后的结果。

    Laplacian算子可以通过卷积运算来实现。在二维情况下,它通常被表示为以下的卷积核:

    在这里插入图片描述

    2.罗伯茨算子(Roberts)

    Roberts算子是一种边缘检测算子,主要用于图像处理中的锐化和边缘检测。它是一种离散空间滤波器,可以检测图像中的垂直和水平边缘。

    Roberts算子可以表示为两个卷积核,一个用于检测水平边缘,另一个用于检测垂直边缘。

    在这里插入图片描述
    如公式所示,分别表示图像的水平方向和垂直方向的计算公式。

    在这里插入图片描述
    Roberts算子像素的最终计算公式如下:

    在这里插入图片描述
    在Python中,Roberts算子主要通过Numpy定义模板,再调用OpenCV的filter2D()函数实现边缘提取。该函数主要是利用内核实现对图像的卷积运算,其函数原型如下所示:网址:yii666.com

    dst = filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
    – src表示输入图像
    – dst表示输出的边缘图,其大小和通道数与输入图像相同
    ddepth表示目标图像所需的深度
    kernel表示卷积核,一个单通道浮点型矩阵
    anchor表示内核的基准点,其默认值为(-1,-1),位于中心位置
    delta表示在储存目标图像前可选的添加到像素的值,默认值为0
    borderType表示边框模式

    在进行Roberts算子处理之后,还需要调用convertScaleAbs()函数计算绝对值,并将图像转换为8位图进行显示。其算法原型如下:

    dst = convertScaleAbs(src[, dst[, alpha[, beta]]])
    src表示原数组
    dst表示输出数组,深度为8位
    alpha表示比例因子
    beta表示原数组元素按比例缩放后添加的值
    最后调用addWeighted()函数计算水平方向和垂直方向的Roberts算子。其运行代码如下:

    3.Sobel算子

    Sobel算子是一种边缘检测算子,常用于图像处理中。它可以检测图像中的水平和垂直边缘,并将它们分别表示为两个图像。这个算子是由Irwin Sobel于1968年提出的,可以用于提取图片中平滑区域与纹理区域之间的边界。

    Sobel算子的原理是利用了图像像素点之间的差异来检测边缘。具体而言,Sobel算子将每个像素点周围的8个像素点加权求和,来检测该点周围像素的强度变化,从而确定像素点是否属于边缘。

    Sobel算子分为水平与垂直两个方向:

    在水平方向上,Sobel算子的卷积核如下:

       -1  -2  -1
        0   0   0
        1   2   1
    
    • 1
    • 2
    • 3

    在垂直方向上,Sobel算子的卷积核如下:

      -1   0  +1 
      -2   0  +2 
      -1   0  +1 
    
    • 1
    • 2
    • 3

    4.Prewitt算子

    Prewitt是一种图像边缘检测的微分算子,其原理是利用特定区域内像素灰度值产生的差分实现边缘检测。由于Prewitt算子采用3×3模板对区域内的像素值进行计算,而Robert算子的模板为2×2,故Prewitt算子的边缘检测结果在水平方向和垂直方向均比Robert算子更加明显。Prewitt算子适合用来识别噪声较多、灰度渐变的图像,其计算公式如下所示。

    在这里插入图片描述
    具体的水平和垂直方向计算公式如下所示:

    在这里插入图片描述
    Prewitt算子像素的最终计算如公式所示。
    在这里插入图片描述

    5.Scharr算子

    Scharr 算子也称为 Scharr 滤波器,计算 x 轴或 y 轴方向的图像差分。

    Scharr 算子是 Soble 算子在 ksize=3 时的优化,与 Soble 的速度相同,且精度更高。Scharr 算子与 Sobel 算子的不同点是在平滑部分,其中心元素占的权重更重,相当于使用较小标准差的高斯函数,也就是更瘦高的模板。

    Scharr 算子的卷积核为:
    在这里插入图片描述
    Scharr 算子很容易通过卷积操作 cv.filter2D 实现,OpenCV 也提供了函数 cv.Scharr 实现 Scharr 算子。

    三、实验对比

    选择一张模糊图像,将下列代码中的Laplace_kernel

    cv2.filter2D(img, -1, Laplace_kernel)
    
    • 1

    替换成不同的卷积核,既可以完成锐化处理

    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    # 读取图像
    img = cv2.imread('girl.png')
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    # ===============================拉普拉斯算子锐化============================
    Laplace_kernel = np.array([[-1,-1,-1],
                       [-1, 9,-1],
                       [-1,-1,-1]], dtype=np.float32)  # 定义拉普拉斯算子
                       # 应用锐化卷积核
    Laplace_img = cv2.filter2D(img, -1, Laplace_kernel)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

  • 相关阅读:
    解码四大区块链发展先导区:共通、发展与未来
    上线MES系统后,企业发生了这些变化......
    后端一次性返回10万条数据,使用vue,你该如何渲染?
    kubeadm init 报错 ”unknown service runtime.v1alpha2.RuntimeService”
    全球变暖问题(floodfill 处理联通块问题)
    PostMan接口测试教程
    现在的湖仓一体像是个伪命题
    flinksql读oracle写入mysql
    idea maven构建.jar包镜像 发布到远程Linux docker 镜像
    Spring cloud alibaba实战
  • 原文地址:https://blog.csdn.net/weixin_42207434/article/details/134214420