4

一緒にマージしたい 2 つのマスクがあり、ゼロでない限り上書きmask1します。マスクはバイナリではなく、関心領域でユーザーが定義した値であり、他の領域では 0 です。mask2mask2

たとえば、次の場合:

mask1=[0 5 5;0 5 5];
mask2=[4 4 0;4 4 0];

次に、の出力が必要です[4 4 5;4 4 5]。そして、もし私が別のマスクを持っていたら、

mask3=[0 6 0;0 6 0];  

次に、次の出力が必要です[4 6 5;4 6 5]

行列の各要素を調べて比較することなく、これを行う簡単な方法が必要です。マトリックスは非常に大きく、多くのマトリックスをマージする必要があるため、タイミングが重要です。どんな助けでも素晴らしいでしょう。

4

4 に答える 4

5

別のオプションは、論理インデックスを使用することです。

%# Define masks:

mask1 = [0 5 5; 0 5 5];
mask2 = [4 4 0; 4 4 0];
mask3 = [0 6 0; 0 6 0];

%# Merge masks:

newMask = mask1;                %# Start with mask1
index = (mask2 ~= 0);           %# Logical index: ones where mask2 is nonzero
newMask(index) = mask2(index);  %# Overwrite with nonzero values of mask2
index = (mask3 ~= 0);           %# Logical index: ones where mask3 is nonzero
newMask(index) = mask3(index);  %# Overwrite with nonzero values of mask3
于 2009-11-21T17:44:47.300 に答える
5

迅速にテスト

mask2+mask1.*(mask2==0)

最初の出力については、ソリューションを一般化するために残します

于 2009-11-21T16:42:54.647 に答える
2
mask1=[0 5 5;0 5 5];
mask2=[4 4 0;4 4 0];

idx = find(mask2==0);    %# find zero elements in mask2
mask2(idx) = mask1(idx)  %# replace them with corresponding mask1 elmenets

mask3=[0 6 0;0 6 0];
idx = find(mask3==0);    %# find zero elements in mask3
mask3(idx) = mask2(idx)  %# replace them with corresponding mask2 elmenets
于 2009-11-21T17:38:11.823 に答える