在 MATLAB 中将 2D 映射应用于 3D 数组

Apply a 2D map to a 3D array in MATLAB

我有一个任意大小的 3D 数组 m x n x d,其中 d 是维度,在本例中是时间点。我有一个大小为 m x n 的 2D 掩码,我想将其应用于 3D 堆栈,并且在掩码值为 1 的每个实例中,将堆栈中相应索引的值设置为 nan。到目前为止我这样做的方式是:

imageStack((mask == 1)) = nan;

然而,当从堆栈的一维显示图像时,即处理后 imagesc(imageStack(:,:,1),很明显已经应用了掩码。然而,更高的维度没有应用这个掩码 - 似乎只将它应用到第一个维度而不是整个图像堆栈。我在实施面具时是否遗漏了什么?

首先用 NaN 创建一个掩码,使工作更容易。你的面具可能有用,但你没有分享它。

masknan=mask==1; masknan(masknan)=nan;

然后,如果您使用的是 2016b 或更新版本,则可以对作业使用隐式扩展。

image=imageStack.*masknan; % it will automatically broadcast to the 3rd dimension

否则,使用bsxfun

image=bsxfun(@times,imageStack,masknan);

您还可以使用repmat将您的面具广播到第三维度:

d=size(imageStack,3);
imageStack(repmat(mask==1,[1,1,d]))=nan;