Matlab医学图像分割区域

实验十 医学图像分割(二)

实验目的:

  1. 了解图像分割的基本理论和方法;
  2. 掌握阈值分割的方法和阈值的选择;
  3. 掌握基于分水岭分割的原理和应用;

实验内容:

  1. 区域生长法利用图像像素间的相似性进行分割,调用regiongrow函数对图像weld.tif进行处理,注意参数中S(种子值),T(阈值)的选择对分割效果的影响。S=255,T=65和S=255 T=150和S=150,T=65三组值进行处理,理解在区域生长法的原理。同时对liver.bmp,自己选择合适的S和T,以较好得分割出肝脏。

代码1:

close all;

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:

close all;

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);

结果:

    

  1. 编写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;

while 1

    b=imdilate(a,se);

    P=b-a;

    find(P);

    index=find(P);

    n=size(index);

    for i=1:n

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

        if t>=T

            b(index(i))=0;

            P(index(i))=0;

        end

    end

    a=b;

    

    if sum(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);

while 1

    b=imdilate(a,se);

    P=b-a;

    index=find(P);

    n=size(index);

    for i=1:n

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

        if t>=T

            b(index(i))=0;

            P(index(i))=0;

        end

    end

    a=b;

    indexb=find(b);

    N=length(indexb);

    All=0;

    for i=1:N

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

    end

    average=All/N;

    if sum(sum(P))==0

        break;

    end    

end

结果:

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

代码1:

close all;

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:

close all;

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:

close all;

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连接种子足够相似。
  2. 第二题比较注重算法。用膨胀的方法解决四连接生长点的确定,即先膨胀再进行判断,直到没有出现新的生长点为止。效果与重建很像,但算法不同,适合不同的场合。
  3. 第三题重在理解分水岭的原理,即基于距离变换找出分水岭。但对于梯度分水岭和控制标记符的分水岭分割不理解,需要听老师和其他同学的讲解。还有第二张liver2.bmp有点问题,需要用以前的图片。
  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值