Uitbal detectie
Om de regels van het voetbalspel te handhaven moet er door het systeem gedetecteerd worden wanneer een bal uit het veld is of in de goal gaat. Dit wordt gedaan met behulp van de topcam.
Om uitballen te detecteren wordt met behulp van videotracking de bal in het veld gedetecteerd. Omdat de topcam op een vaste positie boven het veld hangt kan een uitbal gemakkelijk gedetecteerd worden. De lijnen van het veld worden namelijk gedefinieerd door een bepaalde vaste [math]\displaystyle{ (x,y) }[/math]-waarde op het scherm. Wanneer de detectie van de bal buiten de lijnen wordt waargenomen wordt een signaal afgegeven. Waarschijnlijk hangt de camera niet precies goed boven het veld, en daarom moet vooraf aan een wedstrijd de camera worden gekalibreerd. Dit hebben wij ook gedaan met de topcam op het 'Tech United' veld in gemini. Dit is in de matlab-code van de bal-detectie verwerkt en wordt hieronder weergegeven.
%Coordinates of field corners bottom_left=[168, 1049]; %[x, y] bottom_right=[1699, 1008]; %[x, y] upper_left=[155, 5]; %[x,y] upper_right=[1685, 5]; %[x,y]
%Creating a formula for y, dependent on x
xdiff_down=bottom_right(1)-bottom_left(1); ydiff_up=bottom_left(2)-bottom_right(2); xdiff_left=bottom_left(1)-upper_left(1); ydiff_left=bottom_left(2)-upper_left(2); xdiff_right=upper_right(1)-bottom_right(1); ydiff_right=upper_right(2)-bottom_right(2); %Loading in sound file my_sound = audioread('whistle.wav'); my_player = audioplayer(my_sound, 44100);
%% Line Detection %IF loop (if the ball is out of the field, do ... down_line=(bottom_left(2)+(ydiff_up/xdiff_down)*bottom_left(1))-(ydiff_up/xdiff_down)*centr_ball(1); left_line=(upper_left(1)+(xdiff_left/ydiff_left)*upper_left(2))+(xdiff_left/ydiff_left)*centr_ball(2); right_right=(bottom_right(1)+(xdiff_right/ydiff_right)*bottom_right(2))+(xdiff_right/ydiff_right)*centr_ball(2);
if centr_ball(2)>=down_line if ~isplaying(my_player) play(my_player); end end if centr_ball(1)<=left_line if ~isplaying(my_player) play(my_player); end elseif centre_ball(1)==0 []; end if centr_ball(1)>=right_line if ~isplaying(my_player) play(my_player); end elseif centre_ball(1)==0 []; end
Terug naar: PRE2015_2_Groep2