图像锐化是通过增强图像的边缘和细节来提高图像的清晰度的操作。这种操作通常用于将模糊或不清晰的图像改进为更清晰的图像。由于微分是对函数局部变化率的一种描述,因此图像锐化算法的实现可基于空间微分。
一阶微分算子
对任意一阶微分的定义必须满足两点:灰度不变的区域微分值为0;在灰度变化的区域微分值非0。由于处理的是离散情况,微分用差分近似。对于一维函数,一阶微分基本定义:
一维微分可用导数符号。二维图像 将沿着两个空间坐标轴求解一阶微分,分别对x,y求偏导:
,
二维图像的梯度是一个二维向量:
梯度的幅值:
M(x,y)是梯度向量方向变化率在(x,y)处的值。
这里使用3*3邻域灰度值表示z1,z2...z9,其中z5表示f(x,y),依次类推。
二维图像最简单的一阶微分近似:
根据罗伯特观点,边缘检测器应具有:
产生边缘清晰;背景尽可能减小噪声;边缘强度应尽可能接近人类的感知。并提出两个交叉差分表示:
梯度幅值为:
正负对角线梯度算子:
罗伯特边缘图像和梯度图像代码:
from skimage import io,filters
from matplotlib import pyplot as plt
from skimage.color import rgb2gray
#原始图像
I=io.imread('demo.jpg')
I_gray=rgb2gray(I) #灰度转换
#robert交叉梯度算子
I_rob_pos=filters.roberts_pos_diag(I_gray)
I_rob_neg=filters.roberts_neg_diag(I_gray)
I_rob=filters.roberts(I_gray)
#显示
plt.subplot(121)
plt.title("gray")
plt.imshow(I_gray,cmap='gray')
plt.subplot(122)
plt.title("Pos")
plt.imshow(I_rob_pos,cmap='gray')
plt.show()
plt.subplot(121)
plt.title("Neg")
plt.imshow(I_rob_neg,cmap='gray')
plt.subplot(122)
plt.title("Rob")
plt.imshow(I_rob,cmap='gray')
plt.show()
原始图像和正对角线边缘图像:
负对角先边缘图像和罗伯特梯度图像:
使用交叉梯度算子可以得到梯度图像M(x,y),将梯度图像以一定比例叠加到原始图像f(x,y)即可得到锐化图像:
c为锐化强度系数。
由于奇数模板有对称中心,更易于实现。使用3*3模板对 ,进行表达:
=
=
Sobel边缘图像和梯度图像:
from skimage import io,filters
from matplotlib import pyplot as plt
from skimage.color import rgb2gray
#原始图像
I=io.imread('demo.jpg')
I_gray=rgb2gray(I) #灰度转换
#sobel算子
I_h=filters.sobel_h(I_gray)
I_v=filters.sobel_v(I_gray)
I_sobel=filters.sobel(I_gray)
#显示
plt.subplot(121)
plt.title("gray")
plt.imshow(I_gray,cmap='gray')
plt.subplot(122)
plt.title("H")
plt.imshow(I_h,cmap='gray')
plt.show()
plt.subplot(121)
plt.title("V")
plt.imshow(I_v,cmap='gray')
plt.subplot(122)
plt.title("Sobel")
plt.imshow(I_sobel,cmap='gray')
plt.show()
原图与水平sobel边缘图像:
竖直sobel边缘图像和sobel梯度图像: