2011-06-22 73 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

相关问题