|
楼主 |
发表于 2007-5-17 21:22
|
显示全部楼层
我先把有用的代码部分贴出来:
输入是一个矩阵I
Ileast = bwlabel(I,4);%标定图像的连通域
nummax = max(Ileast(:));
col=length(I(:,1)); %行数
row=length(I(1,:)); %列数
Area_candidate = struct('top',{},'left',{},'bottom',{},'right',{});%初始化结构体
for n=1:nummax
Area_candidate(n).top=col;
Area_candidate(n).left=row;
Area_candidate(n).bottom=0;
Area_candidate(n).right=0;
end
然后判定各个连通域的最小外接矩形的边界的值
for a=1:col
for b=1:row
if Ileast(a,b)~=0
Area_candidate(Ileast(a,b)).top = min ( Area_candidate(Ileast(a,b)).top ,a);%得到各个连通域的边界
Area_candidate(Ileast(a,b)).left = min ( Area_candidate(Ileast(a,b)).left ,b);
Area_candidate(Ileast(a,b)).bottom = max ( Area_candidate(Ileast(a,b)).bottom ,a);
Area_candidate(Ileast(a,b)).right = max ( Area_candidate(Ileast(a,b)).right ,b);
end
end
end
然后再新建的空矩阵上得出图像
for n=1:nummax
I_out(Area_candidate(n).top:Area_candidate(n).bottom , Area_candidate(n).left:Area_candidate(n).right) =1;%填充矩形
end
结果输出的矩阵就是一个全1的矩阵
而我希望得到的矩阵(图像)是:
I_out =
{0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0;
0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0;
0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0;
0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0;}
[ 本帖最后由 Feather013 于 2007-5-17 21:26 编辑 ] |
|