Uitbal detectie: Difference between revisions

From Control Systems Technology Group
Jump to navigation Jump to search
(Created page with '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 …')
 
 
(14 intermediate revisions by 2 users not shown)
Line 1: Line 1:
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]]. <br>
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]]. <br>
<br>
<br>
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>(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. <br>
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. Om dit te realiseren moeten de lijnen van het veld gedetecteerd worden. <br>
<br>
<br>
  %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
== Lijndetectie ==
  %IF loop (if the ball is out of the field, do ...
<br>
  down_line=(bottom_left(2)+(ydiff_up/xdiff_down)*bottom_left(1))-(ydiff_up/xdiff_down)*centr_ball(1);
Eerst wordt het inputbeeld omgevormd tot een binaire figuur, wat wil zeggen dat er enkel nullen en éénen in de matrix zijn, wat resulteert in een zwart-witte figuur. Het omvormen tot binaire figuur wordt gedaan met behulp van een threshold, dit houdt in dat alle matrixwaarden boven een bepaalde waarden in éénen worden veranderd, alle waarden die onder de threshold zijn worden nullen. Op deze manier worden de lijnen extra duidelijk in beeld gebracht, zie de afbeelding hieronder. <br><br>
  left_line=(upper_left(1)+(xdiff_left/ydiff_left)*upper_left(2))+(xdiff_left/ydiff_left)*centr_ball(2);
[[File:Binary_topcam.png|800px]]
  right_right=(bottom_right(1)+(xdiff_right/ydiff_right)*bottom_right(2))+(xdiff_right/ydiff_right)*centr_ball(2);
<br>
  if centr_ball(2)>=down_line
<br>
      if ~isplaying(my_player)
Om de lijnen nu verder te definiëren worden de vier hoekpunten van het veld opgezocht, aan de hand van de matrix. Ook worden per doellijn de twee hoekpunten van het doel vastgelegd. Omdat de camera scheef gemonteerd is, is er een lineaire formule opgesteld om de lijn te trekken tussen de verschillende hoekpunten. <br>
          play(my_player);
Zoals in onderstaande afbeelding te zien is zorgt de lens van de camera voor een vertekend beeld, de lijnen lijken krom. Dit maakt het lastig om de lijnen goed weer te geven met de lineaire formule. In de onderstaande afbeelding is te zien hoe de gele lijnen (waar MatLab mee rekent) afwijken van de daadwerkelijke lijnen.
      end
<br><br>
  end
 
  if centr_ball(1)<=left_line
[[File:Line_detection.png|800px]]
      if ~isplaying(my_player)
<br><br>
          play(my_player);
 
      end
== Uitballen en Goals ==
  elseif centre_ball(1)==0
<br>
      [];
Wanneer de detectie van de bal buiten de lijnen wordt waargenomen wordt een signaal afgegeven. Dit signaal verschilt, afhankelijk van de locatie van waar de bal over de lijn rolt. In het MatLab script wordt het veld opgebouwd in zes lijnstukken, twee zijlijnen, vier achterlijnstukken (twee per zijde) en twee doellijnen. Op deze manier kan er een ander signaal worden afgegeven wanneer er de bal over de doellijn rolt.
  end 
Het resultaat van de uitbal- en doelpuntendetectie is te zien in het volgende filmpje (met geluid), en op onderstaande afbeelding.
  if centr_ball(1)>=right_line
[https://youtu.be/kAgqkGG6Ues demonstratie]
      if ~isplaying(my_player)
<br>
          play(my_player);
 
      end
== MatLab script ==
  elseif centre_ball(1)==0
<br>
  [];
In [[MatLabscript lijndetectie]] is te zien hoe de threshold wordt toegepast op de topcambeelden, in [[MatLabscript uitbaldetectie]] is te zien hoe deze lijnen verwerkt worden tot een werkende uitbaldetectie.
  end
----
 
Terug naar: [[PRE2015_2_Groep2]]

Latest revision as of 14:43, 17 January 2016

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. Om dit te realiseren moeten de lijnen van het veld gedetecteerd worden.

Lijndetectie


Eerst wordt het inputbeeld omgevormd tot een binaire figuur, wat wil zeggen dat er enkel nullen en éénen in de matrix zijn, wat resulteert in een zwart-witte figuur. Het omvormen tot binaire figuur wordt gedaan met behulp van een threshold, dit houdt in dat alle matrixwaarden boven een bepaalde waarden in éénen worden veranderd, alle waarden die onder de threshold zijn worden nullen. Op deze manier worden de lijnen extra duidelijk in beeld gebracht, zie de afbeelding hieronder.

Binary topcam.png

Om de lijnen nu verder te definiëren worden de vier hoekpunten van het veld opgezocht, aan de hand van de matrix. Ook worden per doellijn de twee hoekpunten van het doel vastgelegd. Omdat de camera scheef gemonteerd is, is er een lineaire formule opgesteld om de lijn te trekken tussen de verschillende hoekpunten.
Zoals in onderstaande afbeelding te zien is zorgt de lens van de camera voor een vertekend beeld, de lijnen lijken krom. Dit maakt het lastig om de lijnen goed weer te geven met de lineaire formule. In de onderstaande afbeelding is te zien hoe de gele lijnen (waar MatLab mee rekent) afwijken van de daadwerkelijke lijnen.

Line detection.png

Uitballen en Goals


Wanneer de detectie van de bal buiten de lijnen wordt waargenomen wordt een signaal afgegeven. Dit signaal verschilt, afhankelijk van de locatie van waar de bal over de lijn rolt. In het MatLab script wordt het veld opgebouwd in zes lijnstukken, twee zijlijnen, vier achterlijnstukken (twee per zijde) en twee doellijnen. Op deze manier kan er een ander signaal worden afgegeven wanneer er de bal over de doellijn rolt. Het resultaat van de uitbal- en doelpuntendetectie is te zien in het volgende filmpje (met geluid), en op onderstaande afbeelding. demonstratie

MatLab script


In MatLabscript lijndetectie is te zien hoe de threshold wordt toegepast op de topcambeelden, in MatLabscript uitbaldetectie is te zien hoe deze lijnen verwerkt worden tot een werkende uitbaldetectie.


Terug naar: PRE2015_2_Groep2