文档视界 最新最全的文档下载
当前位置:文档视界 › 图像分割实验报告

图像分割实验报告

图像分割实验报告
图像分割实验报告

实验报告

课程名称医学图像处理

实验名称图像分割

专业班级

姓名

学号

实验日期

实验地点

2015—2016学年度第 2 学期

050100150200250

图1 原图图2 直方图图3 阈值分割后的二值图像

分析:手动阈值分割的阈值是取直方图中双峰的谷底的灰度值作为阈值,若有多个双峰谷底,则取第一个作为阈值。本题的阈值取80。

%例2 迭代阈值分割

f=imread('cameraman.tif'); %读入图像

subplot(1,2,1);imshow(f); %创建一个一行二列的窗口,在第一个窗口显示图像

title('原始图像'); %标注标题

f=double(f); %转换位双精度

T=(min(f(:))+max(f(:)))/2; %设定初始阈值

done=false; %定义开关变量,用于控制循环次数

i=0; %迭代,初始值i=0

while~done %while ~done 是循环条件,~ 是“非”的意思,此

处done = 0; 说明是无限循环,循环体里面应该还

有循环退出条件,否则就循环到死了;

r1=find(f<=T); %按前次结果对t进行二次分

r2=find(f>T); %按前次结果重新对t进行二次分

Tnew=(mean(f(r1))+mean(f(r2)))/2; %新阈值两个范围内像素平均值和的一半

done=abs(Tnew-T)<1; %设定两次阈值的比较,当满足小于1时,停止循环,

1是自己指定的参数

T=Tnew; %把Tnw的值赋给T

i=i+1; %执行循坏,每次都加1

end

f(r1)=0; %把小于初始阈值的变成黑的

f(r2)=1; %把大于初始阈值的变成白的

subplot(1,2,2); %创建一个一行二列的窗口,在第二个窗口显示图像imshow(f); %显示图像

title('迭代阈值二值化图像'); %标注标题

图4原始图像图5迭代阈值二值化图像

分析:本题是迭代阈值二值化分割,步骤是:1.选定初始阈值,即原图大小取平均;2.用初阈

值进行二值分割;3.目标灰度值平均背景都取平均;4.迭代生成阈值,直到两次阈值的灰度变化不超过1,则稳定;5.输出迭代结果。

%例3 Laplacian算子和模板匹配法

I=imread('cameraman.tif'); %读入图像

subplot(1,3,1);imshow(I); %创建一个一行三列的窗口,在第一个窗口显示图像

title('原图像'); %标注标题

H=fspecial('laplacian'); %生成laplacian滤波器

laplacianH=filter2(H,I); %以laplacian为模板对图像I进行锐化滤波

subplot(1,3,2); %创建一个一行三列的窗口,在第二个窗口显示图像imshow(laplacianH); %显示图像

title('laplacian算子锐化图像'); %标注标题

H=fspecial('prewitt'); %生成Prewitt滤波器

prewittH=filter2(H,I); %以prewitt为模板对图像I进行锐化滤波

subplot(1,3,3); %创建一个一行三列的窗口,在第三个窗口显示图像imshow(prewittH); %显示图像

title('prewitt模板锐化图像'); %标注标题

图6原图像图7 laplacian算子锐化图像图8 prewitt模板锐化图像

分析:从结果图可以看出,laplacian算子对边缘的处理更明显,它是二阶微分算子,能加强边缘效果,对噪声很敏感,Prewitt算子是平均滤波的一阶的微分算子,不仅能检测边缘点,而且能抑制噪声的影响。

%例4 不同边缘检测方法比较

f=imread('cameraman.tif'); %读取图像

subplot(2,2,1);imshow(f); %创建一个二行二列的窗口,在第一个窗口显示图像

title('原始图像'); %标注标题

[g,t]=edge(f,'roberts',[],'both'); %用roberts检测器对图像进行边缘检测,阈值自动选

取,检测边缘方向(双向)为both

subplot(2,2,2);imshow(g); %创建一个二行二列的窗口,在第二个窗口显示图像

title('Roberts算子分割结果'); %标注标题

