перекрывающееся двоичное изображение на изображении RGB MATLAB - PullRequest
0 голосов
/ 15 июня 2011

Я могу перекрыть двоичное изображение с исходным изображением RGB.Через следующий код.

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);

Ниже приведены изображения. Здесь . Первое - это двоичное изображение, полученное из оригинала, второе - это оригинал, а третье - результат после наложения двоичных изображений и изображений RGB на код, приведенный выше.Как вы можете видеть, проблема, с которой я сталкиваюсь, состоит в том, что часть, кроме дороги, является голубой, все, что я хочу, это часть, которая не дорога, чтобы быть черным.Как я могу это сделать?

Пожалуйста, измените мой код, если вы можете помочь.Спасибо.

1 Ответ

4 голосов
/ 15 июня 2011

Вам не нужна команда 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);
...