拉普拉斯(laplacian)滤波实现图像锐化分析
2015-03-22 22:25
471 查看
先上个简单的示例,看MATLAB中拉普拉斯滤波器是如何实现的:
令原图f=magic(3)
f =
8 1 6
3 5 7
4 9 2
掩膜采用标准Laplacian掩膜:w=fspecial('laplacian',0)
w =
0 1 0
1 -4 1
0 1 0
n=imfilter(f,w,'replicate');默认参数为'same',结果为:
n =
-12 16 -4
8 0 -8
4 -16 12
采用'full'参数,n=imfilter(f,w,'replicate','full');结果为:
n =
0 -7 12 -5 0
-5 -12 16 -4 1
6 8 0 -8 -6
-1 4 -16 12 5
0 5 -12 7 0
=========
实现过程:
①模板旋转180度(和原来一样,因为是对称的模板)
w' =
0 1 0
1 -4 1
0 1 0
②图像边界填充,这里采用'replicate'方式:
>> k=padarray(m,[2 2],'replicate')
k =
8 8 8 1 6 6 6
8 8 8 1 6 6 6
8 8 8 1 6 6 6
3 3 3 5 7 7 7
4 4 4 9 2 2 2
4 4 4 9 2 2 2
4 4 4 9 2 2 2
(***背景为原始图像)
③进行卷积运算:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/08/7be59e4195756b86a0d0da959e7d2d8e)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/08/1b0f0c751dc93054c8552dfde21e8586)
……(逐步计算,直至模板全部移过图像)
④去除边界,得到结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/08/4c238eb8aab895acc4cde26e4e826055)
上述即用laplacian滤波模板进行图像滤波的过程(实际上是一个空间卷积操作)。
以一幅uint8类灰度图像为例,原图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/08/570faf32e660423d202b802382fdf60e)
直接使用laplacian滤波模板滤波:
>> f=imread('moon.tif');
>> w=fspecial('laplacian',0)
>> g1=imfilter(f,w,'replicate');
>> imshow(g1)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/08/fd550336afc1e52812c2327d7b49caa2)
效果并不理想,因为原图是一幅uint8类图像,输出结果仍为uint8类,所有像素均为正值,而拉普拉斯滤波模板中存在负值,变换结果中的所有负值被截掉了。
解决此问题,须先进行类型变换:
f2=im2double(f); %将f转换为归一化的double类图像
然后再进行滤波:
>> g2=imfilter(f2,w,'replicate');
>> imshow(g2,[])
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/08/c6a94cce1ee9c1f8317833128cc46b1a)
此图像即含有负值的滤波结果,相比于原图,丢失了一些灰度色调,故还需用原图减去此滤波结果(以还原失去的灰度色调):
>> g=f2-g2;figure,imshow(g)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/08/bbaca59bd98036b8370fe3ea5d7cd02c)
比原图清晰了很多。
另外,使用考虑了对角线元素的中心为8的拉普拉斯算子还可以获得更为清晰的图像:
>> w8=[1 1 1;1 -8 1;1 1 1]
w8 =
1 1 1
1 -8 1
1 1 1
>> g8=f-imfilter(f,w8,'replicate');
>> figure,imshow(g8)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/08/340d215a59c91ace574077a0c2aa72ca)
===========
拉普拉斯算子的数学定义:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/08/b5d1537b3ebb0f1d52b9ebca1edb8958)
式(2)为式(1)的数字近似,式(3)中g(x,y)为目标图像,f(x,y)为原始图像。c为1(当掩膜中心系数为正时),c为-1(当掩膜中心系数为负时)
由于laplacian算子是微分操作符,所以它会使图像锐化,并使常量区域为0。
后记:关键点是模板的选取。
令原图f=magic(3)
f =
8 1 6
3 5 7
4 9 2
掩膜采用标准Laplacian掩膜:w=fspecial('laplacian',0)
w =
0 1 0
1 -4 1
0 1 0
n=imfilter(f,w,'replicate');默认参数为'same',结果为:
n =
-12 16 -4
8 0 -8
4 -16 12
采用'full'参数,n=imfilter(f,w,'replicate','full');结果为:
n =
0 -7 12 -5 0
-5 -12 16 -4 1
6 8 0 -8 -6
-1 4 -16 12 5
0 5 -12 7 0
=========
实现过程:
①模板旋转180度(和原来一样,因为是对称的模板)
w' =
0 1 0
1 -4 1
0 1 0
②图像边界填充,这里采用'replicate'方式:
>> k=padarray(m,[2 2],'replicate')
k =
8 8 8 1 6 6 6
8 8 8 1 6 6 6
8 8 8 1 6 6 6
3 3 3 5 7 7 7
4 4 4 9 2 2 2
4 4 4 9 2 2 2
4 4 4 9 2 2 2
(***背景为原始图像)
③进行卷积运算:
……(逐步计算,直至模板全部移过图像)
④去除边界,得到结果:
上述即用laplacian滤波模板进行图像滤波的过程(实际上是一个空间卷积操作)。
以一幅uint8类灰度图像为例,原图:
直接使用laplacian滤波模板滤波:
>> f=imread('moon.tif');
>> w=fspecial('laplacian',0)
>> g1=imfilter(f,w,'replicate');
>> imshow(g1)
效果并不理想,因为原图是一幅uint8类图像,输出结果仍为uint8类,所有像素均为正值,而拉普拉斯滤波模板中存在负值,变换结果中的所有负值被截掉了。
解决此问题,须先进行类型变换:
f2=im2double(f); %将f转换为归一化的double类图像
然后再进行滤波:
>> g2=imfilter(f2,w,'replicate');
>> imshow(g2,[])
此图像即含有负值的滤波结果,相比于原图,丢失了一些灰度色调,故还需用原图减去此滤波结果(以还原失去的灰度色调):
>> g=f2-g2;figure,imshow(g)
比原图清晰了很多。
另外,使用考虑了对角线元素的中心为8的拉普拉斯算子还可以获得更为清晰的图像:
>> w8=[1 1 1;1 -8 1;1 1 1]
w8 =
1 1 1
1 -8 1
1 1 1
>> g8=f-imfilter(f,w8,'replicate');
>> figure,imshow(g8)
===========
拉普拉斯算子的数学定义:
式(2)为式(1)的数字近似,式(3)中g(x,y)为目标图像,f(x,y)为原始图像。c为1(当掩膜中心系数为正时),c为-1(当掩膜中心系数为负时)
由于laplacian算子是微分操作符,所以它会使图像锐化,并使常量区域为0。
后记:关键点是模板的选取。
相关文章推荐
- 简单的图像频域滤波和频域锐化的matlab实现
- 拉普拉斯滤波实现图像增强
- opencv入门学习之六:拉普拉斯Laplacian变换锐化图像
- 图像边缘检测之拉普拉斯(Laplacian)C++实现
- 【数字图像处理】实现拉普拉斯锐化
- 拉普拉斯滤波实现图像增强
- matlab 实现数字图像的傅立叶变换及滤波锐化
- (转)拉普拉斯滤波实现图像增强
- 基础图像处理之混合空间增强——(Java:拉普拉斯锐化、Sobel边缘检测、均值滤波、伽马变换)
- 拉普拉斯锐化图像
- C#图像处理类(使用此类可实现生成锐化效果、黑白效果和灰度效果)
- opencv实现图像的灰度转换,均值滤波,实现图像的显示和存储
- 数据图像实验四:图像滤波c++实现
- 现有如下图所示人物图像,编程实现频率域滤波去噪。
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
- 图像滤波处理:空间滤波器实现
- 图像sobel、laplacian、canny边缘检测算法基础实现
- 图像的锐化的实际使用以及实现
- opencv实现图像邻域均值滤波、中值滤波、高斯滤波
- c#实现图像图像卷积与滤波——高斯平滑