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

时间:2018-09-05 18:35:26

标签: image matlab image-processing mask

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

nan

但是,当从堆栈的一维显示图像时,即在处理后显示imageStack((mask == 1)) = nan;时,很明显已应用了蒙版。但是,较高的尺寸未应用此蒙版-似乎仅将其应用到了第一维,而不是整个图像堆栈。我在戴口罩的过程中是否缺少某些东西?

2 个答案:

答案 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;