如何判定分块矩阵是否为0矩阵
我想把一个二值256*256的矩阵依次四等分,一直分到单个数为止,然后判定每个分块矩阵是否为0矩阵,把非0矩阵的个数统计出来。即第一次分成128*128的矩阵4个,判断这4个矩阵中非0矩阵的个数,并输出。然后往下分成64*64的矩阵16个,并判断这16个矩阵中非0矩阵的个数,并输出。依次到分成1*1*65536.现在我只是会把矩阵分块,不知道如何判定并输出个数。我写的如下,请高手补充,万分感激for n=1:8
k=256/2^n
for i=1:k:256
for j=1:k:256
b=a(i:i+k-1,j:j+k-1)
end
end
end
[ 本帖最后由 ChaChing 于 2009-3-10 16:03 编辑 ] help find
谢谢!
谢谢!我用了,可是find只是返回了单个矩阵非0矩阵的个数。据个例子,分成4个矩阵,用find输出了0,2,1,3。我要的是3,不是0213这四个数。请帮忙谢谢 非0矩阵是指只要元素不全为零就行了吗,也就是只要这个矩阵只要有一个元素非零,就为非0矩阵。help blkproc
[ 本帖最后由 friendchj 于 2009-3-9 13:25 编辑 ] 再取length!
好像又误解LZ的意思了? LZ是要每一子矩阵非零个数 已经取过length了,例如分成4个子矩阵后,用find和length得出的数据是0, 1 , 2, 3.我要做统计的从这四个数中继续得到非零矩阵的个数,简言之就是,最后我要得到分成的四个矩阵中非0矩阵个数是3个。然后循环到分成16个子矩阵...........等等。就是这一部分不会了。请赐教 用find和length得出的数据(0,1,2,3), form成一新矩阵, 再find/length一次!? 请问具体步骤是什么,我比较菜啊,谢谢了 a=rand(256); a(65:128,65:128)=0;
for n=1:8, k=256/2^n; no=0;
for i=1:k:256,for j=1:k:256
b=a(i:i+k-1,j:j+k-1);
if length(find(b~=0))>0, no=no+1; end
end; end
disp(no);
end
还有LZ的标题不够明确, 请修改下!
[ 本帖最后由 ChaChing 于 2009-3-9 15:01 编辑 ] 另外,我想问一下,如果我想把分成的子矩阵分别用a1,a2.........表示,应该怎样啊。谢谢 谢谢,万分感激
回复 10楼 lychris 的帖子
这样子逻辑不好写!help eval 多谢,ChaChing.我要想你多多学习matlab啊
页:
[1]