资源简介

matlab 实现了四叉树的分割算法 算法中对实例图片进行了分割,matlab7.0编译通过

资源截图

代码片段和文件信息

clear;
PicC=imread(‘lake256.jpg‘);
Threshold=0.2   %qtdecomp的参数
MinDim=4;   %qtdecomp的参数
[mnlayer]=size(PicC); 
PicOut=255+zeros(mn);%255是白色的值,生成一个白色的图片

if(layer==3)
    Pic=rgb2gray(PicC);%如果是彩色图像,则转换为灰度图像
end
PicDivide=qtdecomp(PicThresholdMinDim);%四叉树分割
List=find(PicDivide);%PicDivide中非零元素的位置,List为列向量
List=List‘; %转置List,使其为行向量
NumMin=0;   %边长为MinDim的块的数量
NumNotMin=0;%边长大于MinDim的块的数量
for i=List
    if PicDivide(i)==MinDim
        NumMin=NumMin+1;
    else
        NumNotMin=NumNotMin+1;
    end
end
RatioEnt=strcat(‘边长为最小值的块数与其他块的总数的比值为:‘num2str(NumRatio));
%BlockNum=size(List);   以下四行计算四叉树分割得到的块与图像面积的比
%BlockNum=BlockNum(2);
%BlockRatio=BlockNum/(m/4)/(m/4);
%BlockEnt=strcat(‘四叉树分割得到的块与图像面积的比是‘num2str(BlockRatio));

for i=List
    [xy]=ind2sub(size(PicDivide)i);%将线性序列转变为行列序列
    DSize=PicDivide(xy)-1; %需要减1,比如坐标为20,边长为5,则方块的边界为20+5-1=20
    PicOut(x:(x+DSize)y)=ones(DSize+11);%左侧边
    PicOut(xy:(y+DSize))=ones(1DSize+1);%上侧边
    PicOut(x:(x+DSize)y+DSize+1)=ones(DSize+11);%右侧边
    PicOut(x+DSize+1y:(y+DSize))=ones(1DSize+1);%下侧边
end

subplot(121);imshow(PicC);
subplot(122);imshow(uint8(PicOut));
xlabel(RatioEnt);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1380  2009-04-15 00:01  PicBlock.m

     文件      12607  2009-03-29 09:17  lake256.JPG

----------- ---------  ---------- -----  ----

                13987                    2


评论

共有 条评论