沈阳理工课设数字图像处理图像锐化二阶微分设计.docx
《沈阳理工课设数字图像处理图像锐化二阶微分设计.docx》由会员分享,可在线阅读,更多相关《沈阳理工课设数字图像处理图像锐化二阶微分设计.docx(8页珍藏版)》请在冰豆网上搜索。
沈阳理工课设数字图像处理图像锐化二阶微分设计
摘要
本次课设主要内容是用二阶微分的方法实现微分算子来将图像锐化。
传统的边缘检测就是利用了边缘是图像上灰度变化最剧烈的地方这一特点,对图像各个像素点进行微分来确定边缘像素点。
本课题利用MATALB编程分析相同一张图片在不同的二阶微分算子处理后得到不同的效果。
首先分析二阶微分的算法,通过调用imfilter(),edge(),fspecial()等函数实现拉普拉斯算子,log算子的图像锐化处理。
通过利用模板实现拉普拉斯算子和Wallis算子。
分析得到锐化后的图片通过比对效果可以得到不同二阶微分的处理优缺点。
关键词图象锐化;二阶微分;MATLAB
目录
1图像锐化二阶微分的设计目的1
2图像锐化二阶微分的设计要求1
3相关知识1
4基于二阶微分的图像增强设计原理2
4.1laplacian算子及Log算子2
4.2Wallis算法分析3
5二阶微分程序3
5.1算子程序代码3
5.1.1Laplacian算子代码4
5.1.2Log算子代码4
5.1.3Laplacian算法模板代码4
5.1.4Wallis算法代码5
5.2运行结果6
6结果分析7
图像锐化程序设计—二阶微分的图像增强
1图像锐化二阶微分的设计目的
(1)理解并掌握图像锐化的方法。
(2)加深对图像的锐化处理—二阶微分基本理论知识的理解。
(3)掌握数字图像处理基于二阶微分的图像增强的过程及其应用。
2图像锐化二阶微分的设计要求
(1)掌握基于二阶微分的图像增强的相关知识、概念清晰。
(2)熟练使用MALAB,合理设计程序,并能够正确运行,得到恰当的结果。
3相关知识
图像处理并不仅限于对图像进行增强、复原和编码,还有对图像进行分析。
图像分析旨在对图像进行描述,即用一组数或符号表征图像中目标区的特征、性质和相互间的关系,为模式识别提供基础。
描述一般针对图像或景物中的特定区域或目标。
边缘检测是图像分析中的重要内容也是最基本的特征。
所谓边缘,是指周围像素灰度有阶跃变化货屋顶变化的那些像素的集合。
边缘广泛存在于物体于背景之间、物体与物体之间、基元与基元之间,因此它也是图像分割所依赖的重要特征[1]。
两个具有不同灰度值的相邻区域之间总存在边缘。
常见的边缘点有:
①阶梯形边缘(Step-edge),即从一个灰度到比它高(或低)好多的另一个灰度;②屋顶形边缘(Roof-edge),它的灰度慢慢增加(减少)到一定程度然后慢慢减小(增加);③线形边缘(Line-edge),它的灰度线性变化中出现灰度脉冲[2]。
传统的边缘检测就是利用了边缘是图像上灰度变化最剧烈的地方这一特点,对图像各个像素点进行微分来确定边缘像素点。
一阶微分图像的峰值处对应着图像的边缘点。
根据数字图像的特点,处理图像过程中常采用差分来代替导数运算,对于图像的简单一阶导数运算,由于具有固定的方向性,只能检测特定方向的边缘,所以不具有普遍性。
为了克服一阶导数的缺点,我们定义图像的梯度算子为:
(3.1)
这是图像处理中最常用的一阶微分算法,式子中的F(j,k)表示图像的灰度值,图像梯度的最重要的性质是梯度的方向在图像灰度的最大变化率上,这恰好可以反映出图像边缘上的灰度变化[4]。
图像边缘提取的常用梯度算子有Robert算子、Sobel算子、Prewitt算子、拉普拉斯算子等。
这里研究分析拉普拉斯算子和Wallis算法。
4基于二阶微分的图像增强设计原理
4.1laplacian算子及Log算子
拉普拉斯算子是一种二阶边缘检测算子,它是一个线性的、移不变的算子。
定义为:
(4.1)
图像经过二阶微分之后,在边缘出产生一个陡峭的零交叉,根据这个零交叉判断边缘。
拉普拉斯算子一般采用的模板为:
在laplacian算子中用到fspecial函数用于建立预定义的滤波算子,h=fspecial(type,para)其中type指定算子的类型,para指定相应的参数;laplacian为拉普拉斯算子,参数alpha用于控制算子形状,取值范围为(0,1),默认值为0.2。
由于图像边缘处的一阶微分的极值点,图像边缘处的二阶微分应为零,确定零点的位置要比确定极值点容易得多,也比较精确。
但二阶微分对噪声更为敏感[5]。
因此,在通常情况下,在对图像进行拉普拉斯算子边缘处理前,先对图像进行平滑滤波器处理,一般采用的是高斯滤波器[6]。
把高斯平滑滤波器和拉普拉斯锐化滤波器结合起来,先平滑掉噪声,再进行边缘检测的方法叫做高斯拉普拉斯算子(简称Log算子)。
常用的Log算子是5×5的模块,如下所示:
在Log算子中,对边缘判断采用的技术是零交叉检测,把零交叉检测推广一下,我们只要在检测前用指定的滤波器对图像进行滤波,然后再寻找零交叉点作为边缘。
4.2Wallis算法分析
考虑到人的视觉特性中包含一个对数环节,因此在锐化时,加入对数处理的方法来改进。
其运算公式如下所示:
s(4.2)
(4.3)
该模板是将Laplacian微分算子和对数算子结合的一种锐化算子。
因为人眼对画面信号的处理过程中有一个近似的对数运算环节,解决了Laplacian微分算子对画面比较暗的部分锐化比较弱的缺陷。
在前面的算法公式中注意以下几点:
a.为了防止对0取对数,计算时实际上是用
;
b.因为对数值很小log(256)=5.45,所以计算时用
。
5二阶微分程序
5.1算子程序代码
代码包含拉普拉斯算子以及不同的方法实现和Wallis算法的实现。
其中拉普拉斯算子有通过函数调用实现的,和使用模板实现的,以及高斯平滑滤波器和拉普拉斯锐化滤波器结合起来的高斯拉普拉斯算子(简称Log算子)。
5.1.1Laplacian算子代码
clear;
I=imread('C:
\Users\远方\Desktop\12345.jpg');%获取图像地址,读取图像。
H=fspecial('laplacian',0);%利用fspecial()函数建立预定义的滤波算子,选取laplacian类型。
由于fspecial仅能产生垂直方向sobel算子,产生Laplacian算子alpha参数选择0。
sharpened=imfilter(I,H,'replicate');%利用imfilter()函数平滑图像,消除噪声。
subplot(1,2,1);imshow(I);title('原图');
subplot(1,2,2);imshow(sharpened);title('锐化图像');
5.1.2Log算子代码
I1=imread('C:
\Users\远方\Desktop\12345.jpg');%获取图像地址,读取图像。
I2=rgb2gray(I1);%edge只处理灰度图像故以下需要转换。
I=im2double(I2);%把图像数据类型转换为double类型。
BW1=edge(I,'log');%以自动阈值选择法对图像进行Log算子检测
[BW1,thresh1]=edge(I,'log');%返回当前Log算子边缘检测的阈值
disp('Log算子自动选择的阈值为:
')
disp(thresh1)
subplot(121),imshow(BW1);title('自动阈值的Log算子边缘检测')
BW1=edge(I,'log',0.005);%以阈值为0.005对图像进行Log算子检测
subplot(122),imshow(BW1);title('阈值为0.005的Log算子边缘检测')
5.1.3Laplacian算法模板代码
I=imread('C:
\Users\远方\Desktop\12345.jpg');%获取图像地址,读取图像。
[H,W]=size(I);
J1=double(I);%把图像数据类型转换为double类型。
h=ones(3,3)/9;%定义邻域为3*3。
M=imfilter(J1,h);%对有噪声图像进行3×3方形窗口均值滤波
J=M;
fori=2:
H-1
forj=2:
W-1
J(i,j)=4*M(i,j)-[M(i+1,j)+M(i-1,j)+M(i,j+1)+M(i,j-1)];
end;%利用模板l=[0-10;-14-1;0-10];
end;
subplot(1,2,1);imshow(I);title('原图');
subplot(1,2,2);imshow(uint8(J));title('锐化图像');
5.1.4Wallis算法代码
I=imread('C:
\Users\远方\Desktop\12345.jpg');%获取图像地址,读取图像。
I=im2double(I);%把图像数据类型转换为double类型。
[heightwidthR]=size(I);
fori=2:
height-1
forj=2:
width-1II(i,j)=log10(I(i,j)+1)-0.25*(log10(I(i-1,j)+1)+log10(I(i+1,j)+1)+log10(I(i,j-1)+1)+log10(I(i,j+1)+1));
end%利用模板进行计算
end
min1=min(II);
min2=min(min1);%寻找最小值
fori=2:
height-1
forj=2:
width-1
II(i,j)=46*II(i,j)-min2+0.4;
end
end
fori=1:
height-1
forj=1:
width-1
if(II(i,j)<-0.035)
II(i,j)=1;
elseII(i,j)=0;%算子在边缘部分是大于零,非边缘部分小于零
end
end
end
figure;
subplot(1,2,1);imshow(I);title('原图');
subplot(1,2,2);imshow(II,[]);title('锐化图像');
5.2运行结果
通过理论与编程实践,我完成了这次设计的任务,通过锐化处理图片,得到如下结果,其运行结果如图所示:
(1)通过Laplacian算子锐化的效果图5.1如下所示:
图5.1Laplacian算子锐化的效果图
根据结果可以得出:
由上图可以看出锐化后的图像相比原来的图像轮廓更加清晰,特征更加明显。
叶脉等细节部分略有体现。
(2)通过Log算子提取边缘信息锐化后的效果图5.2如下所示:
图5.2Log算子提取边缘信息锐化后的效果图
根据结果可以得出,图像的锐化处理可以使图像的边缘更加清晰。
自动分配的阈值是0.0096。
阈值为0.005的图像叶脉看到的边缘信息比自动分配的要多。
(3)通过Laplacian算法模板锐化后的效果图5.3如下所示:
图5.3Laplacian算法模板锐化后的效果图
根据结果可以得出:
采用3*3的方形窗口均值滤波消除图像的噪声干扰,得到的图像因此比较干净,同时轮廓的信息也比较清晰。
细节部分也有所体现。
(4)通过Wallis算法锐化后的效果图5.4如下所示:
图5.4Wallis算法锐化后的效果图
根据结果可以得出:
锐化的图像整体边缘轮廓清晰,图像的暗区部分所体现的叶脉细节也比较丰富。
但是图像边缘的部分线条有些缺失。
6结果分析
根据结果可以分析得出:
利用拉普拉斯算子锐化的图像能够得到清晰的轮廓,但是在细节信息上如叶脉等处不能有效体现,边缘线条体现的连续性较差。
利用Log算子提取边缘信息,细节部如叶脉叶片等体现的很充分,且边缘线条很明显。
但是分配的阈值0.005效果比自动分配的0.096要好些。
利用拉普拉斯算子模板锐化的图像,也能得到信息的轮廓边缘,但是通过3*3的平滑滤波消除噪声使图像也现的有些平滑,或可通过调整平滑滤波的模板进行调节。
利用Wallis算发得到的锐化图像边缘轮廓清晰,且暗区的细节体现比拉普拉斯算法要好。
参考文献
[1]许波,刘征.MATLAB工程数学应用.[M]北京:
清华大学出版社,2000:
89-96
[2]李庆杨,关治,白峰杉.数值计算原理.[M]北京:
清华大学出版社,2000:
66-78
[3]周金萍.图像处理与应用实例.[M]北京:
科学出版社,2003:
99-150
[4]邓华.MATLAB应用实例详解.[M]北京:
人民邮电出版社,2003:
22-29
[5]郝文化.MATLAB图形图像处理.[M]北京:
中国水利水电出版社200430-56
[6]余成波.数字图像处理及MATLAB实现.[M]北京:
重庆大学出版社200345-89