function [seg,seg_arr,reg_info,c_lab]=region_grow1(im,seg,criterion,connectivity)
%输入参数:
% im: 用于分区的图像
% seg: 图像初始标签矩阵,与im大小相同。通常它的每个像素都有不同的标签值
% criterion: 判断区域合并与否的条件值
% connectivity: 邻域连通的大小,取4或8
% 输出参数:
% seg: 分割后的图像
% seg_arr: 每次循环处理的图像分割的结果,是中间图像
% reg_info: 记录各个分割区域的信息的结构
rows=size(im,1); %计算图像大小
cols=size(im,2);
reg_info=struct('size',num2cell(zeros(1,max(max(seg)))),... %记录图像大小
'crt',num2cell(zeros(1,max(max(seg)))),... %记录规则
'row_coord',[],... %记录区域行坐标
'col_coord',[]); %记录区域列坐标
%从初始划分中收集已有区域的信息
for m=1:rows
for n=1:cols
c_lab=seg(m,n);
%disp(['c_lab=' num2str(c_lab)]);
reg_info(c_lab).size = reg_info(c_lab).size+1;
%计算每一个区域的均值
reg_info(c_lab).crt = ((reg_info(c_lab).size-1)*reg_info(c_lab).crt+...
im(m,n))/reg_info(c_lab).size;
reg_info(c_lab).row_coord = [reg_info(c_lab).row_coord m];
reg_info(c_lab).col_coord = [reg_info(c_lab).col_coord n];
end
end
changed=1;%假设第一次循环区域划分会发生变化
iter=0;%记录循环次数
%图像发生变化时,按照规则继续分割图像
while(changed)
disp(['Currently in iteration: ' num2str(iter+1)]);
changed=0;
for m=1:rows
for n=1:cols
c_lab=seg(m,n);%获得当前像素的标签值
%获取当前像素的4-连通或8-连通邻域的像素坐标
if (connectivity==4)
ngb=get4ngb(rows,cols,m,n);
end
if (connectivity==8)
ngb=get8ngb(rows,cols,m,n);
end
%检查所有邻域像素的标签值,按照规则一次判断是否与当前像素同区
for k=1:size(ngb,2)
n_lab=seg(ngb(1,k),ngb(2,k));
if(n_lab~=c_lab)
if(abs(reg_info(n_lab).crt-reg_info(c_lab).crt)<criterion)
%更改标签值等于c_lab的区域的均值
reg_info(c_lab).crt=(reg_info(c_lab).size*reg_info(c_lab).crt+...
reg_info(n_lab).size*reg_info(n_lab).crt)/...
(reg_info(c_lab).size+reg_info(n_lab).size);
%更改该区域的大小
reg_info(c_lab).size=reg_info(c_lab).size+reg_info(n_lab).size;
%给该区域中的所有像素赋标签值c_lab
tmp_row_coord=reg_info(n_lab).row_coord;
tmp_col_coord=reg_info(n_lab).col_coord;
for p=1:reg_info(n_lab).size
seg(tmp_row_coord(p),tmp_col_coord(p))=c_lab;
end
%更改该区域内所有像素的坐标
reg_info(c_lab).row_coord=[reg_info(c_lab).row_coord reg_info(n_lab).row_coord];
reg_info(c_lab).col_coord=[reg_info(c_lab).col_coord reg_info(n_lab).col_coord];
reg_info(n_lab).size=0;
changed=1;
end
end
end
end
end
iter=iter+1;
%将本次循环结果存在放到seg_arr中,用于验证。
%其中第一个图像是初始的分割图像
seg_arr(:,:,iter)=seg;
end
%清空reg_info
index=1;
for m=1:max(max(seg))
if (reg_info(m).size>0)
tmp_reg_info(index)=reg_info(m);
index=index+1;
end
end
reg_info=tmp_reg_info;
没有合适的资源?快使用搜索试试~ 我知道了~
数字图像处理基本算法Matlab源代码
共97个文件
m:66个
asv:26个
ini:5个
4星 · 超过85%的资源 需积分: 16 44 下载量 106 浏览量
2009-12-23
21:20:26
上传
评论 3
收藏 38KB ZIP 举报
温馨提示
这是用Matlab写的数字图像处理基本算法的源代码,希望对大家有些帮助,其中基本上涵盖了数字图像处理中的常见算法。
资源推荐
资源详情
资源评论
收起资源包目录
m_files.zip (97个子文件)
m_files
chapter_04
example4_8.m 1KB
example4_3.m 642B
example4_2.m 332B
example4_2.asv 332B
example4_1.m 627B
example4_5.m 703B
example4_4.m 1KB
example4_7.m 1KB
desktop.ini 271B
example4_6.m 763B
example4_3.asv 642B
example4_9.m 448B
chapter_02
example2_2.m 297B
example2_2.asv 359B
example2_1.asv 157B
example2_5.m 450B
example2_1.m 159B
example2_7.m 214B
example2_6.m 559B
example2_4.m 224B
desktop.ini 271B
example2_3.m 312B
chapter_03
Example3_7.m 983B
Example3_3.m 750B
Example3_4.m 728B
Example3_6.m 756B
Example3_3.asv 624B
desktop.ini 271B
Example3_5.m 353B
Example3_7.asv 1002B
Example3_2.m 254B
Example3_5.asv 285B
Example3_1.asv 260B
Example3_1.m 410B
chapter_05
example5_2c.asv 198B
kfilter.asv 1KB
example5_3c.m 316B
example5_1.asv 340B
kfilter.m 1KB
sigmafilter.m 873B
example5_4a.m 307B
example5_1.m 385B
example5_4a.asv 307B
example5_2a.m 532B
example5_2b.m 543B
example5_3b.m 284B
example5_2c.m 330B
example5_4b.m 297B
example5_5a.m 285B
example5_5b.m 280B
medfilter.asv 365B
avefilter.m 418B
sigmafilter.asv 835B
5_1.m 137B
desktop.ini 271B
example5_3a.m 286B
medfilter.m 392B
example5_5c.m 283B
example5_4c.m 289B
chapter_07
get4ngb.m 2KB
splitmerge.m 703B
predicate.m 107B
get8ngb.m 2KB
splitmerge.asv 412B
region_grow1.m 4KB
split_test.m 267B
chapter_06
sharpen2.m 608B
example6_2b.m 210B
laplacian.asv 97B
lab1.m 673B
lab2.m 556B
example6_4.m 415B
wallis.asv 537B
laplacian.m 99B
example6_2c.m 239B
example6_3f.asv 318B
example6_1a.m 130B
example6_1b.m 128B
lab2.asv 431B
verOP.m 421B
wallis.m 154B
example6_2a.m 205B
lab3.m 189B
example6_1b.asv 128B
sharpen1.asv 479B
example6_1.asv 173B
example6_3f.m 312B
verOP.asv 393B
lab1.asv 512B
example6_1.m 130B
desktop.ini 271B
sharpen1.m 479B
horOP.m 424B
conv2bm.m 377B
example6_4.asv 415B
chapter_09
clrcompensate.m 452B
clrcompensate.asv 334B
共 97 条
- 1
资源评论
- u0106466582013-05-12一般吧,还行
- sevenyang72015-11-09对于初学MATLAB的来说,学习图像处理的基本算法还是挺有帮助的
- 风~风2012-11-03觉得还可以啊 呵呵
- A14760482982013-06-12常见算法的实现,挺好的
ysg8422am
- 粉丝: 14
- 资源: 40
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功