matlab练习程序(区域填充算法,队列版)
2012-12-06 21:28
399 查看
其实写过一步法二值图像连通区域标记之后我就感觉这个标记和填充基本上是一回事,所以我这里就用了一步法的那个队列算法。也没什么好说的,算法几乎一样,就是细节的区别。还有这里使用了ginput函数。至于堆栈版的实现,看情况吧。
效果图:
原图
下面是不同的填充效果:
参考:
维基百科
一个不错的C实现
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实现
相关文章推荐
- matlab练习程序(白平衡<灰度世界算法>)
- matlab练习程序(二值图像连通区域标记法,两步法)
- matlab练习程序(图像区域分裂)
- [转]matlab队列实现区域填充
- matlab练习程序(二值图像连通区域标记法,两步法)
- MATLAB - 练习程序,求灰度图像均值、最大、最小数值
- Java程序练习-队列操作
- 区域生长算法原理以及Matlab实现
- Android多边形区域递归种子填充算法的示例代码
- matlab练习程序(模板匹配)
- matlab练习程序(SUSAN检测)
- matlab练习程序(单源最短路径Dijkstra)
- matlab练习程序(表面模糊)
- matlab 用鼠标取ROI区域边界点坐标的一个小程序
- matlab小程序练习
- matlab练习程序(高斯金字塔)
- matlab 自动阈值白平衡算法 程序可编译实现
- matlab练习程序(射线法判断点与多边形关系)
- matlab练习程序(Log Polar变换)
- 魔棒工具,线性区域填充算法实现