Matlab - 如何使用二进制图像屏蔽三维图像

时间:2013-05-19 11:01:03

标签: matlab image-processing matrix

我的图像有红色,绿色,蓝色通道和图像的二进制版本。

我想要做的是连接这两个图像,使二进制图像作为普通图像的掩码。

我想只选择彩色图像中二进制为1的像素。

我知道这应该适用于cat,甚至适用于repmat,但由于我是Matlab的新手,即使在阅读了文档后我也无法弄清楚如何做到这一点的功能。

3 个答案:

答案 0 :(得分:6)

如果您有一个三维图像I和一个二进制掩码M,您可以通过将图像乘以掩码将无关位掩盖为零:

I = bsxfun(@times, I, M);    

或通过逻辑索引:

I(~mask(:, :, ones(1, size(I, 3)))) = 0;

答案 1 :(得分:1)

我不是100%确定我理解你的问题,但这里有一个建议:

假设rgbIm是您的 RGB图像,而bwIm是您的二进制图像;

您可以尝试使用以下代码行将二进制图像“展开”为“ 3D ”(以使其尺寸与原始RGB图像一致):

bwImAux = bwIm(:,:,[1 1 1]); 

然后执行一个简单的乘法来“消除”二进制图像中不是的所有像素:

rgbImNew = rgbIm.*bwImAux;

希望这有帮助。

答案 2 :(得分:1)

您可以将二进制图像用作3dim图像中的逻辑索引。要将image中所有在二进制mask中为零的像素归零,您可以对每个维使用以下代码:image(~mask)=0;