matlab区域增长法分割图像例子

原创 2015年11月01日 12:48:17
1.区域生长是一种串行区域分割的图像分割方法

优点是基本思想相对简单,通常能将具有相同特征的联通区域分割出来,并能提供很好的边界信息和分割结果。在没有先验知识可以利用时,可以取得最佳的性能,可以用来分割比较复杂的图象,如自然景物。

但是,区域生长法是一种迭代的方法,空间和时间开销都比较大噪声和灰度不均一可能会导致空洞和过分割,并在对图像中的阴影效果处理上往往不是很好。

2.区域生长的基本思想是:

将具有相似性质的像素集合起来构成区域。

  • 先对每个需要分割的区域找一个种子像素作为生长的起点
  • 然后将种子像素周围邻域中与种子像素具有相同或相似性质的像素(根据某种事先确定的生长或相似准则来判定)合并到种子像素所在的区域中
  • 将这些新像素当做新的种子像素继续进行上面的过程,直到再没有满足条件的像素可被包括进来,这样,一个区域就长成了。

3.区域生长是指从某个像素出发,按照一定的准则,逐步加入邻近像素,当满足一定的条件时,区域生长终止。区域生长的好坏决定于

  • 初始点(种子点)的选取。
  • 生长准则。
  • 终止条件。

区域生长是从某个或者某些像素点出发,最后得到整个区域,进而实现目标的提取。

4.简单来说下三个法则,对出需要分割的图像:

  1. 选取图像中的一点为种子点(种子点的选取需要具体情况具体分析)。
  2. 在种子点处进行8邻域或4邻域扩展,判定准则是:如果考虑的像素与种子像素灰度值差的绝对值小于某个门限T,则将该像素包括进种子像素所在的区域。
  3. 当不再有像素满足加入这个区域的准则时,区域生长停止。

区域生长实现的步骤如下:

  1. 对图像顺序扫描!找到第1个还没有归属的像素, 设该像素为(x0, y0);

  2.  以(x0, y0)为中心, 考虑(x0, y0)的8邻域像素(x, y),如果(x,, y)满足生长准则, 将(x, y)与(x0, y0)合并(在同一区域内), 同时将(x, y)压入堆栈;

  3.  从堆栈中取出一个像素, 把它当作(x0, y0)返回到步骤2;

  4.  当堆栈为空时!返回到步骤1;

  5. 重复步骤1 - 4直到图像中的每个点都有归属时。生长结束。

