我有一个任意大小的m x n x d
的3D数组,其中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;