数字图像处理(图像增强)——拉普拉斯算子
二阶微分
与微积分中定义的微分略有不同,数字图像中处理的是离散的值,因此对于一维函数的一阶微分的基本定义是差值:
类似的,二阶微分定义为:
将一维函数扩展到二维:
二阶微分的定义保证了以下几点:
- 在恒定灰度区域的微分值为0
- 在灰度台阶或斜坡的起点处微分值非零
可以看出,二阶微分可以检测出图像的边缘、增强细节
拉普拉斯算子
希望构造一种各向同性滤波器,这种滤波器的响应与滤波器作用的图像的突变方向无关。
最简单的各向同性微分算子是拉普拉斯算子。一个二维图像函数 定义为:
实现上式的滤波器模板为:
0 | 1 | 0 |
1 | -4 | 1 |
0 | 1 | 0 |
扩展的拉普拉斯算子
对角线方向上也可以类似组成,
1 | 1 | 1 |
1 | -8 | 1 |
1 | 1 | 1 |
由于拉普拉斯算子是一种微分算子,因此强调的是图像中灰度的突变,并不强调灰度缓慢变化的区域。这将产生把浅灰色边线和突变点叠加到暗色背景中的图像。将原图像和拉普拉斯图像叠加在一起的简单方法,可以复原背景特性并保持拉普拉斯锐化处理的效果。
python 实现
def laplace2(img, sx = 1.0):
row = numpy.zeros((1, img.shape[1]))
img = numpy.row_stack((row, img, row))
col = numpy.zeros((img.shape[0], 1))
img = numpy.column_stack((col, img, col))
g = numpy.array(((1, 1, 1), (1, -8, 1), (1, 1, 1)))
g = -1 * g
re = numpy.zeros_like(img)
for i in range(1, img.shape[0] - 1):
for j in range(1, img.shape[1] - 1):
re[i, j] = (img[i-1 : i+2, j-1 : j+2] * g).sum()
re = re[1:-1, 1:-1]
return re
原图:
拉普拉斯作用后的图:
增强后的图片:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通