Red Ball Tracking Problem

Hi. I have a question. A maked project wich should track a red ball. But appear the problem which bedevil me. There i put my code , if someone can help me, please.
if true
imaqhwinfo
dev_info = imaqhwinfo('winvideo',1)
%info=imaqhwinfo('winvideo')
celldisp(dev_info.SupportedFormats)
vid=videoinput('winvideo',1,'YUY2_640x480');
%%Set the properties of the video object
set(vid, 'FramesPerTrigger', Inf);
set(vid, 'ReturnedColorspace', 'rgb')
vid.FrameGrabInterval = 5;
%Achizitie video
start(vid)
%Initializare arduino
ser=serial('COM3','Baudrate',9600);
fopen(ser)
while(vid.FramesAcquired<150) data = getsnapshot(vid); %din gray extragem componenta rosie r = data(:,:,1);g = data(:,:,2); b = data(:,:,3); bw1 = ((r >=248) & (g <=2) & (b <=2)); %bw1 = (r - g/2 - b/2); % % stergem pixelii mai mici deci 30 bw1 = bwareaopen(bw1,30); bw = imfill(bw1,'holes'); [B,L] = bwboundaries(bw,'noholes'); %figure(1); subplot(224); imshow(bw1); %nr de componente conectate din imagine %bw = bwlabel(bw1, 8); % bw1 = imfill(bw1,'holes'); % [B,L] = bwboundaries(bw,'noholes'); %Blob analiza stats = regionprops(L,'Area','Centroid'); circle_threshold = 0.80; figure(1); imshow(data); hold on for g = 1:length(B)
% obtain (X,Y) boundary coordinates corresponding to label 'g'
boundary = B{g};
% compute a simple estimate of the object's perimeter
delta_sq = diff(boundary).^2;
perimeter = sum(sqrt(sum(delta_sq,2)));
% obtain the area calculation corresponding to label 'g'
area = stats(g).Area;
% compute the roundness metric
metric = 4*pi*area/perimeter^2;
if metric > circle_threshold
bc = stats(g).Centroid;
plot(bc(1),bc(2),'ko');
a=text(bc(1)+16,bc(2),strcat('X: ',num2str(round(bc(1))),' Y: ', num2str(round(bc(2)))));
set(a, 'FontName', 'Arial', 'FontWeight','bold','FontSize',12,'Color','yellow');
%Poz=uint8(bc(1));
X = round(bc(1));
% valoarea_prag = 60;
% Xc = 320;%320;
[pancmd] = pantilt(X);
fwrite(ser,pancmd,'char');
% if (Xc-X) > valoarea_prag
% fprintf(ser,'r');
% %%Find out if the X component of the face is to the right of the middle of the screen.
% elseif (X-Xc) > valoarea_prag
% fprintf(ser,'l');
% end
else
[r,c] = find(L(:,:)==g);
% [r,c] = find(bwlabel(bw)==g);
bw(r,c)=0;
end
end
% pause
hold off
end
%b.servoWrite(9,0);
%pos = b.servoread(1);
%oprire achizite video closepreview(vid) stop(vid); %delete(vid)
fclose(ser) %sterge toate variabilele clear all sprintf('%s','gata') end

Respuestas (2)

Image Analyst
Image Analyst el 19 de Abr. de 2015

0 votos

See my attached code where I track a green object. Feel free to change the values to track a red object instead.

5 comentarios

Stas Radion
Stas Radion el 19 de Abr. de 2015
Thank You for code! But still want to know what is wrong in code. To know on the future
Image Analyst
Image Analyst el 19 de Abr. de 2015
I don't know. I didn't run it, and you didn't say what was wrong. Is there an error message? Does it not find the red region(s)? Try this: http://blogs.mathworks.com/videos/2012/07/03/debugging-in-matlab/
Stas Radion
Stas Radion el 19 de Abr. de 2015
i make
if true
bw1 = ((r >=248) & (g <=100) & (b <=100));
end
and he recognize one type of red color. Now he show me many coordonation in image , how can i do to make just one X
.
Image Analyst
Image Analyst el 19 de Abr. de 2015
That should show a whole range of colors. If it's not doing the job, try using delta E like I did in my demo: http://www.mathworks.com/matlabcentral/fileexchange/31118-color-segmentation-by-delta-e-color-difference
Stas Radion
Stas Radion el 19 de Abr. de 2015
Thank You for suggestion. I will try this.

Iniciar sesión para comentar.

Syed Asad  Ali
Syed Asad Ali el 22 de Feb. de 2016

0 votos

Hi..sir please understand me about this intensity formula and threshold for finding green intensity....
r=center(:,:,1); g=center(:,:,2); b=center(:,:,3); green=g-(r/2)-(b/2); bw=(green>30);
in this formula why use /2...and why g is place before r/2 and b/2..and also why use green>30...why use 30 in this...sir pls ans ASAP

Etiquetas

Preguntada:

el 19 de Abr. de 2015

Comentada:

el 22 de Feb. de 2016

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by