我有一个任意大小m x n x d
的3D数组,其中d
是维度,在这种情况下是时间点。我有一个尺寸为m x n
的2D遮罩,我想将其应用于3D堆栈,并且在每种情况下,该遮罩的值为1,以便将堆栈中相应索引的值设置为{{ 1}}。到目前为止,我这样做的方式是:
nan
但是,当从堆栈的一维显示图像时,即在处理后显示imageStack((mask == 1)) = nan;
时,很明显已应用了蒙版。但是,较高的尺寸未应用此蒙版-似乎仅将其应用到了第一维,而不是整个图像堆栈。我在戴口罩的过程中是否缺少某些东西?
答案 0 :(得分: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);
答案 1 :(得分:0)
您还可以使用repmat
将遮罩广播到第3维:
d=size(imageStack,3);
imageStack(repmat(mask==1,[1,1,d]))=nan;