2014-03-24 240 views
0

我有一個RGB圖像讀取爲3維的矩陣,img,我有一個二進制掩碼錶示圖像的分割,maskMatlab - 基於前景背景分割的裁剪圖像

如何在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

是'mask'矩形? – Divakar

+0

不,遮罩不是矩形的,但它是連接的,所有的前景像素形成一個連接的圖形組件。 – Simon

+0

你說'centralPoints'代表座標,它是X-Y座標的Nx2矩陣嗎? – Divakar

回答

1

你試過

denoisedImage = bsxfun(@times, im2double(img), mask > 0); 
+0

OP可能需要一些修改 - 'denoisedImage = uint8(bsxfun(@times,double(img),mask> 0));' – Divakar

+1

@Divakar請參閱[我的評論](http://stackoverflow.com/questions/22610429/ matlab-crop-image-based-foreground-background-segmentation/22610944?noredirect = 1#comment34428446_22610429)詢問使用的數據類型。應根據OP對該評論的回答進行更改。 – Shai

+0

不要以爲你需要'掩碼> 0',因爲它已經是二進制。 – Divakar