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

在Matlab中用逻辑索引将图像分成两部分(背景/前景),matlab,image-processing,bitmask,Matlab,Image Processing,Bitmask,我有一个问题,我不知道如何在Matlab中解决。 基本上。我有一个图像数组hw x 3和一个单独的二进制数组,用于定义背景和前景。我想做的是将图像分割成两部分-对应于遮罩 提前感谢您的帮助 所有thre通道的屏蔽都是相同的,因此只需复制它即可 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); 也许前景和背景是开关,但我想你会得到它 略

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


提前感谢您的帮助

所有thre通道的屏蔽都是相同的,因此只需复制它即可

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;

有点不清楚你所说的“分割”是什么意思。
如果你的意思是你想要一张只有前景和背景的图像(设置为
[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, : ); 
“分割图像”是什么意思?两张分割图像的尺寸是多少?