%splitmerge源函数
function g=splitmerge(f,mindim,fun)
%splitmerge使用分离和合并算法的图像分割
%g=splitmerge(f,mindim,fun)建立在四叉树分解的分离和合并算法的图像f的分割
%mindim的最小维数是四叉区域所允许的。
%如果必须,用0去填充输入图像的最近区域大小,它是2的整数幂。
%这些保证关于算法使用在四叉树分解中可能会分割图像到1*1大小的块中。
%这些结果是输入图像初始大小的剪回。在输出中,g的每个连接区域是标志不同的整数。
%
%标志:在函数调用中,我们使用@predicatez为了fun的值。
%predicate在matlab步骤中是一个函数,它被使用者提供。
%它的语法是flag=predicate(region),当区域中的像素满足在函数中的编码中的测试中,返回true,否则返回false.
%
%函数predicate被使用在这本书的例10.9.
%如果在区域中的像素的紧张度的便准差超过10,它的平均紧张度在0和125之间,则flag是真的,否则flag是false.
%
%function flag=predicate(region)
%sd=std2(region)
%m=mean2(region)
%flag=(sd>10)&(m>0)&(m<125)
%用0填充图像保证函数qtdecomp分割区域下至大小为1*1.
Q=2^nextpow2(max(size(f)));
[M,N]=size(f);
f=padarray(f,[Q-M,Q-N],'post');
%首先执行分裂
S=qtdecomp(f,@split_test,mindim,fun);
%每个四叉树合并,如果通过预测的区域用1填充。
%得到做大区域的大小。因为S是稀疏的,使用满的。
Lmax=full(max(S(:)));
%输出图像初始全为0。标志数组在建立连接后
g=zeros(size(f));
MARKER=zeros(size(f));
%开始合并
for K=1:Lmax
[vals,r,c]=qtgetblk(f,s,K);
if~isempty(vals)
%检查预测的每个区域下、坐标大小K*K是否满足r和c.
for I=1:length(r)
xlow=r(I);ylow=c(I);
xhigh=xlow+K-1;yhigh=ylow+K-1;
region=f(xlow:xhigh,ylow:yhigh);
flag=feval(fun,region);
if flag
g(xlow:xhigh,ylow:yhigh)=1;
MARKER(xlow,ylow)=1;
end
end
end
end
%最后,获得每个连接区域和使用不同的整数标志它。
g=bwlabel(imreconstruct(MARKER,g));
%作物与出口
g=g(1:M,1:N);
splitmerge.m
最新推荐文章于 2023-10-07 17:27:18 发布
本文介绍如何利用MATLAB中的splitmerge.m工具,有效地对大型数据集进行拆分和合并操作。该工具有助于管理和处理大规模数据,提高数据处理效率,适合在数据预处理和分析中使用。
摘要由CSDN通过智能技术生成