数字图像处理大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、下图是一用于干涉原理进行测试的干涉场图像,要求判读条纹的间距,请给
出图像处理的方案并说明每一步的作用及其对其它处理步骤可能产生的影响。
解:步骤与思路:
○1.进行模糊处理,消除噪声
○2.边缘检测,进行图像增强处理
○3.二值化图像,再进行边缘检测,能够得到很清晰的边界。
○4.采用横向标号法,根据值为1像素在标号中的相邻位置可以确定间距
I=imread('xz mjt.bmp');
I1=medfilt2(I); %对图像中值滤波
imshow(I1);
[m,n]=size(I1);
for i=1:m
for j=1:n
if(I1(i,j)<100) %阈值为100
I1(i,j)=255;
else
I1(i,j)=0; %进行二值化
end
end
end
figure;
imshow(I1);
Y1=zeros(1,25);
y2=y1;
c=y2;
i=100;
for j=1:1200
if (I1(i,j)==255&&I1(i,j+1)==0)
Y1=j+1;
end
if (I1(i,j)==0&&I1(i,j+1)==255)
Y2=j;
end
end
for i=1:25
c=Y2(i)-Y1(i)
end
c %找出每两个条纹之间的距离
2. 现有8个待编码的符号m0,……,m7,它们的概率分别为0.11,0.02,0.08,0.04,0.39,0.05,0.06,0.25,利用哈夫曼编码求出这一组符号的编码并画出哈夫曼树。
3. 请以图像分割方法为主题,结合具体处理实例,采用期刊论文格式,撰写一篇小论文。
各种算子对图像进行边缘检测效果的研究
图像分割是根据需要将图像划分为有意义的若干区域或部分的图像处理技术。
通过边缘检测在Matlab 中实现方法,及用四叉数分解函数进行区域分割的方法,掌握了Matlab 区域操作函数的使用和图像分析和理解的基本方法,并学到了'roberts','sobel','prewitt','canny','log'算子对图像进行边缘检测的不同效果。
关键词:图像分割 Prewitt 算子 Sobel 算子 log 算子 canny 算子
一、前言
图像分割技术( 英文: image segmentation): 将图像分成互不重叠,具有各自特征的区域。
这里的特性可以是灰度、颜色或纹理等。
图像分割应满足:①分割后所得到的区域总和应覆盖整个图像;②各区域之间互不重叠;③同一区域的像元应具有某种共同特征,这些特征可以是像元值、颜色、纹理、形状等;④同一目标(类别)可以对应于一个区域,也可以对应于多个区域。
图像分割方法主要有基于边界的分割技术和基于区域的分割方法。
图像分割(image segmentation ):根据需要将图像划分为有意义的若干区域或部分的图像处理技术。
图像的边缘是图像最基本的特征,它是灰度不连续的结果。
通过计算一阶导数或二阶导数可以方便地检测出图像中每个像素在其邻域内的灰度变化,从而检测出边缘。
图像中具有不同灰度的相邻区域之间总存在边缘。
边缘检测可借助微分算子(包括梯度算子和拉普拉斯算子)在空间域通过模板卷积来实现。
二、梯度算子
1 . Prewitt 和Sobel 算子
常用的梯度算子如表4-3所示(星号代表模板中心)。
梯度算子一般由两个模板组成,分别对应梯度的两个偏导数,用于计算两个相互垂直方向上的边缘响应。
在计算梯度幅度时,可使用式(4-25)或式(4-26),在适当的阈值下,对得到梯度图像二值化即可检测出有意义的边缘。
Krisch 算子由8个模板组成,其它模板可以由其中一个模板绕其中心旋转得到,每个模板都对特定的边缘方向作出最大响应。
当把最大响应的模板的序号输出时,就构成了边缘方向的编码。
Prewitt 算子和Sobel 算子也可以像Krisch 算子那样,扩展到两个对角方向,使其在对角方向上作出最大响应。
Prewitt 和Sobel 算子在两个对角方向上的模板如图1所示。
⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡*---110101011⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡--*-011101110
(a) Prewitt 算子45度和-45度方向模板
(b) Sobel 算子45度和-45度方向模板
图1 Prewitt 算子和Sobel 算子检测对角方向边缘的模板
图2(b)为用Sobel 水平模板对图2(a)进行卷积运算得到的水平梯度图,它对垂直边缘有较强的响应。
图2(c)为用Sobel 垂直模板对图2(a)进行卷积运算得到的垂直梯度图,它对水平边缘有较强的响应。
图5-13(d)为Sobel
算子梯度图。
图2 Sobel 算子边缘检测
2. 高斯-拉普拉斯(LOG)算子
常用的两个拉普拉斯模板见图3(a)和(b)。
其中,第一个模板在水平和垂直4个方向上具有各向同性,而第二个模板在水平、垂直和对角8个方向上具有各向同性。
然而,拉普拉斯算子一般不直接用于边缘检测,因为它作为一种二阶微分算子对噪声相当敏感,常产生双边缘,且不能检测边缘方向。
主要利用拉普拉斯算子的过零点性质确定边缘位置,以及根据其值的正负来确定边缘像素位于边缘的暗区还是明区。
⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡*---210101012⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡--*-012101210
图3 LOG 算子剖面及其常用的5×5模板
高斯-拉普拉斯(LOG)算子把高斯平滑滤波器和拉普拉斯锐化滤波器结合起来实现边缘检测,即先通过高斯平滑抑制噪声,以减轻噪声对拉普拉斯算子的影响,再进行拉普拉斯运算,通过检测其过零点来确定边缘位置。
因此,高斯-拉普拉斯算子是一种性能较好的边缘检测器。
二维高斯平滑函数表示如下:
其中,σ是高斯分布的均方差,图像被模糊的程度与其成正比。
令r 2=x 2+y 2,上式对r 求二阶导数来计算其拉普拉斯值,则有
3. Canny 边缘检测
Canny 边缘检测算子是一个非常普遍和有效的算子。
Canny 算子首先对灰度图像用均方差为σ的高斯滤波器进行平滑,然后对平滑后图像的每个像素计算梯度幅值和梯度方向。
梯度方向用于细化边缘,如果当前像素的梯度幅值不高于梯度方向上两个邻点的梯度幅值,则抑制该像素响应,从而使得边缘细化,这种方法称之为非最大抑制(Nonmaximum Suppression)。
该方法也可以结合其它边缘检测算子来细化边缘。
三、实验内容
1.边缘检测
(a)使用edge 函数对图像‘trees.tif ’进行边缘检测。
I=imread('trees.tif');
⎪⎪⎭
⎫ ⎝⎛+--=2222exp ),(σy x y x h ⎪⎪⎭⎫ ⎝⎛-⎪⎪⎭⎫ ⎝⎛--=∇2242222exp )(σσσr r r h
imshow(I)
bw1=edge(I,'roberts');
bw2=edge(I,'sobel');
bw3=edge(I,'prewitt');
bw4=edge(I,'canny');
bw5=edge(I,'log');
figure,imshow(bw1)
figure,imshow(bw2)
figure,imshow(bw3)
figure,imshow(bw4)
figure,imshow(bw5)
运行结果:
图一边缘检测
(b)要求同时比较‘roberts',‘sobel',’prewitt',‘canny',’log'算子检测效果。
edge函数提供的最有效的边缘检测方法是canny方法。
优点:
使用两种不同的阈值分别检测强、弱边缘,并且仅当弱边缘与强边缘相连时,
才将弱边缘包含在输出图像中。
该方法不易受噪声干扰,能够在噪声和边缘间取得较好的平衡,检测到真正的弱边缘。
2. 区域操作
使用区域选择函数roicolor, 区域滤波函数roifilt2和区域填充函数roifilld对图像‘coins.png’或‘liftingbody.png’进行区域操作。
I=imread'coins.png’);
imshow(I)
BW=roipoly;
figure,imshow(BW)
h=fspecial('unsharp');
I2=roifilt2(h,I,BW);
figure,imshow(I2)
I3=roifill;
figure,imshow(I3);
I=imread('liftingbody.png');
imshow(I)
c=[222 272 300 270 221 194];
r=[21 21 75 121 121 75];
BW=roipoly(I,c,r);
figure,imshow(BW)
H=fspecial('unsharp');
J1=roifilt2(H,I,BW);
figure,imshow(J1)
J2=roifill(I,c,r);
figure,imshow(J2)
运行结果:
图二区域操作
3.区域分割
I=imread(' trees.tif');
I=I(1+[1:128],1+[1:128]);
figure,imshow(I)
S=qtdecomp(I,0.2);
figure,imshow(S)
S=qtdecomp(I,0.1);
figure,imshow(S)
图三区域分割
四、实验结果与分析
1.边缘检测
(1)使用edge函数对图像‘trees.tif’进行边缘检测。
(2)比较‘roberts',‘sobel',’prewitt',‘canny',‘log'算子的检测效果:Robert算子:根据任一相互垂直方向上的差分都用来估计梯度,Robert算子采用对角方向相邻像素只差
Sobel算子:其主要用于边缘检测,在技术上它是以离散型的差分算子,用来运算图像亮度函数的梯度的近似值,缺点是Sobel算子并没有将图像的主题与背景严格地区分开来,即Sobel算子并没有基于图像灰度进行处理,由于Sobel 算子并没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。
Prewitt算子:该算子与Sobel算子类似,只是权值有所变化,但两者实现起来功能还是有差距的,据经验得知Sobel要比Prewitt更能准确检测图像边缘。
log算子:log算法是一种基于灰度值的二阶导数来进行边缘检测的,通过检测零点来进行边缘检测。
Canny算子:优点:使用两种不同的阈值分别检测强、弱边缘,并且仅当弱边缘与强边缘相连时,才将弱边缘包含在输出图像中。
该方法不易受噪声干扰,能够在噪声和边缘间取得较好的平衡,检测到真正的弱边缘。
edge函数提供的最有效的边缘检测方法是canny方法。
2、区域操作
使用区域选择函数roicolor, 区域滤波函数roifilt2和区域填充函数roifilld对图像‘coins.png’或‘liftingbody.png’进行区域操作。
使用roipoly函数选择多边形区域后,若使用区域滤波函数roifilt2对
‘coins.jpg'在所选区域上过滤后,所选区域变得清晰。
若使用区域填充函数roifilld对‘coins.jpg’在所选区域平滑填充后,所选区域变模糊。
3. 区域分割
用四叉数分解函数qtdecomp进行区域分割进行四叉树分解选取阈值不同,分割不同。