使用逻辑掩码传递矩阵的某些值

Passing certain values of a matrix usi a logical mask

假设我有一个逻辑矩阵MxN

mask=[0 0 0 0 0;
     0 1 1 0 0;
     0 1 1 0 0;
     0 0 0 0 0;
     0 0 0 0 0];

在这种情况下,M=N=5。 第二个矩阵 A,大小为 'MxNx3'(RGB 图像)。我想针对掩码传递 A 的函数值。例如,所有不属于掩码的值:

   foo(A(~mask));  

当然这行代码没有用,因为 mask 只给我一种 RGB 颜色的索引。

您可以使用repmat在三维中重复您的面具 3 次。这将创建一个 nnz(~mask) * 3 元素向量。您可以重塑 repmat 操作的结果,使行是掩码中的 true 元素,列是第三维

foo(reshape(A(~repmat(mask, [1 1 3])), [], 3))

您也可以做类似 的事情来完成类似的事情。