[g,t]=edge(f,'sobel',[],'both'); %用sobel检测器对图像进行边缘检测,阈值自动选取,检测边缘

方向(双向)为both

subplot(2,2,3);imshow(g); %创建一个二行二列的窗口,在第三个窗口显示图像

title('Sobel算子分割结果'); %标注标题

[g,t]=edge(f,'prewitt',[],'both'); %用prewitt检测器对图像进行边缘检测,阈值自动

选取,检测边缘方向(双向)为both

subplot(2,2,4);imshow(g); %创建一个二行二列的窗口,在第四个窗口显示图像

title('prewitt算子分割结果'); %标注标题

图9原始图像图10 Roberts算子分割结果图像

图11 Sobel算子分割结果图像图12 prewitt算子分割结果图像

分析:从结果图可以看出,Prewitt 和Sobel 算子分割效果比Roberts 效果要好一些,提取边缘较完整,其边缘连续性较好。但是这三种算子的边缘的连续性都不太好,这时我们需要采用霍夫变换使间断变成连续,连接边缘。

思考题

1.分析Sobel算子特点,并给予说明。

f=imread('skull.tif'); %读取图像

f=double(f); %转化图像f的类型为双精度

subplot(3,3,1); %创建有3*3子图像的窗口,原图在位置1

imshow(f,[]); %显示原图像f

title('原始图像'); %给图像加标题为'原始图像'

J=imnoise(f,'gaussian',0.02); %对图像加高斯噪声

subplot(3,3,2); %创建有3*3子图像的窗口,原图在位置2

imshow(J,[]); %显示加噪声的图像

title('加高斯噪声图像'); %给图像加标题为'加高斯噪声图像'

[g1,t]=edge(f,'sobel',[],'both'); %用sobel检测器对原图像进行边缘检测,阈值自动选

取,检测边缘方向(双向)为both

[g2,t]=edge(J,'sobel',[],'both'); %用sobel检测器对加噪图像进行边缘检测,阈值自动

选取,检测边缘方向(双向)为both

[g3,t]=edge(f,'sobel',[],'vertical'); %用sobel检测器对原图像进行边缘检测,阈值自动

选取,检测边缘方向为垂直方向

[g4,t]=edge(J,'sobel',[],'vertical'); %用sobel检测器对加噪图像进行边缘检测,阈值自

动选取,检测边缘方向为垂直方向

[g5,t]=edge(f,'sobel',[],'horizontal'); %用sobel检测器对原图像进行边缘检测,阈值自

动选取,检测边缘方向为水平方向

[g6,t]=edge(J,'sobel',[],'horizontal'); %用sobel检测器对加噪图像进行边缘检测,阈值

自动选取,检测边缘方向为水平方向subplot(3,3,3); %创建有3*3子图像的窗口,图在位置3

imshow(g1); %显示经sobel算子处理后的图像

title('sobel算子双向分割结果'); %给图像加标题为‘sobel算子双向分割结果’subplot(3,3,4);imshow(g2);title('加噪后sobel双向分割结果'); %在3*3子图像的位置4

显示加噪后sobel双向分割结果图像subplot(3,3,5);imshow(g3);title('sobel水平方向分割结果'); %在3*3子图像的位置5显示

sobel水平方向分割结果结果图像subplot(3,3,6);imshow(g4);title('加噪后sobel水平方向分割结果'); %在3*3子图像的位

置6显示加噪后sobel水平方向分割结果图像subplot(3,3,7);imshow(g5);title('sobel垂直方向分割结果'); %在3*3子图像的位置7显示

sobel垂直方向分割结果图像subplot(3,3,8);imshow(g6);title('加噪后sobel垂直方向分割结果'); %在3*3子图像的位

置8显示加噪后sobel垂直方向分割结果图像

图13原始图像图14加高斯噪声图像图15 sobel算子双向分割结果图像

图16加噪后sobel双向分割图图17sobel水平方向分割图图18加噪后sobel水平分割图

图19 sobel垂直方向分割结果图像图20加噪后sobel垂直方向分割结果图像

