我想将两个面具合并在一起,用mask1
覆盖mask2
,除非mask2
为零。掩码不是二进制的,它们是用户在感兴趣的区域定义的值和其他地方的0。
例如:if:
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]
必须有一种简单的方法来做到这一点,而无需经过并比较矩阵中的每个元素。时间非常重要,因为矩阵非常大,我需要将它们合并很多。任何帮助都会很棒。
答案 0 :(得分:5)
快速测试
mask2+mask1.*(mask2==0)
对于您的第一个输出,我将让您概括解决方案
答案 1 :(得分:4)
另一种选择是使用logical indexing:
%# 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
答案 2 :(得分: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
答案 3 :(得分:0)
如果掩码是二进制的,则可以执行以下操作:
result = mask1;
result(mask2 ~= 0) = true;
% and you can add many masks as you want to the resultant mask.
% result(maskn ~= 0) = true;
如果它们不是二进制@gnovice答案是完美的。