zoukankan      html  css  js  c++  java
  • MATLAB 区域填充算法,队列版

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

     1 clear all;
     2 close all;
     3 clc;
     4 
     5 img=imread('liantong.bmp');
     6 img=img>128;
     7 img=mat2gray(img);
     8 imshow(img);
     9 
    10 [m n]=size(img);
    11 [x y]=ginput();
    12 x=round(x);
    13 y=round(y);
    14 
    15 tmp=ones(m,n);
    16 queue_head=1;       %队列头
    17 queue_tail=1;       %队列尾
    18 neighbour=[-1 -1;-1 0;-1 1;0 -1;0 1;1 -1;1 0;1 1];  %和当前像素坐标相加得到八个邻域坐标
    19 %neighbour=[-1 0;1 0;0 1;0 -1];     %四邻域用的
    20 q{queue_tail}=[y x];
    21 queue_tail=queue_tail+1;
    22 [ser1 ser2]=size(neighbour);
    23 
    24 while queue_head~=queue_tail
    25     pix=q{queue_head};
    26     for i=1:ser1
    27         pix1=pix+neighbour(i,:);
    28         if pix1(1)>=1 && pix1(2)>=1 &&pix1(1)<=m && pix1(2)<=n
    29             if img(pix1(1),pix1(2))==1 
    30                 img(pix1(1),pix1(2))=0;
    31                 q{queue_tail}=[pix1(1) pix1(2)];
    32                 queue_tail=queue_tail+1;
    33 
    34             end      
    35         end
    36     end
    37 
    38     queue_head=queue_head+1;
    39 end
    40 
    41 figure(1);
    42 imshow(mat2gray(img));

    效果图:

    原图

    下面是不同的填充效果:

  • 相关阅读:
    40. Combination Sum II
    39. Combination Sum
    找一找
    37. Sudoku Solver
    Activiti 多个并发子流程的应用
    BPMN2新规范与Activiti5
    BPMN这点事-BPMN扩展元素
    JAVA规则引擎 -- Drools
    工作流Activiti5流程变量 任务变量 setVariables 跟 setVariablesLocal区别
    activiti 学习( 三 ) 之 流程启动者
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13646179.html
Copyright © 2011-2022 走看看