使用二阶微分锐化图像(拉普拉斯算子)基本原理及Python实现
Posted iwuqing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用二阶微分锐化图像(拉普拉斯算子)基本原理及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 锐化过程
- 使用拉普拉斯过滤器得到图像中灰度突变的区域$\\nabla^2 f(x, y)$
- 使用原图像加上$\\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
以上是关于使用二阶微分锐化图像(拉普拉斯算子)基本原理及Python实现的主要内容,如果未能解决你的问题,请参考以下文章