数字图像处理-空间域处理-空间滤波-锐化空间滤波器

参考自:数字图像处理第三版-冈萨勒斯

 

锐化处理的主要目的是突出灰度的过渡部分。增强边缘和其他突变(噪声),削弱灰度变化缓慢的区域。

注意:垂直方向是x,水平方向是y

基础

图像模糊可用均值平滑实现。因均值处理与积分类似,在逻辑上,我们可以得出锐化处理可由空间微分来实现。微分算子的响应强度与图像的突变程度成正比,这样,图像微分增强边缘和其他突变,而削弱灰度变化缓慢的区域。

微分算子必须保证以下几点:(1)在恒定灰度区域的微分值为0;(2)在灰度台阶或斜坡处微分值非0;(3)沿着斜坡的微分值非0

一维函数f(x)的一阶微分定义:

        二阶微分定义:

 

对于二维图像函数f(x,y)是一样的,只不过我们将沿着两个空间轴处理偏微分。

数字图像的边缘在灰度上常常类似于斜坡过渡,这样就导致图像的一阶微分产生较粗的边缘。因为沿着斜坡的微分非0。另一方面,二阶微分产生由0分开的一个像素宽的双边缘。由此我们得出结论,二阶微分在增前细节方面比一阶微分好得多。

 

二阶微分-拉普拉斯算子

 我们要的是一个各向同性滤波器,这种滤波器的响应与滤波器作用的图像的突变方向无关。也就是说,各向同性滤波器是旋转不变的,即将原图像旋转后进行滤波处理的结果和先对图像滤波然后再旋转的结果相同。

最简单的各向同性微分算子,即拉普拉斯算子

一个二维图像函数f(x,y)的拉普拉斯算子定义为:

任意阶微分都是线性操作,所以拉普拉斯变换也是一个线性算子。于是:

对应的滤波模板为下图a,这是一个旋转90°的各向同性模板,另外还有对角线方向45°的各向同性模板,还有其他两个常见的拉普拉斯模板。a、b与c、d的区别是符号的差别,效果是等效的

拉普拉斯是一种微分算子,因此它强调的是图像中灰度的突变。将原图像和拉普拉斯图像叠加,可以复原背景特性并保持拉普拉斯锐化处理的效果。如果模板的中心系数为负,那么必须将原图像减去拉普拉斯变换后的图像,从而得到锐化效果。所以,拉普拉斯对图像增强的基本方法可表示为下式:

其中,f(x,y)和g(x,y)分别是输入图像和锐化后的图像,如果使用a、b滤波模板则c=-1,如果使用另外两个,则c=1

 

 1 "空间滤波-锐化-拉普拉斯算子"
 2 import numpy as np
 3 import cv2
 4 
 5 
 6 # 定义函数,实现拉普拉斯算子
 7 def Laplace(src):
 8     template = np.ones((3, 3), dtype=np.float32)  # 模板
 9     template[1, 1] = -8.0
10     addBorderImg = cv2.copyMakeBorder(src, 1, 1, 1, 1, cv2.BORDER_REFLECT_101)  #扩充边界
11     row, col = src.shape
12     dst = np.zeros((row, col), dtype=np.int16)
13     for i in range(row):
14         for j in range(col):
15             temp = addBorderImg[i:i+3, j:j+3]
16             dst[i, j] = np.sum(template*temp)
17     return dst
18 
19 
20 inputImg = cv2.imread(r'F:\program_study\Python\data\Fig0217(a).tif', cv2.IMREAD_GRAYSCALE)
21 cv2.imshow('input', inputImg)
22 
23 laplaceImg = Laplace(inputImg)  # 拉普拉斯滤波后的图像
24 laplaceImg1 = laplaceImg
25 laplaceImg1[laplaceImg1 < 0] = 0
26 laplaceImg1 = np.uint8(laplaceImg1)
27 cv2.imshow('laplace', laplaceImg1)
28 
29 outputImg = np.zeros(inputImg.shape, dtype=np.float32)  # 锐化图像
30 outputImg = inputImg - laplaceImg
31 outputImg[outputImg < 0] = 0
32 outputImg[outputImg > 255] = 255
33 outputImg = np.uint8(outputImg)
34 cv2.namedWindow('output', cv2.WINDOW_NORMAL)
35 cv2.imshow('output', outputImg)
36 
37 cv2.waitKey(0)
38 cv2.destroyAllWindows()
拉普拉斯算子

 

 

 

非锐化掩蔽和高提升滤波

处理过程:

1、平滑原图像

2、原图像减去1得到的平滑图像(得到的差值图像称为模板)

3、将模板加到原图像上

过程2,为平滑图像

过程3

 k为权重系数,k=1是非锐化掩蔽;k>1是高提升滤波;k<1则不强调非锐化模板的贡献

 

一阶微分-梯度

函数f(x, y)在(x,y)出的梯度定义为一个二维列向量它指出了函数在(x,y)处的最大变化率方向

向量的幅度值(长度)表示为M(x, y),即

它是最大变化率在(x,y)处的值,M(x,y)是与原图像大小相同的图像,通常称为梯度图像

在某些时候,用绝对值近似计算幅度值:

  计算一阶微分

  1、Roberts交叉梯度算子[1965]  

  gx = (z9 - z5)   和   gy = (z8 - z6)

  

  2、Sobel算子

  gx = (z7 + 2z8 + z9) - (z1 + 2z2 + z3)

  gy = (z3 + 2z6 + z9) - (z1 + 2z4 + z7)

  

  用模板计算出一阶微分后,再根据3.6-11或3.6-12计算梯度图像M(x, y)

posted @ 2018-04-09 09:33  Laumians  阅读(8690)  评论(0编辑  收藏  举报