在 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;
我有一个任意大小的 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;