IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> MATLAB学习笔记 FloodFill算法 -> 正文阅读

[数据结构与算法]MATLAB学习笔记 FloodFill算法

程序基于洪水填充算法,可以使用 bwlabel 概念完成相同的应用程序。

图示效果:

?参考代码:

function paintapp
    scz=get(0,'ScreenSize');
    figure('Position',[round(scz(1,3)/4) round(scz(1,4)/8) 700 500],'MenuBar','None','NumberTitle','off','Name','Paint Application','Resize','off');
    inputs=['RED   ';'GREEN ';'BLUE  ';'YELLOW';'BLACK ';'WHITE ';'ORANGE';'PURPLE';'BROWN ';'PINK  ';'GRAY  ';'LGREEN';'Save  ';'undo  '];
    global top targetcolor replacecolor x y A color undocolor originalcolor point filename;
    top=1;
    targetcolor=[255 255 255];
    xaxis=500;
    yaxis=400;
    for k=1:size(inputs,1)
    uicontrol('Style','pushbutton','position',[xaxis yaxis 80 30],'String',inputs(k,:),'Callback',@paintme);
    xaxis=xaxis+90;

    if(mod(k,2)==0)
        yaxis=yaxis-50;
        xaxis=500;
    end
end


ax=axes('Position',[0 0 .7 1],'xtick',[],'ytick',[]);
directory=dir('*.png');
files={directory.name}';
uicontrol('Style','popupmenu','position',[500 450 160 30],'Value',1,'String',files,'Callback',@displayfile);


function displayfile(obj,~)
    ptr=get(obj,'value');
    filename=char(files(ptr));
    A=imread(filename);
    image(A);
end
    

function paintme(object,~)
   color=get(object,'String');
   if(~isempty(A))

   switch(color(1,:))
       case 'RED   '
           while(strcmp(color,'RED   ')==1)
           replacecolor=[254 1 1];
            getpoints;
           end
       case 'GREEN '
           while(strcmp(color,'GREEN ')==1)
           replacecolor=[1 60 21];
          getpoints;
           end
       case 'BLUE  '
           while(strcmp(color,'BLUE  ')==1)
               replacecolor=[20 120 120];
           %replacecolor=[1 1 254];
            getpoints;
           end
       case 'YELLOW'
           while(strcmp(color,'YELLOW')==1)
           replacecolor=[240 240 1];
           getpoints;
           end
       case 'BLACK '
           while(strcmp(color,'BLACK ')==1)
           replacecolor=[1 1 1];
            getpoints;
           end
       case 'WHITE '
           while(strcmp(color,'WHITE ')==1)
           replacecolor=[254 254 254];
            getpoints;
           end
       case 'ORANGE'
          while(strcmp(color,'ORANGE')==1)
          replacecolor=[250 90 1];
         getpoints;
          end
       case 'PURPLE'
           while(strcmp(color,'PURPLE')==1)
           replacecolor=[90 20 60];
            getpoints;
           end
       case 'BROWN '
           replacecolor=[90 20 10];
           while(strcmp(color,'BROWN ')==1)
            getpoints;
           end
       case 'PINK'
           while(strcmp(color,'PINK  ')==1)
           replacecolor=[220 90 90];
            getpoints;
           end
        case 'LGREEN'
           while(strcmp(color,'LGREEN')==1)
            replacecolor=[20 240 10];
            getpoints;
           end
       case 'GRAY  '
           while(strcmp(color,'GRAY  ')==1)
           replacecolor=[20 20 20];
            getpoints;
           end
        case 'undo  '
                floodfill(point(1),point(2),undocolor,originalcolor);
       case 'Save  '
           fname=strcat('my',filename);
           msg=strcat('File name:',fname);
           msgbox(msg,'FILE SAVED');
        end
   end
end


function getpoints
     try
         waitforbuttonpress;
         f=get(ax,'CurrentPoint');
         x=round(f(1,2));
         y=round(f(1,1));
         % check whether x and y is less than the size of the image
         targetcolor(1)=A(x,y,1);
         targetcolor(2)=A(x,y,2);
         targetcolor(3)=A(x,y,3);
         point(1)=x;
         point(2)=y;
         undocolor=replacecolor;
         originalcolor=targetcolor;
         floodfill(x,y,targetcolor,replacecolor);
         color='null';
     catch
         color='null';
     end
end
    


function floodfill(x,y,targetcolor,replacecolor)

    top=1;
    queue=zeros(1);

    if((A(x,y,1)==targetcolor(1)) && (A(x,y,2)==targetcolor(2)) && (A(x,y,3)==targetcolor(3)))

        queue(top,1)=x;

        queue(top,2)=y;

        top=top+1;

        i=1;

     while(i~=top)
          l= queue(i,1);
          m=queue(i,2);

         if((A(l,m,1)==targetcolor(1))&&(A(l,m,2)==targetcolor(2))&&(A(l,m,3)==targetcolor(3)))

             w=m;

             e=m;

             wnode=1;

             enode=1;

             while((A(l,w,1)==targetcolor(1))&&(A(l,w,2)==targetcolor(2))&&(A(l,w,3)==targetcolor(3)))
                 wnode=wnode+1;
                 w=w-1;
             end

             while((A(l,e,1)==targetcolor(1))&&(A(l,e,2)==targetcolor(2))&&(A(l,e,3)==targetcolor(3)))
                 enode=enode+1;
                 e=e+1;
             end

             w=m+1;

             e=m-1;

             for j=1:wnode-1

                 A(l,w-j,1)=replacecolor(1);

                 A(l,w-j,2)=replacecolor(2);

                A(l,w-j,3)=replacecolor(3);

             end

             

             for j=1:enode-1

                A(l,e+j,1)=replacecolor(1);

                A(l,e+j,2)=replacecolor(2);

                A(l,e+j,3)=replacecolor(3);

             end

             snode=m-wnode+2;

             for j=snode:(snode+enode+wnode-4)

                if((A(l+1,j,1)==targetcolor(1))&&(A(l+1,j,2)==targetcolor(2))&&(A(l+1,j,3)==targetcolor(3)))

                   queue(top,1)=l+1;

                   queue(top,2)=j;

                   top=top+1;

               end

                if((A(l-1,j,1)==targetcolor(1))&&(A(l-1,j,2)==targetcolor(2))&&(A(l-1,j,3)==targetcolor(3)))

               queue(top,1)=l-1;

               queue(top,2)=j;

               top=top+1;

                end

                end

         end

        i=i+1;

    end

    end

    image(A);

end

end

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 12:10:17  更:2021-09-03 12:12:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:37:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码