分析:Sobel相对于先对图像进行加权平均再做差分。在边缘检测中,常用的一种模板是Sobel 算子。Sobel 算子有三个,一个是检测双向边缘的,一个是检测水平边缘的;另一个是检测垂直边缘的。由于Sobel算子是一节微分滤波算子的,用于提取边缘,有方向性,从结果可以看出双向both的分割效果最好。缺点:Sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。

2.分析laplacian算子特点,并解释它为何能增强图像的边缘?

I=imread('skull.tif'); %读取原图

subplot(2,3,1),imshow(I,[]);title('原图像') %在2*3子图像的位置1显示原图像

H1=fspecial('laplacian',0); %生成Laplacian算子滤波器,滤波器的标

准差为0,说明H1模板的中间系数是-4 H2=fspecial('laplacian'); %生成Laplacian算子滤波器,滤波器的标

准差为默认值0.2,说明H2模板的中间系数是-3.333 H3=fspecial('laplacian',1); %生成Laplacian算子滤波器,滤波器的标

准差为1,说明H3模板的中间系数是-2 J=imnoise(I,'salt & pepper',0.02); %添加椒盐噪声

subplot(2,3,2),imshow(J,[]);title('添加椒盐噪声图像') %在2*3子图像的位置3显示添

加椒盐噪声图像

I1=imfilter(I,H1); %用H1模板进行均值滤波

subplot(2,3,3),imshow(I1,[]);title('HI模板laplacian算子滤波结果') %在2*3子图像的

位置3显示'HI模板laplacian算子滤波结果图像I2=imfilter(I,H2); %用H2模板进行均值滤波

subplot(2,3,4),imshow(I2,[]);title('H2模板laplacian算子滤波结果') %在2*3子图像的

位置4显示H2模板laplacian算子滤波结果图像I3=imfilter(I,H3); %用H3模板进行均值滤波

subplot(2,3,5),imshow(I3,[]);title('H3模板laplacian算子滤波结果') %在2*3子图像的

位置5显示H3模板laplacian算子滤波结果图像

图21原图像图22添加椒盐噪声图像图23 HI模板laplacian算子滤波图

图24 H2模板laplacian算子滤波结果图像图25 H3模板laplacian算子滤波结果图像

分析:laplacian算子对边缘的处理明显,它是二阶微分算子,能加强边缘效果,对噪声很敏感。它没有方向性,但是可以改变模板的中间系数,会有不同的效果。

3.比较各个边缘算子对图像边缘的检测效果。

I=imread('skull.tif'); %读取图像

subplot(3,3,1),imshow(I),title('原图像'),imshow(I);title('原图像') %在3*3子图像的

位置1显示原图像BW1=edge(I,'sobel',0.1); %用sobel 算子进行边缘检测,判断阈值为0.1 subplot(3,3,2),imshow(BW1);title('sobel算子处理后图像') %在3*3子图像的位置2显示

sobel算子处理后图像BW2=edge(I,'roberts',0.1); %用roberts 算子进行边缘检测,判断阈值为0.1 subplot(3,3,3),imshow(BW2);title('roberts算子处理后图像')%在3*3子图像的位置3显示

roberts算子处理后图像BW3=edge(I,'prewitt',0.1); %用prewitt 算子进行边缘检测,判断阈值为0.1 subplot(3,3,4),imshow(BW3);title('prewitt算子处理后图像')%在3*3子图像的位置4显示

prewitt算子处理后图像BW4=edge(I,'log',0.01); %用log 算子进行边缘检测,判断阈值为0.01 subplot(3,3,5),imshow(BW4);title('log算子处理后图像')%在3*3子图像的位置5显示log

算子处理后图像BW5=edge(I,'canny',0.1);%用canny 算子进行边缘检测,判断阈值为0.1

subplot(3,3,6),imshow(BW5);title('canny算子处理后图像')%在3*3子图像的位置6显示canny算子处理后图像

