2011-06-22 74 views
2

我有一個從matlab中讀入影像文件的圖像。圖像是一個3d數組。我如何通過這個圖像,如果顏色大多是紅色的(例如,紅色> 200藍色< 50綠色< 50) 使圖像的一部分變黑並且其他區域變白?MATLAB:如何將圖像數組轉換爲基於顏色的黑白數組?

最終我想爲整個視頻做這個,但我首先需要理解這一點!

+0

類似的問題:http://stackoverflow.com/questions/4063965/how-可以將圖像轉換爲灰度 - 但保持單色/ – Amro

回答

0

單個RGB圖像(3D矩陣)的基本情況下,已經顯示出通過others

img = imread('image.png');  %# some RGB image 

img2 = ~(img(:,:,1)>200 & img(:,:,2)<50 & img(:,:,3)<50); 

如果您想要將其應用於所有幀電影(4D-矩陣=高度逐寬度逐色接一幀),嘗試以下緊湊的解決方案:

mov = cat(4, img, img);  %# a sample video of two frames 

mov2 = squeeze(~(mov(:,:,1,:)>200 & mov(:,:,2,:)<50 & mov(:,:,3,:)<50)); 
1
img = imread('image.jpg'); 
r = img(:,:,1); 
g = img(:,:,2); 
b = img(:,:,3); 
iR = r > 200; 
iG = g < 50; 
iB = b < 50; 
img2 = 255*ones([size(img,1) size(img,2)],'uint8'); 
img2(iR & iG & iB) = 0; 

subplot(2,1,1), imshow(img) 
subplot(2,1,2), imshow(img2) 

enter image description here

對於存儲器和速度問題,可以更換相關的行,如下所示:

img2 = true([size(img,1) size(img,2)]); 
img2(iR & iG & iB) = false; 
+0

謝謝!現在還有一件事我明白你是如何做到這一點的。你能提出將這個應用到整個電影文件的方法嗎?你是否必須逐幀閱讀電影,將其應用於所有幀,然後將它們一起加入到另一部電影中? –

+0

@ Phoen1xUK:我添加了一個解決方案來演示如何將它應用到整個電影矩陣 – Amro

+0

@ Phoen1xUK:如果您的視頻尺寸不是很大,Amro的解決方案可能會幫助您。但是,如果您想處理大型視頻以適應內存,則可以檢查VideoReader(http://www.mathworks.com/help/techdoc/import_export/f5-132080.html#f5-146610)以加載視頻所需的部分存儲和處理,如在Amro的解決方案或逐幀。 – petrichor

相關問題