matlab例子(来源于matlab中文论坛:http://www.ilovematlab.cn/thread-75607-1-1.html):

A0=imread('圆圈.jpg');%读取图像
seed=[1,2];%选择起始位置
thresh=15;%相似性选择阈值
A=rgb2gray(A0);%灰度化
A=imadjust(A,[min(min(double(A)))/255,max(max(double(A)))/255],[]);
A=double(A);%将图像灰度化
B=A;
[r,c]=size(B);%r为行数,c为列
n=r*c;%计算图像包含点的个数
pixel_seed=A(seed(1),seed(2));%原图起始点灰度值
q=[seed(1),seed(2)];%q用来装载起始位置
top=1;%循环判断flag
M=zeros(r,c);%建立一个与原图大小一样的矩阵
M(seed(1),seed(2))=1;%将起始点赋为1,其余为0
count=1;%计数器

while top~=0 %循环结束条件
    r1=q(1,1);%起始点行位置
    c1=q(1,2);%起始点列位置
    p=A(r1,c1);%起始点灰度值
    dge=0;
    for i=-1:1%周围点循环判断
        for j=-1:1
            
            if r1+i<=r & r1+i>0 & c1+j<=c & c1+j>0%保证在点周围范围内
                if abs(A(r1+i,c1+j)-p)<=thresh & M(r1+i,c1+j)~=1
                    top=top+1;%满足判定条件则top+1,top为多少,则q的行数有多少
                    q(top,:)=[r1+i,c1+j];%将满足判定条件的周围点位置赋予q,q记载了满足判定的每一外点
                    M(r1+i,c1+j)=1;%满足判定条件将M中相对应的点赋1
                    count=count+1;%统计满足条件的点个数,其实与top此时的值一样
                    B(r1+i,c1+j)=1;%满足判定条件将B中相对应点赋值1
                end
                
                if M(r1+i,c1+j)==0;%如果M中相对应的值为0,将dge赋值为1,也就是说这几个点不满足条件
                    dge=1;
                end
                
            else
                dge=1;%在图像外将dge赋值为1
            end
        end
    end
    %此时对周围几点判断完毕,在点在图像外或不满足判定条件则将dge赋为1,满足条件dge为0
    if dge~=1
        B(r1,c1)=A(seed(1),seed(2));%将原图起始位置赋予B
    end
    
    if count>=n%如果满足判定条件的点个数大于等于n
        top=1;
    end
    
    q=q(2:top,:);
    top=top-1;
end
subplot(121),imshow(A,[]);
subplot(122),imshow(B,[]);










版权声明:本文为博主原创文章,未经博主允许不得转载。

matlab 图像形态学处理与图像分割

1. 对图像进行去噪、直方图均衡等图像增强处理去噪>> finger_noise=imread('finger_noise.jpg'); >> gray_finger_noise=rgb2gray...
  • hzh_csdn
  • hzh_csdn
  • 2016年12月01日 17:07
  • 2271

Matlab实现图像分割

下面使用极小值点阈值选取方法,编写MATLAB程序实现图像分割的功能。 极小值点阈值选取法即从原图像的直方图的包络线中选取出极小值点, 并以极小值点为阈值将图像转为二值图像 clear al...
  • u010839382
  • u010839382
  • 2014年06月14日 21:31
  • 10023

matlab图像分割

(1)基于阈值的分割方法:在阈值分割中,最常用的分割方法是直方图阈值分割法。直方图阈值法必须假设每个峰值对应的是一个区域,而峰谷则代表了不同区域的边界值。与灰度图像不同的是,彩色图像有R,G,B,3个...
  • gloriazhang2013
  • gloriazhang2013
  • 2017年03月29日 18:06
  • 1215

matlab图像分割算法源码

1.图像反转 MATLAB程序实现如下: I=imread('xian.bmp'); J=double(I); J=-J+(256-1);                 %图像反转线性变换 ...
  • u012116229
  • u012116229
  • 2015年03月31日 10:35
  • 5948

matlab实现分水岭算法处理图像分割

此程序为优化后的分水岭算法,避免了图像过分割 I= imread('D:\Images\pic_loc\1870405130305041503.jpg'); imshow(I); h=fsp...
  • abcjennifer
  • abcjennifer
  • 2011年08月08日 14:04
  • 37979

数字图像处理-图像分割:Snake主动轮廓模型 Matlab代码及运行结果

数字图像处理-图像分割:Snake主动轮廓模型 Matlab代码及运行结果, 提供了详细的代码实现和相关说明,会对需要的人提供帮助。程序已在Matlab2012b上测试通过,有疑问请留言...
  • gujinjin2008
  • gujinjin2008
  • 2014年06月06日 16:21
  • 9888

matlab图像分割

  • 2014年09月22日 08:53
  • 841KB
  • 下载

matlab实现对图像的切割

在有些程序中由于图像过大,常常需要我们将图像切割成几个比较小的图案之后在进行相关的处理。  Img=imread('sssd.png'); imgsize=size(Img) subimg_widt...
  • zhouyelihua
  • zhouyelihua
  • 2015年01月05日 10:26
  • 16152

用matlab做的图像分割

  • 2008年12月28日 21:07
  • 1KB
  • 下载

MATLAB实现静态图像分割

MATLAB实现静态图像分割待处理图像是一张药板图,我们的处理目标有以下几个: 1. 将药板从黑色背景中分离(药板部分显示为白色,背景显示为黑色); 2. 根据分割结果将药板旋转至水平; 3. ...
  • jiji_vip
  • jiji_vip
  • 2017年05月18日 19:25
  • 493
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:matlab区域增长法分割图像例子
举报原因:
原因补充:

(最多只允许输入30个字)