我已經將我的圖像轉換爲蒙版,我現在想要獲得原始顏色賦予此蒙版的內容。我有一個名爲objectPixels
的數組,它確定哪些位置屬於我要分割的對象。我嘗試了下面的代碼,但我沒有獲得原始顏色。給定一個面具,我如何獲得圖像的原始顏色?
我在幹什麼?
mask = false(size(grayImage));
mask(objectPixels) = true;
%on R channel
tmp = originalImage(:,:,1);
我已經將我的圖像轉換爲蒙版,我現在想要獲得原始顏色賦予此蒙版的內容。我有一個名爲objectPixels
的數組,它確定哪些位置屬於我要分割的對象。我嘗試了下面的代碼,但我沒有獲得原始顏色。給定一個面具,我如何獲得圖像的原始顏色?
我在幹什麼?
mask = false(size(grayImage));
mask(objectPixels) = true;
%on R channel
tmp = originalImage(:,:,1);
如果我正確理解你的問題,你有一個像素的面具屬於一些對象。您現在希望找到一個圖像,其中標有true
的任何像素將在這些位置提供原始顏色,而我們會跳過false
。如果掩碼位置是false
,我將假定輸出像素爲黑色。這可以使用bsxfun
和times
作爲函數很容易地計算出來。我們基本上會複製圖像中每個顏色通道的蒙版,然後將蒙版與原始圖像相乘。
這樣:
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
。
這就是我得到:
這有什麼好做的處理語言,因此請刪除處理標籤。通用處理標籤甚至意味着什麼? – 2014-09-26 13:14:49
爲什麼要計算平均值和標準偏差來嘗試恢復顏色?這沒有任何意義。 – rayryeng 2014-09-26 22:54:06