lychris 发表于 2009-3-9 11:00

如何判定分块矩阵是否为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 编辑 ]

ChaChing 发表于 2009-3-9 11:19

help find

lychris 发表于 2009-3-9 11:44

谢谢!

谢谢!我用了,可是find只是返回了单个矩阵非0矩阵的个数。据个例子,分成4个矩阵,用find输出了0,2,1,3。我要的是3,不是0213这四个数。请帮忙谢谢

friendchj 发表于 2009-3-9 13:07

非0矩阵是指只要元素不全为零就行了吗,也就是只要这个矩阵只要有一个元素非零,就为非0矩阵。
help blkproc

[ 本帖最后由 friendchj 于 2009-3-9 13:25 编辑 ]

ChaChing 发表于 2009-3-9 13:37

再取length!
好像又误解LZ的意思了? LZ是要每一子矩阵非零个数

lychris 发表于 2009-3-9 13:59

已经取过length了,例如分成4个子矩阵后,用find和length得出的数据是0, 1 , 2, 3.我要做统计的从这四个数中继续得到非零矩阵的个数,简言之就是,最后我要得到分成的四个矩阵中非0矩阵个数是3个。然后循环到分成16个子矩阵...........等等。就是这一部分不会了。请赐教

ChaChing 发表于 2009-3-9 14:12

用find和length得出的数据(0,1,2,3), form成一新矩阵, 再find/length一次!?

lychris 发表于 2009-3-9 14:29

请问具体步骤是什么,我比较菜啊,谢谢了

ChaChing 发表于 2009-3-9 14:55

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 编辑 ]

lychris 发表于 2009-3-9 14:58

另外,我想问一下,如果我想把分成的子矩阵分别用a1,a2.........表示,应该怎样啊。谢谢

lychris 发表于 2009-3-9 14:59

谢谢,万分感激

ChaChing 发表于 2009-3-9 15:04

回复 10楼 lychris 的帖子

这样子逻辑不好写!
help eval

lychris 发表于 2009-3-9 15:27

多谢,ChaChing.我要想你多多学习matlab啊
页: [1]
查看完整版本: 如何判定分块矩阵是否为0矩阵