我做這個小碼,似乎做的工作:
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
來源
2012-06-21 17:45:14
Oli
如果重疊有相同的價值觀 – amitkarmakar
在我的應用程序是非常奇怪的是,這種情況發生的矩形然後抹掉你想要的那個。 –
使用'for's並不一定意味着它會比oneliner效率低。相反,將你的問題強行擠壓成幾個函數可能會得到相反的結果。如果性能是你的約束條件,我會建議你用最有效的方式來管理,然後將它與答案中的緊湊解決方案進行比較。 –