数字图像处理(图像增强)——拉普拉斯算子

二阶微分

与微积分中定义的微分略有不同,数字图像中处理的是离散的值,因此对于一维函数的一阶微分的基本定义是差值:

fx=f(x+1)f(x)

类似的,二阶微分定义为:

2fx2=f(x+1)+f(x1)2f(x)

将一维函数扩展到二维:

2fx2=f(x+1y)+f(x1,y)2f(x,y)

2fy2=f(x,y+1)+f(x,y1)2f(x,y)

二阶微分的定义保证了以下几点:

  1. 在恒定灰度区域的微分值为0
  2. 在灰度台阶或斜坡的起点处微分值非零

可以看出,二阶微分可以检测出图像的边缘、增强细节

拉普拉斯算子

希望构造一种各向同性滤波器,这种滤波器的响应与滤波器作用的图像的突变方向无关。
最简单的各向同性微分算子是拉普拉斯算子。一个二维图像函数f(x,y) 定义为:

2f=2fx2+2fy2=f(x+1y)+f(x1,y)+f(x,y+1)+f(x,y1)4f(x,y)

实现上式的滤波器模板为:

0 1 0
1 -4 1
0 1 0

扩展的拉普拉斯算子

对角线方向上也可以类似组成,

1 1 1
1 -8 1
1 1 1
## 使用拉普拉斯算子增强图像

由于拉普拉斯算子是一种微分算子,因此强调的是图像中灰度的突变,并不强调灰度缓慢变化的区域。这将产生把浅灰色边线和突变点叠加到暗色背景中的图像。将原图像和拉普拉斯图像叠加在一起的简单方法,可以复原背景特性并保持拉普拉斯锐化处理的效果。

g(x,y)=f(x,,y)+c[2f(x,y)]

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

原图:
原图
拉普拉斯作用后的图:
这里写图片描述
增强后的图片:
这里写图片描述

posted @   木章永想要平静的生活  阅读(1345)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示