2014-09-26 45 views
0

我已經將我的圖像轉換爲蒙版,我現在想要獲得原始顏色賦予此蒙版的內容。我有一個名爲objectPixels的數組,它確定哪些位置屬於我要分割的對象。我嘗試了下面的代碼,但我沒有獲得原始顏色。給定一個面具,我如何獲得圖像的原始顏色?

我在幹什麼?

mask = false(size(grayImage)); 
mask(objectPixels) = true; 
%on R channel 
tmp = originalImage(:,:,1); 
+0

這有什麼好做的處理語言,因此請刪除處理標籤。通用處理標籤甚至意味着什麼? – 2014-09-26 13:14:49

+0

爲什麼要計算平均值和標準偏差來嘗試恢復顏色?這沒有任何意義。 – rayryeng 2014-09-26 22:54:06

回答

0

如果我正確理解你的問題,你有一個像素的面具屬於一些對象。您現在希望找到一個圖像,其中標有true的任何像素將在這些位置提供原始顏色,而我們會跳過false。如果掩碼位置是false,我將假定輸出像素爲黑色。這可以使用bsxfuntimes作爲函數很容易地計算出來。我們基本上會複製圖像中每個顏色通道的蒙版,然後將蒙版與原始圖像相乘。

這樣:

out = bsxfun(@times, originalImage, cast(mask, class(originalImage))); 

mask原本是logical陣列,並且爲了繁衍既面具和你的原始圖像,它們必須是同一類型,這就是爲什麼cast用於使我們可以將圖像轉換爲與原始圖像相同的圖像。我們使用class來確定原始圖像的類別或類型。

作爲一個例子,我們使用屬於MATLAB系統路徑的onion.png圖像。我將使用rgb2gray將此圖像轉換爲灰度,然後選擇graylevel 100的任意閾值以給我們一個蒙版。大於100的任何值都會給出掩碼值true,而其他任何值都會設置爲false

一旦我生成了這個蒙版,讓我們找出原來的顏色是基於這些蒙版值。作爲這樣:

originalImage = imread('onion.png'); 
mask = rgb2gray(originalImage) >= 100; 
out = bsxfun(@times, originalImage, cast(mask, class(originalImage))); 

%// Show the images now 
figure; 
subplot(1,3,1); 
imshow(im); 
title('Original Image'); 
subplot(1,3,2); 
imshow(mask); 
title('Mask'); 
subplot(1,3,3); 
imshow(out); 
title('Output Image'); 

與上面的代碼中,我實現我說的是,具有附加的數字,示出原始圖像的邏輯,掩模生成,以及表明您的原始顏色的輸出圖像掩模位置是true


這就是我得到:

enter image description here

相關問題