H=fspecial('laplacian'); %生成Laplacian算子滤波器(突出图像中的小细节)(它具有各向

同性)(Laplacian 算子对噪声比较敏感,所以图像一般先经过平滑

处理,因为平滑处理也是用模板进行的,所以,通常的分割算法都

是把Laplacian 算子和平滑算子结合起来生成一个新的模板。)laplacianH=filter2(H,I); %图像I经Laplacian算子锐化滤波处理

subplot(3,3,7);imshow(laplacianH);title('Laplacian算子锐化图像'); %在3*3子图像的位

置7显示Laplacian算子锐化图像

图26原图像图27 sobel算子处理后图像图28 roberts算子处理后图像

图29 prewitt处理后图图30 log处理后图图31 canny处理后图像图32 Laplacian锐化图

分析:laplacian算子对边缘的处理最明显,Sobel和prewitt较差一些。Roberts 算子定位比较精确,Prewitt 算子是平均滤波的一阶的微分算子,Canny是一阶传统微分中检测阶跃型边缘效果最好的算子之一。Prewitt 和Sobel 算子比Roberts 效果要好一些。Log

滤波器和Canny 算子的检测效果优于梯度算子,能够检测出图像较细的边缘部分。比较几种边缘检测结果,可以看到Canny 算子提取边缘较完整,其边缘连续性较好,效果优于其它算子。其次是Prewitt 算子,其边缘比较完整。再次就是Sobel 算子。

4.比较各个边缘检测算子对噪声的敏感性,并提出抗噪声性能较好的边缘检测的方法。

I=imread('skull.tif'); %读取图像

subplot(3,3,1 ),imshow(I),title('原图像') ,imshow(I);title('原图像')%在3*3子图像的

位置1显示原图像J=imnoise(I,'salt & pepper',0.02); %给图像加噪声密度为0.02的椒盐噪声

subplot(3,3,2),imshow(J,[]);title('添加椒盐噪声图像')%在3*3子图像的位置2显示添加

椒盐噪声图像BW1=edge(J,'sobel',0.1); %用sobel 算子进行边缘检测,判断阈值为0.1 subplot(3,3,3),imshow(BW1,[]);title('sobel算子处理后图像')%在3*3子图像的位置3显示

sobel算子处理后图像BW2=edge(J,'roberts',0.1); %用roberts 算子进行边缘检测,判断阈值为0.1 subplot(3,3,4),imshow(BW2,[]);title('roberts算子处理后图像')%在3*3子图像的位置4

显示roberts算子处理后图像BW3=edge(J,'prewitt',0.1); %用prewitt 算子进行边缘检测,判断阈值为0.1 subplot(3,3,5),imshow(BW3,[]);title('prewitt算子处理后图像')%在3*3子图像的位置5

显示prewitt算子处理后图像BW4=edge(J,'log',0.01); %用log 算子进行边缘检测,判断阈值为0.01 subplot(3,3,6),imshow(BW4,[]);title('log算子处理后图像')%在3*3子图像的位置6显示

log算子处理后图像BW5=edge(J,'canny',0.1); %用canny 算子进行边缘检测,判断阈值为0.1 subplot(3,3,7),imshow(BW5,[]);title('canny算子处理后图像')%在3*3子图像的位置7显示

canny算子处理后图像H=fspecial('laplacian'); %生成Laplacian算子滤波器(突出图像中的小细节)(它具有各向

同性)(Laplacian 算子对噪声比较敏感,所以图像一般先经过平

滑处理,因为平滑处理也是用模板进行的,所以通常的分割算法

都是把Laplacian 算子和平滑算子结合起来生成一个新的模板。)laplacianH=filter2(H,J); %图像I经Laplacian算子锐化滤波处理

subplot(3,3,8);imshow(laplacianH);title('Laplacian算子锐化图像'); %在3*3子图像的位

置8显示Laplacian算子锐化图像

图33原图像图34添加椒盐噪声图像图35 sobel算子处理后图像

图36 roberts算子处理后图像图37 prewitt算子处理后图像图38 log算子处理后图像

图39 canny算子处理后图像图40 Laplacian算子锐化图像

如有侵权请联系告知删除,感谢你们的配合!如有侵权请联系告知删除,感谢你们的配合!

相关文档