我有一个问题我不知道如何在Matlab中解决。 基本上。我有一个图像数组hw x 3和一个定义背景前景的单独二进制数组。我想要做的是将图像分成两部分 - 对应于蒙版。
提前感谢您的帮助!
答案 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, : );