八度重叠2D矩阵

时间:2012-06-21 17:15:58

标签: algorithm matlab octave

enter image description here 我有一个矩阵。除了一些创建具有相同大小的矩形的点外,此矩阵为空白。创建矩形的每个点都有一个正数,该数字对于该矩形的所有点都是相等的。这个矩阵有几个矩形,每个矩形都有相同的数字。

想象一下,现在我有一个具有相同结构的第二个矩阵,但现在矩形处于其他位置,其他大小和其他值就像图片中的矩阵A和B.

我想要将两个矩阵组合在一起,所以如果有一个矩形的交织,则删除具有最小数字的矩形。

哪种方法最好?我认为它可以做fors但我想做30次,所以如果我不改进它,Octave需要花很多时间才能完成它。

1 个答案:

答案 0 :(得分:2)

我已经制作了这个似乎可以完成这项工作的小代码:

A=[0 0 1 1 1 0 ;
   0 0 1 1 1 0 ;
   0 0 0 0 0 0 ;
   2 2 0 0 0 0 ;
   2 2 0 0 0 0 ;
   2 2 0 0 0 0 ];

B=[3 0 2 2 0 0 ;
   3 0 2 2 0 0 ;
   0 0 2 2 0 0 ;
   0 0 0 0 0 0 ;
   1 1 1 1 1 0 ;
   1 1 1 1 1 0 ];


%give a unique id to each rectangle
lblA=bwlabel(A);
lblB=bwlabel(B);

%search for overlap
overlap= A & B;

% find out overlaping rectangle s unique id
overlapLbl= unique([lblA(overlap(:)) lblB(overlap(:))],'rows');

%eliminate rectangle with lower score
for ov=1:size(overlapLbl,1)
  scoreA=A(find((lblA==overlapLbl(ov,1)),1));
  scoreB=B(find((lblB==overlapLbl(ov,2)),1));
  if scoreA>scoreB
    B(B==scoreB)=0;
  else
    A(A==scoreA)=0;
  end
end
C=A+B

输出:

C =
     3     0     2     2     0     0
     3     0     2     2     0     0
     0     0     2     2     0     0
     2     2     0     0     0     0
     2     2     0     0     0     0
     2     2     0     0     0     0