我有一个RGB图像,它被读作3维矩阵img
,我有一个二进制掩码,代表图像的分割mask
。
如何根据matlab中的二进制掩码裁剪图像? 我试图只选择二进制掩码标记的像素,但结果图像没有原始颜色。
centralPoints = find(mask > 0);
denoisedImage = zeros(424, 424, 3);
slice1 = zeros(424, 424);
origSlice = img(:, :, 1);
slice1(centralPoints) = origSlice(centralPoints);
slice2 = zeros(424, 424);
origSlice = img(:, :, 2);
slice2(centralPoints) = origSlice(centralPoints);
slice3 = zeros(424, 424);
origSlice = img(:, :, 3);
slice3(centralPoints) = origSlice(centralPoints);
denoisedImage(:, :, 1) = slice1;
denoisedImage(:, :, 2) = slice2;
denoisedImage(:, :, 3) = slice3;
这是代码。 img
是原始图片,centralPoints
是前景像素的坐标,denoisedImage
表示裁剪矩阵。
但是,denoisedImage
不会保留裁剪区域内原始图像的颜色。
前景像素不形成矩形区域,但是它们形成一个连通分量。
答案 0 :(得分:1)
你试过吗
denoisedImage = bsxfun( @times, im2double(img), mask > 0 );