Matlab医学图像分割区域生长.docx

上传人:b****8 文档编号:28514763 上传时间:2023-07-18 格式:DOCX 页数:27 大小:2.17MB
下载 相关 举报
Matlab医学图像分割区域生长.docx_第1页
第1页 / 共27页
Matlab医学图像分割区域生长.docx_第2页
第2页 / 共27页
Matlab医学图像分割区域生长.docx_第3页
第3页 / 共27页
Matlab医学图像分割区域生长.docx_第4页
第4页 / 共27页
Matlab医学图像分割区域生长.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

Matlab医学图像分割区域生长.docx

《Matlab医学图像分割区域生长.docx》由会员分享,可在线阅读,更多相关《Matlab医学图像分割区域生长.docx(27页珍藏版)》请在冰豆网上搜索。

Matlab医学图像分割区域生长.docx

Matlab医学图像分割区域生长

实验十医学图像分割

(二)

实验目的:

1.了解图像分割的基本理论和方法;

2.掌握阈值分割的方法和阈值的选择;

3.掌握基于分水岭分割的原理和应用;

实验内容:

1.区域生长法利用图像像素间的相似性进行分割,调用regiongrow函数对图像weld.tif进行处理,注意参数中S(种子值),T(阈值)的选择对分割效果的影响。

S=255,T=65和S=255T=150和S=150,T=65三组值进行处理,理解在区域生长法的原理。

同时对liver.bmp,自己选择合适的S和T,以较好得分割出肝脏。

代码1:

closeall;

f=imread('weld.tif');

figure

(1),imshow(f),title('原图');

[g1,NR]=regiongrow(f,255,65);

[g2,NR]=regiongrow(f,255,150);

[g3,NR]=regiongrow(f,150,65);

figure

(2),imshow(g1),title('S=255,T=65');

figure(3),imshow(g2),title('S=255,T=150');

figure(4),imshow(g3),title('S=150,T=65');

[y,x]=ginput();

x=floor(x);

y=floor(y);

G=zeros(size(g));

G(g3==g3(x,y))=255;

结果:

代码2:

closeall;

f=imread('liver1.bmp');

figure

(1),imshow(f),title('原图');

g=regiongrow(f,255,135);%肝脏分离

figure

(2),imshow(g),title('S=255,T=135');

[y,x]=ginput();

x=floor(x);

y=floor(y);

G=zeros(size(g));

G(g==g(x,y))=255;

figure(3),imshow(G);

结果:

2.编写m文件,实现单一型或质心型区域生长算法。

由用户通过ginput函数选择种子点,然后根据用户输入的阈值T进行区域生长。

输入为:

待分割的图片f和阈值T,输出为分割后的二值图片g。

代码1:

(单一型)

function[a]=regiongrow2(f,T)

imshow(f);

se=[0,1,0;1,1,1;0,1,0];

[y,x]=ginput();

x=floor(x);

y=floor(y);

a=im2bw(zeros(size(f)));

a(x,y)=1;

while1

b=imdilate(a,se);

P=b-a;

find(P);

index=find(P);

n=size(index);

fori=1:

n

t=abs(f(x,y)-f(index(i)));

ift>=T

b(index(i))=0;

P(index(i))=0;

end

end

a=b;

ifsum(sum(P))==0

break;

end

end

应用:

f=imread('weld.tif');

figure

(1),imshow(f)

g=regiongrow3(f,30);

figure

(2),imshow(g)

代码2:

(质心型)

function[a]=regiongrow4(f,T)

imshow(f);

se=[0,1,0;1,1,1;0,1,0];

[y,x]=ginput();

x=floor(x);

y=floor(y);

a=im2bw(zeros(size(f)));

a(x,y)=1;

average=f(x,y);

while1

b=imdilate(a,se);

P=b-a;

index=find(P);

n=size(index);

fori=1:

n

t=abs(average-double(f(index(i))));

ift>=T

b(index(i))=0;

P(index(i))=0;

end

end

a=b;

indexb=find(b);

N=length(indexb);

All=0;

fori=1:

N

All=All+double(f(indexb(i)));

end

average=All/N;

ifsum(sum(P))==0

break;

end

end

结果:

 

3.用课本中分水岭的距离变换分水岭分割、梯度分水岭分割和控制标记符分水岭分割对liver1和liver2图像进行分割,分析上述算法的特点和存在的问题,考虑如何进行改进?

代码1:

closeall;

f=imread('liver1.bmp');

figure

(1),imshow(f);

%g=im2bw(f,graythresh(f));

[g,NR]=regiongrow(f,255,135);%肝脏分离

figure

(2),imshow(g);

gc=~g;

D=bwdist(gc);

L=watershed(-D);

w=L==0;

figure(3),imshow(w);

g2=g&~w;

figure(5),imshow(g2);

 

代码2:

closeall;

f=imread('liver1.bmp');

F=regiongrow(f,255,135);

%F=im2bw(f,graythresh(f));

figure

(1),imshow(F);

h=fspecial('sobel');

fd=double(f);

g=sqrt(imfilter(fd,h,'replicate').^2+...

imfilter(fd,h','replicate').^2);

figure

(2),imshow(g);

L=watershed(g);

wr=L==0;

figure(3),imshow(wr);

g2=imclose(imopen(g,ones(3,3)),ones(3,3));

L2=watershed(g2);

wr2=L2==0;

f2=F;

f2(wr2)=255;

figure(4),imshow(f2);

代码3:

closeall;

f=imread('liver1.bmp');

F=regiongrow(f,255,135);

%F=im2bw(f,graythresh(f));

figure

(1),imshow(F);

h=fspecial('sobel');

fd=double(f);

g=sqrt(imfilter(fd,h,'replicate').^2+...

imfilter(fd,h','replicate').^2);

figure

(2),imshow(g);

L=watershed(g);

wr=L==0;

figure(3),imshow(wr);

rm=imregionalmin(g);

im=imextendedmin(f,2);

fim=f;

fim(im)=175;

Lim=watershed(bwdist(im));

em=Lim==0;

figure(4),imshow(em);

g2=imimposemin(g,im|em);

L2=watershed(g2);

f2=f;

f2(L2==0)=255;

figure(5),imshow(f2);

实验报告:

1.实验目的

2.实验内容(部分可略写)每题分开写,并标明题号

3.实验小结和体会

小结:

1、第一题重在理解S和T的涵义,若S是一个标量,则它定义一个亮度值,f中有着该值的所有点都变成种子;若T是标量,则它会定义一个全局阈值,阈值用来测试图像中的像素是否与该种子或8连接种子足够相似。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1