在Matlab中使用逻辑索引将图像拆分为两个部分(背景/前景)

时间:2013-12-01 20:31:40

标签: matlab image-processing bitmask

我有一个问题我不知道如何在Matlab中解决。 基本上。我有一个图像数组hw x 3和一个定义背景前景的单独二进制数组。我想要做的是将图像分成两部分 - 对应于蒙版。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

所有三维通道的掩码都是相同的,因此只需将其复制即可。

I=... %image
M=... %mask
M3=cat(3,M,M,M);
F=zeros(size(I));
B=zeros(size(I));
F(M3)=I(M3);
B(~M3)=I(~M3);

也许前景和背景是切换,但我想你会得到它。

稍微短一点,使用乘法而不是逻辑索引:

I=... %image
M=... %mask
M3=cat(3,M,M,M);
F=M3.*I;
F=~M3.*I;

答案 1 :(得分:1)

你有点不清楚“拆分”是什么意思 如果你的意思是你想要一个只有前景的图像 - 并且背景变黑(设置为[0 0 0]那么

fg = bsxfun(@times, img, msk ); % where msk = 1 for FG
bg = bsxfun(@times, img, ~msk );
figure;
subplot(121);imshow( fg ); title('Foreground');
subplot(122);imshow( bg ); title('Background');

但是,如果通过“拆分”表示您分别需要两种颜色数组|FG|x3|BG|x3作为前景色和背景色,那么

fg = reshape(img,[],3); % all pixels stacked
bg = fg( ~msk, : ); % take the background 30vectors
fg = fg( msk, : );