2010-05-15 528 views
3

我想知道如何遮罩黑色&白色圖像的一部分?如何掩蓋matlab中的圖像的一部分?

我得到了一個需要被邊緣檢測到的物體,但是我在背景中有其他白色干擾物體在目標物體下方...我想將整個圖像的下半部分掩蓋爲黑色,我可以這樣做嗎?

謝謝!

編輯

我也想掩蓋其他一些地區(頂部)......我該怎麼辦呢?

請解釋一下代碼,因爲我真的想知道它是如何工作的並以我自己的理解來實現它。

EDIT2

我的形象是480×640 ...有沒有辦法來掩蓋具體的像素?

centerIndex = round(size(A,1)/2);   %# Get the center index for the rows 
A(centerIndex:end,:) = cast(0,class(A)); %# Set the lower half to the value 
              %# 0 (of the same type as A) 

這是通過首先得到的數量:例如180x440從圖像...

+0

當你說「下部」,你的意思是下部空間,還是在強度? – mmr 2010-05-15 22:11:45

+0

我的意思是空間... – NLed 2010-05-15 22:23:34

回答

5

如果您有存儲在矩陣A一個2-D grayscale intensity image,你可以下半部分通過執行以下操作設置爲黑色在A中使用函數SIZE將行數除以2,然後將其舍入以獲得靠近圖像高度中心的整數索引。然後,向量centerIndex:end索引從中心索引到結尾的所有行,:索引所有列。所有這些索引元素都設置爲0表示黑色。

函數CLASS用於獲取數據類型A,以便使用函數CAST可以將0轉換爲該類型。不過,這可能沒有必要,因爲0可能會自動轉換爲沒有它們的A的類型。

如果你想創建一個logical index作爲面膜使用,你可以做到以下幾點:

mask = true(size(A)); %# Create a matrix of true values the same size as A 
centerIndex = round(size(A,1)/2); %# Get the center index for the rows 
mask(centerIndex:end,:) = false; %# Set the lower half to false 

現在,masktrue(即「1」)的像素要邏輯矩陣保留並且false(即「0」)表示您想要設置爲0的像素。您可以根據需要將mask的更多元素設置爲false。然後,當你要敷面膜,你可以做到以下幾點:

A(~mask) = 0; %# Set all elements in A corresponding 
       %# to false values in mask to 0 
+0

感謝您的代碼:)你能詳細解釋一下代碼嗎?我想了解它是如何工作的:)你能否告訴我我怎樣才能掩蓋一個特定的部分而不是一半?因爲事實證明,我需要屏蔽圖像頂部的幾個垂直像素。謝謝! – NLed 2010-05-15 22:21:39

+0

@ZaZu:沒問題。 ;)我用解釋和代碼創建了一個邏輯掩碼,更新了我的答案。 – gnovice 2010-05-15 22:43:24

+0

非常感謝:)雖然有一個問題,用於掩蔽的邏輯索引在這裏不起作用:(我不知道爲什麼!前一個效果很好,但它削減了對象下降的最後一點(該對象在1/2圖像大小之後下降了一點)。有沒有辦法可以使用第一種方法來阻止上部空間? **編輯**我可以使用一種方法來阻止特定的像素?我有一個480x640的圖像.. – NLed 2010-05-16 00:18:03

0
function masked = maskout(src,mask) 
    % mask: binary, same size as src, but does not have to be same data type (int vs logical) 
    % src: rgb or gray image 
    masked = bsxfun(@times, src, cast(mask,class(src))); 
end