医学数字图像处理实验报告.docx
- 文档编号:11268832
- 上传时间:2023-05-30
- 格式:DOCX
- 页数:20
- 大小:665.93KB
医学数字图像处理实验报告.docx
《医学数字图像处理实验报告.docx》由会员分享,可在线阅读,更多相关《医学数字图像处理实验报告.docx(20页珍藏版)》请在冰点文库上搜索。
医学数字图像处理实验报告
评分
大理大学实验报告
课程名称医学图像处理
实验名称图像分割
专业班级13级生物医学工程1班
姓名范小欢杨飞
学号20131661432013166141
实验日期2015/12/17
实验地点三教204
2015—2016学年度第2学期
一、实验目的
掌握常用的边缘提取算法,哦那个图像中提取感兴趣的区域,实现图像分割。
在图像中,寻找灰度相同或相似的区域,区分图像中的背景区域和目标区域,利用matlab实现图像的边缘检测,进行图像分割。
二、实验环境
1、硬件配置:
处理器:
Intel(R)celeron(R)CPUN2940@1.83GHz1.83GHz
安装内存(RAM):
4.00GB
系统类型:
64位操作系统
2、软件环境:
MATLABR2012b
三、实验内容
(包括本实验要完成的实验问题及需要的相关知识简单概述)
一、实验原理
1、
函数imadjust是对灰度图像进行灰度变换的基本工具。
其语法为
g=imadjust(f,[low_inhigh_in],[low_outhigh_out],gamma)
2、直方图均衡化
直方图生成函数为imhist,其基本语法为
g=imhist(f,b)
直方图均衡化用工具箱中的函数histeq
histeq(f,nlev)
3、直方图规定化
函数histeq实现直方图匹配的形式为
g=histeq(f,hspec)
4、图像正交变换
傅里叶频谱可以使用函数abs来获得
F=abs(Y)
傅里叶逆变换用函数ifft2实现,基本语法为
F=ifft2(F)
四、实验结果与分析
(包括实验原理、数据的准备、运行过程分析、源程序(代码)、图形图象界面等)
【例题】
例1手动阈值分割
1源代码
[I,map]=imread('eight.tif');%读取原图像eight
imshow(I);figure;J=imhist(I);imhist(I);[M,N]=size(I);%显示图像并生成直方图,图像大小为M*N像素
fori=1:
1:
M%用for语句依次读取图像像素点,若超过了指定的阈值200,取像素为0,否则为1
forj=1:
1:
N
ifI(i,j)>200%若像素点大于200,则取0,反之
g(i,j)=0;
elseg(i,j)=1;%否则取0
end%if循环的end
end
end
figure;imshow(g);%显示输出图像g
2图像输出
图1原图像图3迭代阈值二值图像
图2原图像的灰度直方图
3结果分析
从图1可看出原图像灰度级单一,可选择一个合适的阈值来进行阈值分割,由图2可知,其灰度直方图中出现双峰,即利用双峰法选取阈值为200(双峰之间波谷的灰度值即作为阈值),将目标和背景分离,产生相应的二值图像(如图3)。
注:
若原图像灰度直方图中出现多个峰,只选取前两个峰。
例2迭代阈值分割
①源代码
%例2迭代阈值分割
f=imread('eight.tif');%读取图像eight
subplot(1,2,1);%显示第一幅子图
imshow(f);%显示图像eight
title('原始图像');%标题为'原始图像'
f=double(f);%将原图像转换为双精度类型
T=(min(f(:
))+max(f(:
)))/2;%设定初始阈值T(图像的平均灰度值)
done=false;%定义开关变量,用于控制循环次数
i=0;%初始变量i为0
while~done%迭代法计算量
r1=find(f<=T);%r1由所有小于等于T的像素构成
r2=find(f>T);%r2由灰度值大于T的所有像素组成
Tnew=(mean(f(r1))+mean(f(r2)))/2;%r1、r2的像素分别计算平均灰度值,计算一个新的阈值T
done=abs(Tnew-T)<1;%计算阈值差值,满足不小于1时,停止循环
T=Tnew;%产生新的阈值Tnew
i=i+1;%满足上面代码变量i则加1
end%对应while语句循环结束
f(r1)=0;%目标灰度为0
f(r2)=1;%背景灰度为1
subplot(1,2,2);%作第二幅子图
imshow(f);%显示阈值分割后的图像
title('迭代阈值二值化图像');%标题为'迭代阈值二值化图像'
4
图像输出
图4原图像图5阈值分割后的二值图像
结果分析:
迭代阈值分割步骤
第一步:
选取原图像灰度最大值与最小值的平均值作为初始阈值;第二步:
用该阈值分割图像,产生两组像素,即目标与背景;第三步:
分别求得目标与背景的平均灰度值;第四步:
求得一个新的阈值(将目标与背景的平均灰度值相加再求平均值即得到Tnew);第五步:
计算阈值差值;第六步:
重复步骤二到步骤四,直到阈值差值不小于1,输出阈值。
最终结果以自动迭代产生的阈值将目标与背景分离,产生相应的二值图像(如图5)。
例3Laplacian算子和模板匹配法
1源代码
I=imread('tire.tif');%读取图像tire
subplot(1,3,1);imshow(I);%在子网中显示第1幅图像
title('原图像');%标题为'原图像'
H=fspecial('laplacian');%生成laplacian滤波器
laplacianH=filter2(H,I);%以laplacian为模板对原图像进行锐化滤波
subplot(1,3,2);%在子网中显示第2幅图像
imshow(laplacianH);%显示以laplacian算子锐化的图像
title('laplacian算子锐化图像');%标题为'laplacian算子锐化图像'
H=fspecial('prewitt');%生成Prewitt滤波器
prewittH=filter2(H,I);%以prewitt为模板对原图像进行锐化滤波
subplot(1,3,3);%在子网中显示第3幅图像
imshow(prewittH);%显示图像以prewitt模板锐化的图像
title('prewitt模板锐化图像');%标题'prewitt模板锐化图像'
图像输出
图6原图像图7Laplacian算子锐化图像图8prewitt算子锐化图像
结果分析
由图7可看出,Laplacian算子的处理,图像模糊近乎成虚像的形式,边缘信息大量丢失;
由图8可看出,prewitt算子将图像边缘拉大,近乎失真。
例4不同边缘检测方法比较
源代码
f=imread('eight.tif');%读取图像eight
subplot(2,2,1);%在子网中作第1幅子图
imshow(f);%显示原图像eight
title('原始图像');%标题为'原始图像'
[g,t]=edge(f,'roberts',[],'both');%用Roberts算子进行边缘检测
subplot(2,2,2);%在子网中作第2幅子图
imshow(g);%显示以Roberts算子进行边缘检测的图像
title('Roberts算子分割结果');%标题为'Roberts算子分割结果')
[g,t]=edge(f,'sobel',[],'both');%用Sobel算子进行边缘检测
subplot(2,2,3);%在子网中作第3幅子图
imshow(g);%显示以Sobel算子进行边缘检测的图像
title('Sobel算子分割结果');%标题为'Sobel算子分割结果'
[g,t]=edge(f,'prewitt',[],'both');%用Prewitt算子进行边缘检测
subplot(2,2,4);%在子网中作第4幅子图
imshow(g);%显示以Prewitt算子进行边缘检测的图像g
title('Prewitt算子分割结果')%标题为'Prewitt算子分割结果'
图像输出
图9原图与Roberts、Sobel、Prewitt算子分割结果
结果分析
原图像经多种梯度算子进行边缘检测后,更加突显出原图像的边缘,抑制了图像中非边缘信息,使图像轮廓更加清晰。
roberts算子检测边缘:
可看到图像的一些边缘信息丢失;检测精度较高,由于没有经过图像平滑计算,因此不能抑制噪声,但该算子对具有陡峭的低噪声图像响应最好
Prewitt,Sobel算子检测边缘图像产生了一定的模糊,而且还会检测出一些伪边缘,所以检测精度比较低,该算子比较适用于图像边缘灰度值比较尖锐且图像噪声比较好的情况。
roberts算子是利用图像的两个对角的相邻像素进行梯度幅值的检测,并且检测水平和垂直方向边缘的性能好于斜线方向的边缘,检测精度较高,但容易丢失一部分边缘信息,同时由于没有经过图像平滑计算,因此不能抑制噪声,但该算子对具有陡峭的低噪声图像响应最好
Prewitt,Sobel算子都是对图像进行差分和滤波运算,仅在平滑部分的权值选择上有差异,因此两者对噪声具有一定的抑制作用,但这种抑制作用是通过像素平均来实现的,所以图像产生了一定的模糊,而且还会检测出一些伪边缘,所以检测精度比较低,该算子比较适用于图像边缘灰度值比较尖锐且图像噪声比较好的情况。
利用roberts算子提取边缘的结果是边缘比较粗,因此边缘定位不是很准确,对具有陡峭的低噪声的图像处理效果较好
Sobel算子对边缘定位比较准确,对灰度渐变和噪声较多的图像处理效果较好
【思考题】
1、分析sobel算子特点,并给予说明。
Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数。
Sobel算子对于象素的位置的影响做了加权,可以降低边缘模糊程度,因此效果较好,然而其并没有将图像的主体与背景严格地区分开来,即Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。
在MATLAB中用不同方向的Sobel算子对同一图像滤波,观察滤波效果。
%图像未加噪声前
>>f=imread('cameraman.tif');%读入图像
subplot(2,3,1);%创建有2*2子图像的窗口,原图在位置1
imshow(f,[]);%显示原图像f
title('原始图像');%给图像加标题为'原始图像'
%sobel双边算子分割结果
f=double(f);%转化图像f的类型为双精度
[g,t]=edge(f,'sobel',[],'both');%应用sobel算子检测图像f的边缘
subplot(2,3,2);%创建有2*2子图像的窗口,图像在位置2
imshow(g);%显示经sobel双边算子处理后的图像
title('sobel双边算子分割结果');%给图像加标题为‘sobel双边算子分割结果’
%sobel水平算子分割结果
[g,t]=edge(f,'sobel',[],'horizontal');%应用sobel算子检测图像f的边缘
subplot(2,3,3);%创建有2*2子图像的窗口,图像在位置3
imshow(g);%显示经sobel水平算子处理后的图像
title('sobel水平算子分割结果');%给图像加标题为‘sobel水平算子分割结果’
%sobel垂直算子分割结果
[g,t]=edge(f,'sobel',[],'vertical');%应用sobel算子检测图像f的边缘
subplot(2,3,4);%创建有2*2子图像的窗口,图像在位置4
imshow(g);%显示经sobel垂直算子处理后的图像
title('sobel垂直算子分割结果');%给图像加标题为‘sobel垂直算子分割结果’
%45度sobel算子分割结果
a45=[-2-10;-101;012];%生成45度sobel算子
J=imfilter(f,a45);%对图像进行滤波。
subplot(2,3,5);%创建有2*2子图像的窗口,图像在位置5
imshow(J);%显示经45度sobel算子处理后的图像
title('45度角图像边缘检测');%给图像加标题为‘45度sobel算子分割结果’
%-45度sobel算子分割结果
b45=[0-1-2;10-1;210];%生成-45度sobel算子
J=imfilter(f,b45);%对图像进行滤波。
subplot(2,3,6);%创建有2*2子图像的窗口,图像在位置6
imshow(J);%显示经-45度sobel算子处理后的图像
title('-45度角图像边缘检测');%给图像加标题为‘-45度sobel算子分割结果’
%图像添加噪声后
>>K=imread('cameraman.tif');%读入图像
f=imnoise(K,'salt&pepper',0.02);%给图像添加椒盐噪声
subplot(2,3,1);%创建有2*2子图像的窗口,原图在位置1
imshow(f,[]);%显示原图像f
title('原始图像');%给图像加标题为'原始图像'
%sobel双边算子分割结果
f=double(f);%转化图像f的类型为双精度
[g,t]=edge(f,'sobel',[],'both');%应用sobel算子检测图像f的边缘
subplot(2,3,2);%创建有2*2子图像的窗口,图像在位置2
imshow(g);%显示经sobel双边算子处理后的图像
title('sobel双边算子分割结果');%给图像加标题为‘sobel双边算子分割结果’
%sobel水平算子分割结果
[g,t]=edge(f,'sobel',[],'horizontal');%应用sobel算子检测图像f的边缘
subplot(2,3,3);%创建有2*2子图像的窗口,图像在位置3
imshow(g);%显示经sobel水平算子处理后的图像
title('sobel水平算子分割结果');%给图像加标题为‘sobel水平算子分割结果’
%sobel垂直算子分割结果
[g,t]=edge(f,'sobel',[],'vertical');%应用sobel算子检测图像f的边缘
subplot(2,3,4);%创建有2*2子图像的窗口,图像在位置4
imshow(g);%显示经sobel垂直算子处理后的图像
title('sobel垂直算子分割结果');%给图像加标题为‘sobel垂直算子分割结果’
%45度sobel算子分割结果
a45=[-2-10;-101;012];%生成45度sobel算子
J=imfilter(f,a45);%对图像进行滤波。
subplot(2,3,5);%创建有2*2子图像的窗口,图像在位置5
imshow(J);%显示经45度sobel算子处理后的图像
title('45度角图像边缘检测');%给图像加标题为‘45度sobel算子分割结果’
%-45度sobel算子分割结果
b45=[0-1-2;10-1;210];%生成-45度sobel算子
J=imfilter(f,b45);%对图像进行滤波。
subplot(2,3,6);%创建有2*2子图像的窗口,图像在位置6
imshow(J);%显示经-45度sobel算子处理后的图像
title('-45度角图像边缘检测');%给图像加标题为‘-45度sobel算子分割结果’
输出结果:
图10cameraman原图像及各方向Sobel算子滤波图像
图11添加椒盐噪声的图像及各方向Sobel算子滤波图像
说明:
从输出结果看,双边Sobel算子检测边缘效果最好,45°和-45°角边缘检测可用于那些边界不明显的图片,不太适用于复杂图,复杂图用水平和垂直边缘检测。
另外可以看出,Sobel算子对噪声较为敏感,对噪声也进行了提取。
2.分析laplacian算子特点,并解释它为何能增强图像的边缘?
在MATLAB中用不同形状的laplacian算子对同一图像滤波,(参数用于控制算子形状,取值范围为[0,1],默认值为0.2.)观察滤波效果。
>>I=imread('tire.tif');
subplot(3,3,1),imshow(I,[]);title('原图像')
H=fspecial('laplacian',0);
I1=imfilter(I,H);
subplot(3,3,2),imshow(I1,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',0.1);
I2=imfilter(I,H);
subplot(3,3,3),imshow(I2,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',0.2);
I3=imfilter(I,H);
subplot(3,3,4),imshow(I3,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',0.4);
I4=imfilter(I,H);
subplot(3,3,5),imshow(I4,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',0.5);
I5=imfilter(I,H);
subplot(3,3,6),imshow(I5,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',0.6);
I6=imfilter(I,H);
subplot(3,3,7),imshow(I6,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',0.8);
I7=imfilter(I,H);
subplot(3,3,8),imshow(I7,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',1);
I8=imfilter(I,H);
subplot(3,3,9),imshow(I8,[]);title('laplacian算子滤波图像')
%图像添加噪声
>>J=imnoise(I,'salt&pepper',0.02);
subplot(3,3,1),imshow(J,[]);title('添加椒盐噪声图像')
H=fspecial('laplacian',0);
I1=imfilter(J,H);
subplot(3,3,2),imshow(I1,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',0.1);
I2=imfilter(J,H);
subplot(3,3,3),imshow(I2,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',0.2);
I3=imfilter(J,H);
subplot(3,3,4),imshow(I3,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',0.4);
I4=imfilter(J,H);
subplot(3,3,5),imshow(I4,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',0.5);
I5=imfilter(J,H);
subplot(3,3,6),imshow(I5,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',0.6);
I6=imfilter(J,H);
subplot(3,3,7),imshow(I6,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',0.8);
I7=imfilter(J,H);
subplot(3,3,8),imshow(I7,[]);title('laplacian算子滤波图像')
H=fspecial('laplacian',1);
I8=imfilter(J,H);
subplot(3,3,9),imshow(I8,[]);title('laplacian算子滤波图像')
输出结果:
图12tire原图像及各形状laplacian算子滤波图像
(参数依次为0,0.1,0.2,0.4,0.5,0.6,0.8,1)
图13添加椒盐噪声图像及各形状laplacian算子滤波图像
(参数依次为0,0.1,0.2,0.4,0.5,0.6,0.8,1)
说明:
从结果图像看出,不同形状的laplacian算子对图像的边缘检测效果都较为明显,只是边缘的细节部分有一些变化,同时可以看到laplacian算子对噪声较为敏感,随着参数变大,对噪声的提取有所下降。
3.比较各个边缘算子对图像边缘的检测效果。
>>I=imread('tire.tif');%读入灰度图像并显示
subplot(3,3,2),imshow(J),title('原图像'),imshow(I);title('原图像')
I1=edge(I,'sobel',[]);%用sobel算子进行边缘检测
subplot(3,3,4),imshow(I1);title('sobel算子处理后图像')
I2=edge(I,'roberts',[]);%用roberts算子进行边缘检测
subplot(3,3,5),imshow(I2);title('roberts算子处理后图像')
I3=edge(I,'prewitt',[]);%用prewitt算子进行边缘检测
subplot(3,3,6),imshow(I3);title('prewitt算子处理后图像')
I4=edge(I,'log',[]);%用log算子进行边缘检测
subplot(3,3,7),imshow(I4);title('高斯拉普拉斯算子处理后图像')
I5=edge(I,'canny',[]);%用canny算子进行边缘检测
subplot(3,3,8),imshow(I5);title('canny算子处理后图像')
H=fspecial('laplacian');
I6=imfilter(I,H);
subplot(3,3,9),imshow(I6,[]);title('laplacian算子滤波图像')
结果输出:
图14tire原图像及6种算子滤波图像
说明:
对比各算子的边缘提取结果,lapla
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 医学 数字图像 处理 实验 报告