二阶微分
与微积分中定义的微分略有不同,数字图像中处理的是离散的值,因此对于一维函数的一阶微分的基本定义是差值:
\[\frac{\partial f}{\partial x} = f(x+1) - f(x) \]类似的,二阶微分定义为:
\[\frac{\partial ^2f}{\partial x^2} = f(x+1) + f(x-1) - 2f(x) \]将一维函数扩展到二维:
\[\frac{\partial ^2f}{\partial x^2} = f(x+1, y) + f(x-1, y) - 2f(x, y) \]\[\frac{\partial ^2f}{\partial y^2} = f(x, y+1) + f(x, y - 1) - 2f(x, y) \]二阶微分的定义保证了以下几点:
- 在恒定灰度区域的微分值为0
- 在灰度台阶或斜坡的起点处微分值非零
可以看出,二阶微分可以检测出图像的边缘、增强细节
拉普拉斯算子
希望构造一种各向同性滤波器,这种滤波器的响应与滤波器作用的图像的突变方向无关。
最简单的各向同性微分算子是拉普拉斯算子。一个二维图像函数\(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[\bigtriangledown^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
原图:
拉普拉斯作用后的图:
增强后的图片: