在MATLAB中将2D贴图应用于3D数组

问题描述 投票:0回答:2

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

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

然而,当在处理之后显示来自堆叠的一个维度的图像,即imagesc(imageStack(:,:,1)时,显然已经应用了掩模。但是,较高的尺寸没有应用此蒙版 - 似乎只将其应用于第一个维度而不是整个图像堆栈。我在面具的实施中遗漏了什么?

image matlab image-processing mask
2个回答
3
投票

首先使用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);

0
投票

你也可以使用repmat将你的面具广播到第三维:

d=size(imageStack,3);
imageStack(repmat(mask==1,[1,1,d]))=nan;
© www.soinside.com 2019 - 2024. All rights reserved.