数字图像处理-第07章 图像分割070428
- 格式:ppt
- 大小:624.00 KB
- 文档页数:21


第七章图像分割1、什么是区域?什么是图像分割?答:在对图像的研究和应用中,人们往往仅对图像中的某些部分感兴趣。
这些感兴趣的部分常称为目标或图像,它们一般对应图像中的特定的、具有独特性质的区域。
这里的区域是指相互连通的、有一致属性的像素的集合。
图像分割是指把图像分成互不重叠区域并提取感兴趣目标的技术。
2、边缘检测的理论依据是什么,有哪些方法?各有哪些特点?答:边缘是指图像中像素灰度有阶跃变化或屋顶状变化的那些像素的集合。
它存在于目标和背景、目标与目标、区域与区域、基元与基元之间。
他对图像识别和分析十分有用,边缘能够画出目标物体轮廓,使观察者一目了然,包含了丰实的信息,是图像识别中抽取的重要属性。
利用边缘灰度变化的一阶或二阶导数特点,可以将边缘点检测出来。
方法包括:(1)梯度算子;特点是仅计算相邻像素的灰度差,对噪音敏感,无法抑制噪声的影响。
(2)Roberts梯度算子;与梯度算子检测边缘的方法类似,但效果较梯度算子略好。
(3)Prewitt和Sobel算子;该算子不仅能检测边缘点,且能进一步抑制噪声的影响,但检测的边缘较宽。
(4)方向算子;检测能力强,抗噪能力好。
(5)拉普拉斯算子;特点是各向同性、线性和位移不变的;对细线和孤立点检测效果较好。
但边缘方向信息丢失,常产生双像素的边缘,对噪声有双倍加强作用。
(6)马尔算子;马尔算子用到的卷积模板一般较大,不过这些模板可以分解为一维卷积来快速计算。
(7)Canny算子;可以减少小模板检测中的边缘中断,有利于得到较为完整的线段。
3、什么是hough变换?hough变换检测直线时,为什么不采用y=kx+b的表达式?试述采用hough变换检测直线的原理。
答:设在直线坐标系中有一条直线L,在原点到该直线的垂直距离为Ρ,垂线与x周的夹角为θ,则可用Ρ、θ来表示该直线,其直线方程为:Ρ=xcosθ+ysinθ而这条直线用极坐标表示则为一点(Ρ,θ),可见,直角坐标系中的一条直线对应极坐标系中的一点,这种线到点的变换叫做hough变换。
数字图像处理:图像分割数字图像处理:图像分割前⾔:这个实验分成两部分代码,分别对应1和21. 膨胀:将与⽬标区域的背景点合并到该⽬标物中,使⽬标物边界向外部扩张的处理,把⼆值图像各1像素连接成分的边界扩⼤⼀层。
具体操作为:图像中关⼼的像素(结构元素B中值为1的部分)有1,则结果赋值为1,没有1,则赋值0。
腐蚀:消除连通域的边界点,使边界向内收缩的处理。
贴标签是对不同连通域区分和标记的基本算法,把⼆值图像各1像素连接成分的边界点去掉从⽽缩⼩⼀层。
2. 开操作:先腐蚀再膨胀,可以去掉⽬标外的孤⽴点闭操作:先膨胀再腐蚀,可以去掉⽬标内的孔。
注:别忘了图⽚的路径改成⾃⼰的⼀、实验⽬的理解和掌握图像分割的基本理论和算法,练习使⽤形态学、区域、边界和阈值的⽅法结合图像增强复原的相关知识对图像进⾏分割处理。
⼆、实验内容1.读⼊⼀幅图像,对图像进⾏如下操作:(1) ⽤膨胀腐蚀等形态学⽅法对图像进⾏去噪、增强处理。
改变结构元素,观察处理后的图像是否有明显的差别。
(2) ⽤开操作和闭操作等形态学⽅法去除指纹图像中的细⼩颗粒,连接断裂的指纹。
(3) 在上⼀步⽤形态学⽅法处理后的指纹图像基础上,运⽤全局阈值实现图像的⼆值化。
2.读⼊⼀幅图像,利⽤边缘检测和分⽔岭⽅法(watershed)对图像进⾏前景分割。
在调⽤watershed函数前,利⽤prewitt算⼦或者全局阈值等⽅法增强图像边缘。
实验结果图如下:1. 第⼀部分实验结果(两种图⽚来观察结果,此外我在作腐蚀时改变了两种结构元素来进⾏观察)2. 第⼆部分实验结果(两种图⽚来观察结果):代码如下:###### 第⼀部分代码%⼿动实现膨胀和腐蚀%img=imread('finger_noise.tif');img=im2bw(imread('test.png'));figure('name','实验结果');number=5;% 定义number⾏图⽚subplot(number,3,1);imshow(img);title('原图');subplot(number,3,4);imshow(img);title('原图');subplot(number,3,7);imshow(img);title('原图');B=[0 1 01 1 10 1 0]; %结构元素[row,col]=size(img);%获得图像的⾼和宽%对img进⾏膨胀imgdilate=img;for i=2:row-1for j=2:col-1pitch=img(i-1:i+1,j-1:j+1);convtmp= pitch.*B; %⽤img中的⼀块与结构元素作卷积if sum(convtmp(:))>0imgdilate(i,j)=1;%⾮零则赋值1elseimgdilate(i,j)=0;%零则仍赋值0endendendsubplot(number,3,2);imshow(imgdilate);title('膨胀后结果');%对img进⾏腐蚀imgerode=img;C=sum(B(:)); %结构元素B中关⼼的元素个数for i=2:row-1for j=2:col-1pitch=img(i-1:i+1,j-1:j+1);convtmp= pitch.*B; %⽤img中的⼀块与结构元素作卷积if sum(convtmp(:))<Cimgerode(i,j)=0;elseimgerode(i,j)=1;endendendsubplot(number,3,3);imshow(imgerode);title('腐蚀后结果');B= [1 1 1;1 1 1;1 1 1]%更改结构元素[1 1 1;1 1 1;1 1 1],[1 0 1;0 1 0;1 0 1] %开操作(对腐蚀后的图像再进⾏⼀次膨胀)imgopen=imgerode;for i=2:row-1for j=2:col-1pitch=imgerode(i-1:i+1,j-1:j+1);convtmp= pitch.*B; %⽤img中的⼀块与结构元素作卷积if sum(convtmp(:))>0 %⾮零则赋值1imgopen(i,j)=1;elseimgopen(i,j)=0;%零则仍赋值0endendendsubplot(number,3,5);imshow(imgopen);title('开操作后结果,结构元素为[1 1 1;1 1 1;1 1 1]');%闭操作(对膨胀后的图像再进⾏⼀次腐蚀)imgclose=imgdilate;C=sum(B(:)); %结构元素B中关⼼的元素个数for i=2:row-1for j=2:col-1pitch=imgdilate(i-1:i+1,j-1:j+1);convtmp= pitch.*B; %⽤img中的⼀块与结构元素作卷积if sum(convtmp(:))<Cimgclose(i,j)=0;elseimgclose(i,j)=1;endendendsubplot(number,3,6);imshow(imgclose);title('闭操作后结果,结构元素为[1 1 1;1 1 1;1 1 1]');B= [1 0 1;0 1 0;1 0 1]%更改结构元素[1 1 1;1 1 1;1 1 1],[1 0 1;0 1 0;1 0 1] %开操作(对腐蚀后的图像再进⾏⼀次膨胀)imgopen=imgerode;for i=2:row-1for j=2:col-1pitch=imgerode(i-1:i+1,j-1:j+1);convtmp= pitch.*B; %⽤img中的⼀块与结构元素作卷积if sum(convtmp(:))>0 %⾮零则赋值1imgopen(i,j)=1;elseimgopen(i,j)=0;%零则仍赋值0endendendsubplot(number,3,8);imshow(imgopen);title('开操作后结果,结构元素为[1 0 1;0 1 0;1 0 1]');%闭操作(对膨胀后的图像再进⾏⼀次腐蚀)imgclose=imgdilate;C=sum(B(:)); %结构元素B中关⼼的元素个数for i=2:row-1for j=2:col-1pitch=imgdilate(i-1:i+1,j-1:j+1);convtmp= pitch.*B; %⽤img中的⼀块与结构元素作卷积if sum(convtmp(:))<Cimgclose(i,j)=0;elseimgclose(i,j)=1;endendendsubplot(number,3,9);imshow(imgclose);title('闭操作后结果,结构元素为[1 0 1;0 1 0;1 0 1]');subplot(number,3,10);imshow(imgdilate);title('原图');%确定全局阈值TT=0.5*(double(min(imgdilate(:)))+double(max(imgdilate(:))));%设置初始阈值为最⼤灰度和最⼩灰度值和的⼀半done=false;while ~doneg=imgdilate>=T;%分成两组像素,灰度值⼤于或者等于T的和灰度值⼩于T的Tnext=0.5*(mean(imgdilate(g))+mean(imgdilate(~g)));%新阈值两个范围内像素平均值和的⼀半done=abs(T-Tnext)<0.5; %0.5是⾃⼰指定的参数T=Tnext;endimout2=im2bw(imgdilate,T);subplot(number,3,11);imshow(imout2);title('膨胀后全局⼆值化');%确定全局阈值TT=0.5*(double(min(imgerode(:)))+double(max(imgerode(:))));%设置初始阈值为最⼤灰度和最⼩灰度值和的⼀半done=false;while ~doneg=imgerode>=T;%分成两组像素,灰度值⼤于或者等于T的和灰度值⼩于T的Tnext=0.5*(mean(imgerode(g))+mean(imgerode(~g)));%新阈值两个范围内像素平均值和的⼀半done=abs(T-Tnext)<0.5; %0.5是⾃⼰指定的参数T=Tnext;endimout3=im2bw(imgerode,T);subplot(number,3,12);imshow(imout3);title('腐蚀后全局⼆值化');第⼆部分代码%pic =imread('finger.tif')pic =imread('rice.tif')number=2subplot(number,3,1);imshow(pic);title('原图');% 使⽤prewitt算⼦增强G=imfilter(pic,fspecial('prewitt'));%⽣成’prewitt’模板,并对输⼊图像做边缘增强,再加上原图像subplot(number,3,2);imshow(G);title('prewitt算⼦增强后图像');L=watershed(G); %分⽔岭算法wr=L==0; %取出边缘subplot(number,3,3);imshow(wr);title('分⽔岭');pic(wr)=255;subplot(number,3,5);imshow(uint8(pic));title('前景分割结果');。