数字图像处理——拉普拉斯算子

二阶微分

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

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

类似的,二阶微分定义为:
2 f x 2 = f ( x + 1 ) + f ( x 1 ) 2 f ( x )

将一维函数扩展到二维:
2 f x 2 = f ( x + 1 y ) + f ( x 1 , y ) 2 f ( x , y )

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

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

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

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

拉普拉斯算子

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

2 f = 2 f x 2 + 2 f y 2 = f ( x + 1 y ) + f ( x 1 , y ) + f ( x , y + 1 ) + f ( x , y 1 ) 4 f ( 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 [ 2 f ( 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

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

猜你喜欢

转载自blog.csdn.net/Loney_Island/article/details/80966909