I'm working on a smartcar project in which on detecting red color the car should stop and on detecting green color it should start running. I am using Matlab for color detection and Arduino to run the car. But the problem is I m not able to detect the green color, the code only detect red color and stop the car. I am not able to figure out the problem.
My code is:
vid = videoinput('winvideo',1 ,'YUY2_320x240');
s=serial('COM9','BAUD',9600);
fopen(s); %open serial port
set(vid, 'FramesPerTrigger', Inf);
set(vid, 'ReturnedColorspace', 'rgb')
vid.FrameGrabInterval = 10;
start(vid)
%set a loop that stop after 100 frames of aquisition
for i=1:100
IMRED = getsnapshot(vid); % get the snapshot of the current frame
diff_im = imsubtract(IMRED(:,:,1), rgb2gray(IMRED)); % subtract red component from the grayscale image to extract the red component in image.
gr=graythresh(diff_im);
diff_im1 = imsubtract(IMRED(:,:,2), rgb2gray(IMRED)); %subtract green component from the grayscale image to extract the green component in image.
gr1=graythresh(diff_im1);
diff_im = medfilt2(diff_im, [3 3]); % median filter to filter the noise.
diff_im1 = medfilt2(diff_im1, [3 3]);
% convert the resulting grayscale image into a binary image.
diff_im = im2bw(diff_im,.18);
diff_im1 = im2bw(diff_im1,.05);
% Remove all those pixels less than 300px
diff_im = bwareaopen(diff_im,300);
diff_im1 = bwareaopen(diff_im1,300);
% Label all the connected components in the image
[bw bw1] = bwlabel(diff_im, 8);
[L bw2] = bwlabel(diff_im1, 8);
if (bw1<=0 && bw2 <=0) % if no color detected run forward
fprintf(s,100);
elseif (bw1>=1) % if red detected stop the car
while (bw1>=1);
fprintf(s,101);
end
while(~(bw2>=1)) % start the car if green detected
fprintf(s,101);
end
fprintf(s,100);
if (bw2>=1)
fprintf(s,100);
else
fprintf(s,101);
end
else
fprintf(s,100);
end
imshow( IMRED )
hold on
hold off
end
stop(vid);
flushdata(vid);
delete(vid);
clear vid;
fclose(s);
clear all;
clc
I'm getting such output: