图像分割实验报告
评分
实验报告
课程名称医学图像处理
实验名称图像分割
专业班级
姓名
学号
实验日期
实验地点
2015—2016学年度第2学期
一、实验目的
掌握常用的边缘提取算法,从图像中提取感兴趣的区域,实现图像分割。在图像中,寻找灰度相同或相似的区域,区分图像中的背景区域和目标区域,利用Matlab实现图像的边缘检测,进行图像分割。
imshow(I);figure; %显示图像
J=imhist(I);imhist(I); %生成直方图并显示
[M,N]=size(I); %返回图像的行数和列数
for i=1:1:M %将i以步长1从1增加到M
for j=1:1:N %将j以步长1从1增加到N
if I(i,j)>80 %如果图像阈值大于80
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显示
这种方法简单、直接。但增强的图像仅显示灰度变化比较陡的边缘轮廓,而灰度变换比较平缓的区域则呈暗色。
加阈值的梯度输出
加阈值的梯度输出表达式为
式中,T是一个非负的阈值,适当选取T,既可以使明显的边缘得到突出,又不会破坏原来灰度变化比较平缓的背景。
给边缘指定一个特定的灰度级
式中LG是根据需要指定的一个灰度级,它将明显的边缘用一个固定的灰度级表现,而其他的非边缘区域的灰度级仍保持不变。
图像分割处理主要用于检测出图像中的轮廓边缘、细节以及灰度跳变部分,形成完整的物体边界,达到将物体从图像中分离出来或将表示同一物体表面的区域检测出来的目的。常用的分割方法是边缘检测。边缘检测是采用多种边缘算子实现突出图像边缘,抑制图像中非边缘信息,使图像轮廓更加清晰。
1.梯度算子法
对于图像f(x,y),它在点f(x,y)处的梯度是一个矢量,定义为
选取,检测边缘方向为垂直方向
[g4,t]=edge(J,'sobel',[],'vertical'); %用sobel检测器对加噪图像进行边缘检测,阈值自
动选取,检测边缘方向为垂直方向
[g5,t]=edge(f,'sobel',[],'horizontal'); %用sobel检测器对原图像进行边缘检测,阈值自
subplot(1,3,2); %创建一个一行三列的窗口,在第二个窗口显示图像
imshow(laplacianH); %显示图像
title('laplacian算子锐化图像'); %标注标题
H=fspecial('prewitt'); %生成Prewitt滤波器
prewittH=filter2(H,I); %以prewitt为模板对图像I进行锐化滤波
g(i,j)=0; %则大于80的就变成黑的
else g(i,j)=1; %小于80就变成白的
end
end
end
figure;imshow(g); %保持原图,显示图像g
图1原图图2直方图图3阈值分割后的二值图像
分析:手动阈值分割的阈值是取直方图中双峰的谷底的灰度值作为阈值,若有多个双峰谷底,
则取第一个作为阈值。本题的阈值取80。
subplot(1,3,3); %创建一个一行三列的窗口,在第三个窗口显示图像
imshow(prewittH); %显示图像
title('prewitt模板锐化图像'); %标注标题
图6原图像图7laplacian算子锐化图像图8prewitt模板锐化图像
分析:从结果图可以看出,laplacian算子对边缘的处理更明显,它是二阶微分算子,能加强
二、实验环境
1、硬件配置:Intel(R)Core(TM) i5-4210U CPU @1.7GHz 1.7GHz
安装内存(RAM):4.00GB系统类型:64位操作系统
2、软件环境:MATLAB R2013b软件
三、实验内容
(包括本实验要完成的实验问题及需要的相关知识简单概述)
图像边缘是图像中特性(如像素灰度、纹理等)分布的不连续处,图像周围特性有阶跃变化或屋脊状变化的那些像素的集合。图像边缘存在于目标与背景、目标与目标、基元与基元的边界,标示出目标物体或基元的实际含量,是图像识别信息最集中的地方。
J=imnoise(f,'gaussian',0.02); %对图像加高斯噪声
subplot(3,3,2); %创建有3*3子图像的窗口,原图在位置2
imБайду номын сангаасhow(J,[]); %显示加噪声的图像
title('加高斯噪声图像'); %给图像加标题为'加高斯噪声图像'
[g1,t]=edge(f,'sobel',[],'both'); %用sobel检测器对原图像进行边缘检测,阈值自动选
动选取,检测边缘方向为水平方向
[g6,t]=edge(J,'sobel',[],'horizontal'); %用sobel检测器对加噪图像进行边缘检测,阈值
自动选取,检测边缘方向为水平方向
subplot(3,3,3); %创建有3*3子图像的窗口,图在位置3
imshow(g1); %显示经sobel算子处理后的图像
边缘效果,对噪声很敏感,Prewitt算子是平均滤波的一阶的微分算子,不仅能检测边缘
点,而且能抑制噪声的影响。
%例4不同边缘检测方法比较
f=imread('cameraman.tif'); %读取图像
subplot(2,2,1);imshow(f); %创建一个二行二列的窗口,在第一个窗口显示图像
title('原始图像'); %标注标题
分析:本题是迭代阈值二值化分割,步骤是:1.选定初始阈值,即原图大小取平均;2.用初阈
值进行二值分割;3.目标灰度值平均背景都取平均;4.迭代生成阈值,直到两次阈值的灰
度变化不超过1,则稳定;5.输出迭代结果。
%例3 Laplacian算子和模板匹配法
I=imread('cameraman.tif'); %读入图像
给背景指定一个特定的灰度级
该方法将背景用一个固定灰度级LG表现,便于研究边缘灰度的变化。
二值图像输出
在某些场合(如字符识别等),既不关心非边缘像素的灰度级差别,又不关心边缘像素的灰度级差别,只关心每个像素是边缘像素还是非边缘像素,这时可采用二值化图像输出方式,其表达式为
此法将背景和边缘用二值图像表示,便于研究边缘所在位置。
取,检测边缘方向(双向)为both
[g2,t]=edge(J,'sobel',[],'both'); %用sobel检测器对加噪图像进行边缘检测,阈值自动
选取,检测边缘方向(双向)为both
[g3,t]=edge(f,'sobel',[],'vertical'); %用sobel检测器对原图像进行边缘检测,阈值自动
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
思考题
1.分析Sobel算子特点,并给予说明。
f=imread('skull.tif'); %读取图像
f=double(f); %转化图像f的类型为双精度
subplot(3,3,1); %创建有3*3子图像的窗口,原图在位置1
imshow(f,[]); %显示原图像f
title('原始图像'); %给图像加标题为'原始图像'
2.Sobel算子法
Sobel相对于先对图像进行加权平均再做差分。
对于图像的3×3窗口 ,设
则定义Sobel算子为
简化成模板可以表示成如下形式:
Sobel模板
3.拉普拉斯运算法
拉普拉斯算子定义图像f(x,y)的梯度为
锐化后的图像g为
式中k为扩散效应系数。对系数k的选择要合理,太大会使图像中的轮廓边缘产生过冲;太小则锐化不明显。
[g,t]=edge(f,'roberts',[],'both'); %用roberts检测器对图像进行边缘检测,阈值自动选
取,检测边缘方向(双向)为both
subplot(2,2,2);imshow(g); %创建一个二行二列的窗口,在第二个窗口显示图像
title('Roberts算子分割结果'); %标注标题
subplot(1,3,1);imshow(I); %创建一个一行三列的窗口,在第一个窗口显示图像