使用二阶微分锐化图像(拉普拉斯算子)基本原理及Python实现

1. 拉普拉斯算子

1.1 简介

一种典型的各向同性的微分算子,可用于检测图像中灰度图片的区域

$$ \nabla^{2} f=\frac{\partial^{2} f}{\partial x^{2}}+\frac{\partial^{2} f}{\partial y^{2}} $$

根据上述的差分近似可以推导出

$$ \nabla^{2} f(x, y)=f(x+1, y)+f(x-1, y)+f(x, y+1)+f(x, y-1)-4 f(x, y) $$

1.2 锐化过程

  1. 使用拉普拉斯过滤器得到图像中灰度突变的区域$\nabla^{2} f(x, y)$
  2. 使用原图像加上$\nabla^{2} f(x, y)$,如下

$$ g(x, y)=f(x, y)+c\left[\nabla^{2} f(x, y)\right] $$

  • 其中c为可变参数

2. 测试

 图源自skimage

3. 代码

 1 import numpy as np
 2 
3
4 def laplace_sharpen(input_image, c): 5 ''' 6 拉普拉斯锐化 7 :param input_image: 输入图像 8 :param c: 锐化系数 9 :return: 输出图像 10 ''' 11 input_image_cp = np.copy(input_image) # 输入图像的副本 12 13 # 拉普拉斯滤波器 14 laplace_filter = np.array([ 15 [1, 1, 1], 16 [1, -8, 1], 17 [1, 1, 1], 18 ]) 19 20 input_image_cp = np.pad(input_image_cp, (1, 1), mode='constant', constant_values=0) # 填充输入图像 21 22 m, n = input_image_cp.shape # 填充后的输入图像的尺寸 23 24 output_image = np.copy(input_image_cp) # 输出图像 25 26 for i in range(1, m - 1): 27 for j in range(1, n - 1): 28 R = np.sum(laplace_filter * input_image_cp[i - 1:i + 2, j - 1:j + 2]) # 拉普拉斯滤波器响应 29 30 output_image[i, j] = input_image_cp[i, j] + c * R 31 32 output_image = output_image[1:m - 1, 1:n - 1] # 裁剪 33 34 return output_image

 

转载于:https://www.cnblogs.com/iwuqing/p/11478583.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值