zoukankan      html  css  js  c++  java
  • matlab练习程序(区域填充算法,队列版)

      其实写过一步法二值图像连通区域标记之后我就感觉这个标记和填充基本上是一回事,所以我这里就用了一步法的那个队列算法。也没什么好说的,算法几乎一样,就是细节的区别。还有这里使用了ginput函数。至于堆栈版的实现,看情况吧。

    clear all;
    close all;
    clc;
    
    img=imread('liantong.bmp');
    img=img>128;
    img=mat2gray(img);
    imshow(img);
    
    [m n]=size(img);
    [x y]=ginput();
    x=round(x);
    y=round(y);
    
    tmp=ones(m,n);
    queue_head=1;       %队列头
    queue_tail=1;       %队列尾
    neighbour=[-1 -1;-1 0;-1 1;0 -1;0 1;1 -1;1 0;1 1];  %和当前像素坐标相加得到八个邻域坐标
    %neighbour=[-1 0;1 0;0 1;0 -1];     %四邻域用的
    q{queue_tail}=[y x];
    queue_tail=queue_tail+1;
    [ser1 ser2]=size(neighbour);
    
    while queue_head~=queue_tail
        pix=q{queue_head};
        for i=1:ser1
            pix1=pix+neighbour(i,:);
            if pix1(1)>=1 && pix1(2)>=1 &&pix1(1)<=m && pix1(2)<=n
                if img(pix1(1),pix1(2))==1 
                    img(pix1(1),pix1(2))=0;
                    q{queue_tail}=[pix1(1) pix1(2)];
                    queue_tail=queue_tail+1;
    
                end      
            end
        end
    
        queue_head=queue_head+1;
    end
    
    figure(1);
    imshow(mat2gray(img));

    效果图:

    原图

    下面是不同的填充效果:

    参考:

    维基百科

    一个不错的C实现

  • 相关阅读:
    05
    04
    03
    02
    01
    drf 频率类
    drf 视图家族
    drf 之 群改,单改接口
    drf 序列化
    drf 之模块
  • 原文地址:https://www.cnblogs.com/tiandsp/p/2806186.html
Copyright © 2011-2022 走看看