【发布时间】:2014-03-24 13:12:49
【问题描述】:
我有一个 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 不会保留裁剪区域内原始图像的颜色。
前景像素不形成矩形区域,但它们形成一个连通分量。
【问题讨论】:
-
mask是矩形的吗? -
不,mask不是矩形,而是连通的,所有的前景像素组成一个连通图组件。
-
你说
centralPoints代表坐标,那么是X-Y坐标的Nx2矩阵吗? -
我添加了一段代码,我在其中说明了我获得的坐标。
-
这是因为
denoisedImage是double而img是uint8。将denoisedImage转换为uint8后一切正常。谢谢!
标签: matlab