2011-06-15 20 views
0

元のRGB画像と二値画像を重ね合わせることができます。次のコードを使用します。RGB画像上の二値画像が重なり合うMATLAB

inImage = imresize(imread('1.jpg'),0.25); 
%imwrite(inImage,'original.jpg'); 
inImage = skyremoval(inImage); 
greyImage = rgb2gray(inImage); 


thresh1 = 200; 
whiteLayer = greyImage > thresh1; 


thresh2 = 125; 
lightgreyLayer = greyImage > thresh2 & greyImage <= thresh1; 



layer1 = whiteLayer*200; 
layer2 = lightgreyLayer*125; 


G = layer1 + layer2; 
% figure,imshow(G); 


se = strel('disk', 15); 
Io = imopen(G, se); 
figure,imshow(Io); 

f = find(Io==0); 

mask(:,:,1) = f; % For the red plane 
% mask(:,:,2) = f; % For the green plane 
% mask(:,:,3) = f; % For the blue plane 

inImage(mask)=0; 
I = inImage; 
figure,imshow(I); 

以下は画像です。 Here。最初のものは元のものから派生した2値画像であり、2番目は元のもので、3番目のものは2値画像とrgb画像のオーバーラップ後の結果です。あなたが見ることができるように、私が直面している問題は、道路以外の部分がシアンであることです。私が欲しいのは、黒くなる道ではない部分です。どうやってやるの?

お手伝いがあれば、私のコードを変更してください。ありがとうございました。

答えて

4

findコマンドを使用する必要はありません。バイナリイメージでインデックスを作成できるためです。

代わりの

f = find(Io==0); 

mask(:,:,1) = f; % For the red plane 
% mask(:,:,2) = f; % For the green plane 
% mask(:,:,3) = f; % For the blue plane 

inImage(mask)=0; 
I = inImage; 
figure,imshow(I); 

あなたは私はそれを行っている

mask = repmat(Io==0,1,1,3); %# 1 wherever mask is false 
I = inImage; 
I(mask) = 0; 
figure,imshow(I); 
+0

感謝を書き込むことができます。しかし、異なっている。 –