我有两个口罩,我想合并到一起,并覆盖mask1有mask2,除非mask2有一个零.掩码不是二进制的,它们是用户在感兴趣的区域中定义的值,而在其他地方是0.
例如,如果:
mask1=[0 5 5;0 5 5];
mask2=[4 4 0;4 4 0];
Run Code Online (Sandbox Code Playgroud)
然后我想要一个输出[4 4 5;4 4 5].如果我再戴上另一个面具,
mask3=[0 6 0;0 6 0];
Run Code Online (Sandbox Code Playgroud)
然后我想要一个输出 [4 6 5;4 6 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
Run Code Online (Sandbox Code Playgroud)