赞
踩
在图像增强中,平滑是为了消除图像中噪声的干扰,或者降低对比度,与之相反,有时为了强调图像的边缘和细节,需要对图像进行锐化,提高对比度。
图的边缘是指在局部不连续的特征。
简要介绍一下原理:
拉普拉斯锐化图像是根据图像某个像素的周围像素到此像素的突变程度有关,也就是说它的依据是图像像素的变化程度。我们知道,一个函数的一阶微分描述了函数图像是朝哪里变化的,即增长或者降低;而二阶微分描述的则是图像变化的速度,急剧增长下降还是平缓的增长下降。那么据此我们可以猜测出依据二阶微分能够找到图像的色素的过渡程度,例如白色到黑色的过渡就是比较急剧的。
或者用官方点的话说:当邻域中心像素灰度低于它所在的领域内其它像素的平均灰度时,此中心像素的灰度应被进一步降低,当邻域中心像素灰度高于它所在的邻域内其它像素的平均灰度时,此中心像素的灰度应被进一步提高,以此实现图像的锐化处理。
应用:
运用拉普拉斯可以增强图像的细节,找到图像的边缘。但是有时候会把噪音也给增强了,那么可以在锐化前对图像进行平滑处理。
下面我们来推导二阶微分与像素的关系:
先看一阶偏微分和推出的二元函数微分:
一阶微分法能够用来检测边缘是否存在。
那么二阶微分法,也就是拉普拉斯算子就可以确定边缘的位置。(有的文章中称下式为拉普拉斯掩膜中心系数)
这样可以找到一个模板矩阵:
这个成为四邻域也就是上面的二阶微分法
这个是八邻域。
【注】从上面的两种模板中就可以看出,如果一个黑色平面中有一个白点,那么模板矩阵可以使这个白点更亮。由于图像边缘就是灰度发生跳变的区域,所以拉普拉斯模板对边缘检测很有用。
八邻域的表示法为:
将算得的值替换原(x,y)处的像素值,可以得到类似边界的地方,然后根据下式得到锐化图像:
下面是我参考别人的代码,用python实现了一下。
# -*- coding: utf-8 -*- # Author : Vincent # Time : 2018-05-19 # Func : Laplacian Sharpen from PIL import Image import numpy as np # 读入原图像 img = Image.open('Lena.jpeg') # img.show() # 为了减少计算的维度,因此将图像转为灰度图 img_gray = img.convert('L') img_gray.show() # 得到转换后灰度图的像素矩阵 img_arr = np.array(img_gray) h = img_arr.shape[0] # 行 w = img_arr.shape[1] # 列 # 拉普拉斯算子锐化图像,用二阶微分 new_img_arr = np.zeros((h, w)) # 拉普拉斯锐化后的图像像素矩阵 for i in range(2, h-1): for j in range(2, w-1): new_img_arr[i][j] = img_arr[i+1, j] + img_arr[i-1, j] + \ img_arr[i, j+1] + img_arr[i, j-1] - \ 4*img_arr[i, j] # 拉普拉斯锐化后图像和原图像相加 laplace_img_arr = np.zeros((h, w)) # 拉普拉斯锐化图像和原图像相加所得的像素矩阵 for i in range(0, h): for j in range(0, w): laplace_img_arr[i][j] = new_img_arr[i][j] + img_arr[i][j] img_laplace = Image.fromarray(np.uint8(new_img_arr)) img_laplace.show() img_laplace2 = Image.fromarray(np.uint8(laplace_img_arr)) img_laplace2.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。