您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 基于Matlab的医学图像增强与边缘检测算法的实验研究
专业综合实验报告---数字图像处理专业:电子信息工程班级:110406姓名:顾江飞学号:20111610指导教师:王昕2014年7月18日设计一基于matlab的医学图像边缘检测算法的研究一、设计目的运用多种算法对医学图像进行边缘检测,取得更丰富的医学图像边缘信息,以便于医学图像的进一步处理。二、设计内容和要求利用各种微分算子—Roberts算子、Prewitt算子、Sobel算子、Laplacian算子和Canay算子分别对图像进行边缘检测,得到不同的方法对图像边缘检测的结果图。最后得出可以对医学图像实现边缘定位,为医学图像进一步的测量或识别做准备,能对医学图像中病灶部位特征加以明确区分。三、设计步骤1.打开计算机,运行matlab程序2.用各种算法处理图片3.认真详实的记录实验过程和结果四、实验所需设备及软件计算机一台、移动式存储器、matlab软件五、设计报告内容1.材料对于一幅医学图片,分别用Roberts算子、Prewitt算子、Sobel算子、Laplacian算子和Canny算子对图像进行边缘提取。2.方法边缘检测是空域微分算子(实际上是微分算子的差分近似)利用卷积来实现的。常用的微分算子有梯度算子、拉普拉斯算子和Canny算子等,这些算子不但可以检测图像的二维边缘,还可检测图像序列的三维边缘。边缘提取方法是考察图像的每个像素的某个领域内灰度的变化,利用邻域邻近一阶或二阶方向导数变化规律,用简单的方法检测边缘,称为微分算子法。2.1梯度算子根据参考文献,梯度对应于一阶导数,相应的梯度算子就对应于一阶导数算子。对于一个连续函数f(x,y),它的位置(x,y)的梯度可表示为一个矢量,其在(x,y)处的梯度定义如下。(1)这个矢量的幅度(即简称为梯度)和方向角分别为:(2)(3)式(1)~(3)中的偏导数需要对每一个像素位置进行计算,运算量大,在实际应用中常常采用小区域模板卷积来近似计算,GX和GY各自使用一个模板。最简单的是Roberts算子,其模板如下:(4)较复杂的常用模板有Prewitt算子和Sobel算子,分别如(5)和(6)所示:(5)(6)利用Matlab图像工具箱中的edge函数,对以上算子来检测图像边缘.edge函数提供许多微分算子模板,在检测边缘时可以指定一个灰度阈值,只有满足这个阈值条件的点才视为边界点。Edge函数基本格式为:BW=edge(I,’type’,parmeter,…)其中,I表示输入图像,type表示使用的算子类型,parmeter则是与具体算子有关的参数。2.2拉普拉斯算子和Canny算子拉普拉斯算子(Laplacian)是一种二阶导数算子。对于一个连续函数f(x,y)处的拉普拉斯算子定义如下:(7)在图像处理过程中,拉普拉斯算子也可借助各种模板来实现。对模板的基本要求是:对应中心像素的系数为正,其余相邻像素的系数为负,并且所有系数的和应该为零。常用的2种模板如式(8)所式。(8)Canny边缘检测是一种比较新的边缘检测算子,该方法与其他边缘检测方法的不同之处在于,它使用两种不同的阈值分别检测强边缘和弱边缘,并且仅当弱边缘与强边缘相连时,才将弱边缘包含在输出图像中,因此这种方法较其他方法而言不容易被噪声“填充”,更容易检查出真正的弱边缘。程序:blood=imread('1.jpg');[x,y,z]=size(blood);%求出图象大小b=double(blood);N=sqrt(100)*randn(x,y,z);%生成方差为10的白噪声I=b+N;%噪声干扰图象fori=1:x;%实际图象的灰度为0~255forj=1:yif(I(i,j)255)I(i,j)=255;endif(I(i,j)0)I(i,j)=0;endendendz0=max(max(I));%求出图象中最大的灰度z1=min(min(I));%最小的灰度T=(z0+z1)/2;TT=0;S0=0;n0=0;S1=0;n1=0;allow=0.5;%新旧阈值的允许接近程度d=abs(T-TT);count=0;%记录几次循环while(d=allow)%迭代最佳阈值分割算法count=count+1;fori=1:xforj=1:yif(I(i,j)=T)S0=S0+I(i,j);n0=n0+1;endif(I(i,j)T)S1=S1+I(i,j);n1=n1+1;endendendT0=S0/n0;T1=S1/n1;TT=(T0+T1)/2;d=abs(T-TT);T=TT;endSeg=zeros(x,y);fori=1:xforj=1:yif(I(i,j)=T)Seg(i,j)=1;%阈值分割的图象endendendSI=1-Seg;%阈值分割后的图象求反,便于用腐蚀算法求边缘se1=strel('square',3);%定义腐蚀算法的结构SI1=imerode(SI,se1);%腐蚀算法BW=SI-SI1;%边缘检测%=====传统的边缘检测方法======%I=uint8(I);BW1=edge(SI,'sobel');BW2=edge(SI,'log');BW3=edge(SI,'canny');BW4=edge(SI,'roberts');BW5=edge(SI,'prewitt');%===========图象显示==========%figure;subplot(231);imshow(I);title('Original')%显示阈值分割的图象subplot(232);imshow(BW2);title('log')%显示新算法的边缘图象subplot(233);imshow(BW1);title('sobel');subplot(234);imshow(BW3);title('canny');subplot(235);imshow(BW4);title('roberts');subplot(236);imshow(BW5);title('prewitt');结果:Originallogsobelcannyrobertsprewitt4讨论本实验通过对一幅医学图像的边缘检测,得出各种不同算子---Roberts算子、Sobel算子、Prewitt算子、拉普拉斯算子以及Canny算子对图像做边缘提取时,由于算子本身对不同边缘类型的敏感程度不同,产生了不同的效果。对比各个算子所抽取的边缘可以看到,由于各算子本身存在的频谱特性,发现这些算子对不同方向的边缘抽取的效果是不同的,特别是对于那些边缘细节的提取。由图可以很清楚的看出,Roberts算子法对边缘的定位不是很准确,无法检测出图中一些区域的边缘。看出Sobel算子和Prewitt算子虽然能够检测出边缘,但是它的边缘是不连续的,且比较模糊,另外,可以看出Sobel算子提取细节信息量比Prewitt算子的较多.拉普拉斯算子法和Canny算子法检测边缘时,拉普拉斯算子对边缘抽取看起来也比较平滑,然而虽然拉普拉斯能检测出很多细微变化的边缘,但它也会产生好多虚假信息,而Canny算子法能够真正检测到的弱边缘。5结论边缘检测的任务就是精确定位边缘和抑制噪声。边缘检测算子在医学图像上的应用体现在医学图像的匹配、肿瘤病灶的确定、造影血管的检测、冠心病的诊断、左心室边缘的抽出和医学图像的三维重建等。由于医学图像往往受各种噪声,成像误差和人体本身等诸多因素的影响,使医学图像的边缘不清晰,人眼很难准确判断,而医学图像质量的好坏又直接影响医务人员对疾病的诊治,因此,对医学图像边缘检测的研究是非常必要的。微分算子利用Matlab实现医学图像边缘检测是较为好用的方法,除了算法简单、计算速度快之外,处理效果也比较好,因此掌握这些常用算子边缘检测的实现代码,为医学诊断提供了良好的分析手段。
本文标题:基于Matlab的医学图像增强与边缘检测算法的实验研究
链接地址:https://www.777doc.com/doc-2570610 .html