基于Matlab的医学图像增强与边缘检测算法的实验研究

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

专业综合实验报告

---数字图像处理

专业:电子信息工程

班级:110406

姓名:***

学号:********

指导教师:***

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; % 噪声干扰图象

for i=1:x; % 实际图象的灰度为0~255

for j=1:y

if (I(i,j)>255)

I(i,j)=255;

end

if (I(i,j)<0)

I(i,j)=0;

end

end

end

z0=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;

for i=1:x

for j=1:y

if (I(i,j)>=T)

S0=S0+I(i,j);

n0=n0+1;

end

if (I(i,j)

S1=S1+I(i,j);

n1=n1+1;

end

end

end

T0=S0/n0; T1=S1/n1; TT=(T0+T1)/2;

d=abs(T-TT); T=TT;

end

Seg=zeros(x,y);

for i=1:x

for j=1:y

if(I(i,j)>=T)

Seg(i,j)=1; % 阈值分割的图象

end

end

end

SI=1-Seg; % 阈值分割后的图象求反,便于用腐蚀算法求边缘

se1=strel('square',3); % 定义腐蚀算法的结构

SI1=imerode(SI,se1); % 腐蚀算法

BW=SI-SI1; % 边缘检测%=====传统的边缘检测方

相关文档
最新文档