OpenCV-python 实现基于拉普拉斯算子的图像锐化

一、基础知识

积分运算的模板卷积可以平滑图像,微分运算的模板卷积可以锐化图像

拉普拉斯算子是一种各向同性的二阶微分算子,根据定义有:

说明:各向同性指图像的性质不会因为方向不同而变化。

将两个分别沿XY方向方向的二阶偏导数分别借助差分计算:

由上式则可知4-邻域的拉普拉斯算子模板的各个系数,同理可知8-邻域的拉普拉斯算子模板的各个系数,如下图:

说明:

      两种模板的所有系数之和均为0,这是为了经过模板运算所得的结果图像均值不变

      使用该模板有可能使输出灰度值小于0,还需将灰度值范围通过变换变回到[0,L-1]区间才能正确显示出来。

      拉普拉斯算子增强了图像中的灰度不连续边缘,而减弱了对应图像中灰度值缓慢变化区域的对比度,将这样的结果叠加到原始图像上就能得到锐化后的图像。

二、代码实现

几个需要说明的函数:

src——源图像

ddepth——目标图像的所需深度(指存储每个像素所用的位数,也用于量度图像的色彩分辨率)

import cv2
import matplotlib.pyplot as plt

#显示函数
def showImages(images):
    for i in range(len(images)):
        img = images[i]
        title = "("+str(i+1)+")"
        #行,列,索引
        plt.subplot(2, 3, i+1)
        plt.imshow(img, cmap="gray")
        plt.title(title,fontsize=10)
        plt.xticks([])
        plt.yticks([])
    plt.show()

#主函数
if __name__ == "__main__":
    image = cv2.imread("graysenery.jpg", 0)
    imageLap3 = cv2.Laplacian(image,cv2.CV_64F, ksize=3)
    imageLap5 = cv2.Laplacian(image, cv2.CV_64F, ksize=5)
    imageLap7 = cv2.Laplacian(image, cv2.CV_64F, ksize=7)
    imageLap9 = cv2.Laplacian(image, cv2.CV_64F, ksize=9)
    imageLap11 = cv2.Laplacian(image, cv2.CV_64F, ksize=11)
    images = [image, imageLap3, imageLap5, imageLap7, imageLap9, imageLap11]
    showImages(images)

 

 

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值