Post on 19-Jun-2020
1
2
3
“Je moet schieten, anders kun je niet scoren.”
Johan Cruijff
Nederlands voetballer en coach 1947
4
Inhoudsopgave
Algemene inleiding .............................................................................................................................. 6
Overzicht onderzoek ........................................................................................................................... 7
Hoofdstuk 1: Veldonderzoek ......................................................................................................... 8
Schietproef 1 – oriënterend ................................................................................................................ 8
Beelden ............................................................................................................................................ 8
Conclusie ....................................................................................................................................... 10
Schietproef 2 - verdiepend ................................................................................................................ 10
Opstelling ....................................................................................................................................... 10
Conclusie ....................................................................................................................................... 11
Schietproef 3 - definitief .................................................................................................................... 11
Uitvoering en conclusie ................................................................................................................. 12
Schottechniek (á la Beckham) ....................................................................................................... 13
Hoofdstuk 2: Puntreconstructie .................................................................................................. 14
Het beeldvlak ................................................................................................................................. 14
Van pixelcoördinaten naar vectoren ............................................................................................. 15
Uit twee vectoren de plaats van de bal reconstrueren ..................................................................... 17
Hoofdstuk 3: Beeldonderzoek ..................................................................................................... 20
Adobe After Effects ....................................................................................................................... 20
Microsoft Excel .............................................................................................................................. 21
Van Excel naar MATLAB ................................................................................................................. 22
Beeldcorrectie ................................................................................................................................... 22
Hoofdstuk 4: Balbaanreconstructie ............................................................................................. 26
De kleinste-kwadratenmethode ........................................................................................................ 26
Lineaire Regressie .............................................................................................................................. 28
Onze balbanen ............................................................................................................................... 30
Hoofdstuk 5: Rotatie, snelheid en curve ...................................................................................... 32
Rotatie ........................................................................................................................................... 32
Basistransformatie ........................................................................................................................ 36
Snelheid van de bal........................................................................................................................ 38
Curve.............................................................................................................................................. 39
Correlatie ....................................................................................................................................... 40
Hoofdstuk 6: Resultaten ............................................................................................................. 41
Interpretatie resultaten ................................................................................................................. 44
5
Hoofdstuk 7: Conclusie en discussie ............................................................................................ 46
Betrouwbaarheid resultaten ............................................................................................................. 46
Controle van balbaan .................................................................................................................... 46
Draaiing bal .................................................................................................................................... 47
Verbetering rotatie ........................................................................................................................ 47
Verband tussen rotatie, snelheid en curve ................................................................................... 48
Vervolg onderzoek............................................................................................................................. 49
Toepassingen ................................................................................................................................. 49
Volledige automatisering .................................................................................................................. 50
Op het veld ........................................................................................................................................ 50
Algemene Conclusie .......................................................................................................................... 51
Nawoord ............................................................................................................................................ 52
Referenties ................................................................................................................................ 53
Bijlages ...................................................................................................................................... 55
Bijlage 1: Matlab programma ............................................................................................................ 55
Bijlage 2: De opstelling ...................................................................................................................... 59
Bijlage 3: De correlatie-tabellen ..................................................................................................... 61
Bijlage 4: Controle voorspelling...................................................................................................... 64
Bijlage 5: Betrouwbaarheid balbaan .............................................................................................. 65
6
Algemene inleiding
‘Bend it like Beckham’ is een Britse film, geproduceerd in 2002. Het verhaal volgt een meisje uit
een traditioneel orthodox gezin waarin zij rebelleert door stiekem te gaan voetballen. Dit
verhaal interesseert ons vrij weinig. Het gaat ons om het begrip: ‘Bend it like Beckham’. David
Beckham is namelijk een voetbalicoon, bekend om zijn grandioze schottechniek. Zonder
nadenken legde hij in zijn beste jaren de bal neer waar hij ook maar wilde, met zijn vrije trap als
specialiteit. Zijn balgevoel heeft ons mede geïnspireerd dit profielwerkstuk te schrijven. Maar
Beckham heeft iets gehad wat wij niet hebben: jarenlange training. Niemand wordt van de ene
op de andere dag geweldig in een bepaalde sport, ook Beckham niet. Helaas hebben wij de tijd
niet om elke dag op het voetbalveld te staan, oefenend op onze schottechniek. Kunnen we die
tijd inkorten?
In de zesde eeuw voor Christus deed Pythagoras de uitspraak: ‘’Alles is te verklaren met
wiskunde.’’ Deze bewering is van invloed geweest op de denkwijzen van latere denkers zoals
Plato en Aristoteles, en zelfs nog latere denkers als Leibniz en Kant. Pythagoras probeerde de
wereld en het heelal te vatten in getallen. Alle ‘dingen’ zijn getallen en alle elementen van die
‘dingen’ zijn ook getallen. Goede getalsverhoudingen leveren harmonie op. En dit geldt op
allerlei gebieden, denk aan muziek, religie en kosmos. Maar als alles met de wiskunde te
verklaren is, zou dit dan ook een oplossing kunnen zijn voor ons probleem?
Voetbal en wiskunde hebben zich al vaker in combinatie voorgedaan. Zowel binnen als buiten
het veld zijn er veel wiskundig verklaarbare aspecten. Buiten het veld gaat dit vooral over
kansberekeningen. Aan de hand van data is veel binnen het voetbal te voorspellen, maar lang
niet alles. Hoe groot is de kans dat het ene team het andere verslaat? In welke hoek moet de spits
zijn penalty schieten om garantie te hebben op een doelpunt? Hebben we een goede hoop op het
halen van de finale op het WK? Door gokbedrijven gaan er tegenwoordig miljoenen om in iets
wat eigenlijk maar een spelletje is. Er vindt tegenwoordig zelfs matchfixing plaats, wat nog
lastiger in regels gegoten kan worden. Of moeten we de kans op matchfixing berekenen?
Maar ook op het veld is er veel wiskundig benaderbaar. Zo wordt er veel onderzoek gedaan naar
verschillende aspecten binnen het veld om het spel zelf te perfectioneren. De lengte van het gras,
de textuur van de tenues, de vorm van de schoenen, alles heeft zijn invloed op het spel. Wat
echter het belangrijkste blijft is hoe je de bal moet trappen.
David Beckhams vrije trappen stonden altijd bol van het effect. Hij wist als geen ander hoe hij
dat moest doen, de bal langs een muurtje krullen. Dit onderzoek is gericht op zijn specialiteit: de
curve. De vraag die we proberen te beantwoorden is dan ook: Wat is het wiskundige verband
tussen de rotatie en snelheid van een bal en de curve die de bal in zijn baan ondervindt? We
laten in dit onderzoek de natuurkundige elementen achterwege. Er wordt enkel vanuit de
wiskunde naar de beweging van de bal gekeken, zodat zaken als zwaartekracht, wind en de
opwarming van de bal niet aan bod komen. Dit betekent niet dat we doen alsof deze zaken er
niet zijn; we kijken echter of het mogelijk is dit onderzoek uit te voeren met enkel gebruik van
wiskunde en empirisch onderzoek.
Onze verwachtingen waren hoopvol, doch realistisch. We vermoedden een flinke kluif te zullen
krijgen aan met name de wiskunde, maar zagen dit ook als een uitdaging. Of de kennis na het
onderzoek ook in het veld zijn voordelen zal hebben, verklappen we nog niet.
7
Overzicht onderzoek
Dit stuk is bedoeld om uit te leggen hoe het onderzoek beschreven zal worden. Het
profielwerkstuk bestaat uit meerdere onderdelen waarbij elk onderdeel een aantal
moeilijkheden kent. Het is een uitdaging geweest om altijd naar de beste oplossing voor elk
probleem te zoeken. Soms is dat eenvoudig, vaak gaat er een lang denkproces aan vooraf. Een
groot gedeelte van ons onderzoek bestond uit zoeken naar meetmethodes die met de wiskunde
te combineren zijn tot goede resultaten.
Ten eerste is er het praktische gedeelte: veldonderzoek. Dit wordt als eerste behandeld in dit
profielwerkstuk. Het veldonderzoek bestaat uit drie delen; elk deel beschrijft een moment
waarop met bal en camera’s aan de slag is gegaan, waarbij telkens gerichter te werk wordt
gegaan.
Daarna volgt er een theoretisch deel. Deze onderdelen bevatten wiskundige theorie die per
onderdeel van toepassing zijn. Als eerste komt het hoofdstuk ‘Puntreconstructie’. In dit
hoofdstuk wordt theoretisch beschreven hoe de afzonderlijke punten gevonden zijn waar de bal
langs is gegaan in zijn baan richting het doel. Na het hoofdstuk ‘Puntreconstructie’ komt een
hoofdstuk ‘Beeldonderzoek’. Hierin wordt duidelijk hoe de beelden uit het veldonderzoek zijn
geanalyseerd met programma’s op de computer. Hierna volgt het hoofdstuk
‘Balbaanreconstructie’. In dit hoofdstuk wordt uitgelegd hoe aan de hand van de afzonderlijke
punten in de balbaan de volledige balbaan is berekend. Na ‘Balbaanreconstructie’ komen we aan
bij het hoofdstuk ‘Rotatie, snelheid en curve’. Hierin wordt verteld hoe wij de curve, rotatie en
snelheid van de bal hebben bepaald. Daarna volgen onze resultaten en de interpretatie hiervan
het hoofdstuk ‘Resultaten’.
De resultaten laten de gevonden verbanden zien, die we bespreken in conclusies. Daarnaast
wordt het gehele onderzoek nog uitgebreid bediscussieerd. Dit gebeurd in het hoofdstuk
‘Conclusie en Discussie’. Omdat we voor deze opzet kiezen, wordt er soms verwezen naar een
stuk tekst dat verderop in de tekst staat. Ook geven wij onze visie op de waarde van dit
onderzoek, de betrouwbaarheid en mogelijke vervolgonderzoeken.
Als laatste volgen de bijlages. Deze bijlages kunnen interessant zijn om te lezen maar zijn niet
noodzakelijk voor het begrijpen van het onderzoek. De bijlages dienen hoofdzakelijk als verdere
toelichting bij een aantal stukken.
8
Hoofdstuk 1: Veldonderzoek
Schietproef 1 – oriënterend
De eerste schietproef is gedaan met als doel een goed beeld te krijgen van wat de mogelijkheden
zijn van de camera’s die gebruikt worden. Met twee camera’s, een voetbalveld, een bal, pionnen
en onszelf als schutters zijn we aan de slag gegaan. Als locatie is gekozen voor voetbalclub
Geuzen-Middenmeer in Amsterdam Oost. Bij deze test is er zoveel mogelijk gevarieerd op
verschillende punten. Zo zijn de standpunten van de camera’s meerdere keren veranderd en is
de beginpositie van de bal telkens anders. Wat vooraf wel bekend is, is dat één camera (C1)
richting het doel zou filmen en één camera (C2), een kwartslag gedraaid, vanaf zijaanzicht van
het doel. De bal is hard en zacht, hoog en laag, met en zonder curve op doel geschoten. De
gedraaide beelden zijn vervolgens op de computer onderzocht met het programma Adobe After
Effects dat de positie van de bal op het tweedimensionale beeldvlak achterhaalt voor wiskundige
anayes (zie hoofdstuk 3 - ‘Beeldonderzoek’).
Beelden
Hier volgen een aantal screenshots van geschoten beelden.
Afbeelding 1 – Screenshot van camera 1
9
Afbeelding 2 – Screenshot van camera 2
Afbeelding 3 - Screenshot van camera 2
10
Conclusie
We hebben een goed idee gekregen van de camera’s en zijn tevreden met de kwaliteit van de
beelden. De screenshots zijn er slechts drie uit ongeveer een half uur aan filmmateriaal. Deze
beelden hebben we aandachtig bekeken met het programma ‘Adobe After Effects’ en we zijn tot
een aantal conclusies gekomen hoe we de schietproef konden verbeteren. (zie hoofdstuk 3 –
Beeldonderzoek). We hebben gekozen voor een vast beginpunt van de bal. Namelijk het punt
waar de halve cirkel om de penaltystip de zestienmeterlijn snijdt, aan de linkerkant, naar het
doel gekeken. Dit punt is namelijk altijd makkelijk terug te vinden en bovendien ligt het
beginpunt zo voor beide camera’s links in beeld.
Schietproef 2 - verdiepend
In dit stuk wordt de meting beschreven waarin schoten nauwkeurig beschouwd worden. In deze
meting is er zo’n twintig keer geschoten. Er zijn een aantal wijzigingen doorgevoerd die later
worden besproken.
Het is voor het onderzoek belangrijk te weten welke materialen we allemaal tot onze
beschikking hebben. Om verschillende metingen betrouwbaar te kunnen vergelijken is het
belangrijk dat we telkens dezelfde materialen gebruiken. Daarom filmen we altijd met dezelfde
camera’s: Canon Legria HF M46. Deze camera’s filmen in HD en gebruikten we ook al in de eerste
schietproef.
Ook is het van belang dat de bal waarmee we schieten altijd dezelfde is. Elke bal is namelijk net
anders van materiaal, vorm, hardheid, etc. We kiezen ervoor om met een bal te schieten die ook
in het professionele voetbal wordt gebruikt, namelijk in de Nederlandse Eredivisie. In deze
competitie wordt al jaren gespeeld met een bal van het merk Derbystar. Door met een
professionele bal te schieten zullen we geen onrealistische balbanen krijgen die wel mogelijk
zijn met voetballen die bijvoorbeeld te licht of te klein zijn.
Opstelling
De camera’s die de baan van de bal
filmen staan nu loodrecht op elkaar
afgesteld, dus op de middens van
twee zijden van een vierkant,
loodrecht op elkaar. Op deze manier
kunnen de punten in de ruimte het
best berekend worden.
Bij deze meting zijn twee extra
camera’s gericht op de bal. In deze
proef wordt namelijk niet alleen de
balbaan gemeten. We filmen ook de
bal zelf, hoe deze geschoten wordt,
zodat we later het verband kunnen
leggen tussen hoe de bal geraakt
wordt en welke balbaan het
desbetreffend schot volgt. Hiervoor moeten we dus precies beschouwen op welke manier de bal
Afbeelding 4
11
geraakt wordt. Hierin zijn het raakpunt op de bal, de kracht waarmee de bal wordt geraakt, en
de richting van deze kracht belangrijk. Hoe deze precies met elkaar verbonden zijn, wordt later
uitgezocht. De opstelling van deze camera’s is in afbeelding 4 schematisch weergegeven; Hier is
te zien op welke posities de camera’s (C3 en C4) zich ten opzichte van het beginpunt van de bal
(B) bevinden.
Conclusie
De beelden van de balbaan (camera 1 en 2) zijn zeer bruikbaar. De opstelling van deze camera’s
zal dan ook voor het grootste deel onveranderd blijven. De beelden van het raken van de bal zijn
van goede kwaliteit, maar de actie is te snel om duidelijk te kunnen onderzoeken. Het is dus geen
optie meer om hier onderzoek naar te doen aangezien onze camera’s ontoereikend zijn.
Schietproef 3 - definitief
De derde en laatste schietproef is gericht op de rotatie en de curve van de bal. De
cameraopstelling is voor een deel hetzelfde en voor een deel aangepast. De twee camera’s die
dicht op de bal stonden geplaatst bij schietproef 2 zijn er in deze proef niet. Wel is een extra
camera aanwezig die de bal in zijn volledige baan van dichtbij volgt. Deze camera is, in
tegenstelling tot alle andere camera’s die tot nu toe gebruikt zijn, in beweging tijdens een schot.
Bij deze proef ligt niet de aandacht op hoe de bal geraakt wordt. Dit staat nu volledig buiten
beschouwing. De rotatie van de bal staat nu centraal, welke gefilmd wordt door de nieuwe
camera 3.
Opstelling
Op afbeelding 5 is een schematische driedimensionale weergave van het voetbalveld te zien.
Hierop zijn alle afstanden te zien (gemeten met een meetlint). Dit is heel precies gedaan omdat
veel afstanden van belang zijn in de puntreconstructie en kleine afwijkingen hier kunnen zorgen
voor ongewenste afwijkingen in de uiteindelijke balbaan. Ook de precieze posities van de
camera 1 en camera 2 zijn hier weergegeven. De positie van camera 3 is niet aangegeven, omdat
deze geen vaste positie had.
Afbeelding 5 - Driedimensionale weergave van het voetbalveld
12
Camera 1 en camera 2 zijn dezelfde camera’s als in schietproef 1 en 2 zijn gebruikt. Camera 3 is
is een Sony HDR CX740VE. Deze filmt in een hogere resolutie, kan met een kleinere sluitertijd
filmen en heeft bovendien een stabiliseringmechanisme. Het laatste is zeer gunstig voor het
volgen van de bal, omdat het zorgt dat de beelden vloeiend (zonder schokken) zijn.
Verder is de bal nu voorzien van zes gekleurde vlakken. Deze zijn ervoor bedoeld de rotatie van
de bal duidelijk weete kunnen meten. We kiezen voor een
nieuwe denkbeeldige oorsprong precies in het middelpunt van
de bal. Dit is de oorsprong van een nieuw driedimensionaal
assenstelsel. Elk van deze assen verlaat de bal aan twee
verschillende kanten van de oorsprong. Op de twee punten
waar een as dit doet zijn twee stippen van dezelfde kleur. Dat
betekent dat alle stippen precies even ver van elkaar verwijderd
zijn (behalve tegenoverliggende stippen) en de verschillende
kleuren in dit assenstelsel loodrecht op elkaar staan. Zie
afbeelding 6 voor een afbeelding van de gebruikte bal.
Uitvoering en conclusie
Er is weer een twintigtal schoten gedaan, afwijkend in snelheid en richting. De rotatie van de bal
filmen gebeurde met de camera in de hand, wat goed te doen was. Dit is vanuit meerdere
posities gedaan, omdat de perfecte positie nog niet bekend was. Op de beelden is gebleken dat
dit voor het meten van de rotatie niet heel veel uitmaakt.
Afbeelding 7 - Screenshot van camera 3
De rotatie is erg goed te zien. We zijn vooral zeer tevreden met de kwaliteit van de beelden. De
bal is in elke frame scherp (de stippen zijn duidelijk zichtbaar), wat ervoor zorgt dat de snelheid
en de richting van de rotatie goed te zien zijn.
Afbeelding 6
13
Wel is een fout opgetreden in de draaiing van camera 2. Uit de beelden is gebleken dat deze
camera een aantal graden naar rechts gedraaid stond, waardoor deze camera niet loodrecht op
de y-as filmde. Dit zorgt ervoor dat de pixelcoördinaten niet overeenkomen met waar vanuit
wordt gegaan in de berekeningen, wat leidt tot foute balbanen (zie hoofdstuk 3 –
‘Beeldonderzoek’ voor het herstel van deze fout). Maar zoals Cruijff placht te zeggen: ‘Ieder
nadeel heb zijn voordeel’. Door het corrigeren van deze fout konden we onze techniek
uitbreiden. Dit heeft enkele interessante resultaten en methodes opgeleverd welke behandeld
worden in het hoofdstuk Beeldonderzoek.
Schottechniek (á la Beckham) Om voor ons de metingen iets makkelijker te maken beperken we ons tot slechts één
schottechniek. Dit profielwerkstuk heet niet voor niets ‘Bend it like Beckham’. Wanneer je alle
vrije trappen van David Beckham vergelijkt, valt op dat elk schot op ongeveer dezelfde manier
wordt geschoten. Elke keer begint hij zijn aanloop op ongeveer vier meter afstand van de bal,
met een hoek van ongeveer 45 graden. Bij de bal aangekomen schiet Beckham altijd met rechts,
raakt de bal met de wreef aan de binnenkant van zijn voet. De bal begint zijn beweging, en heeft
een afbuiging naar links. Wij kennen deze techniek en weten deze uit te voeren.
14
Hoofdstuk 2: Puntreconstructie
Voor het succesvol reconstrueren van een balbaan in drie dimensies is het noodzakelijk dat er
genoeg punten uit de baan bekend zijn. Waar deze punten in de ruimte liggen, wat dus de x,y- en
z-coördinaten van de punten zijn, moet worden berekend aan de hand van twee zelfgeschoten
camerabeelden. Een camerabeeld is tweedimensionaal. Om van één punt de coördinaten precies
te bepalen, moeten de posities van de camera’s goed op elkaar afgesteld zijn. Om vervolgens uit
de twee geschoten beelden één punt in drie dimensies te beschrijven, is de wiskunde van belang.
Per schot zullen we frame per frame kijken waar de bal zich op beide beelden bevindt en uit
deze twee beelden de driedimensionale plaats reconstrueren.
Het beeldvlak
Het beeld dat een camera weergeeft zien we als een vlak. De positie van de bal (punt P) kan
worden gezien als een vectorrichting vanuit de camera, door het beeldvlak, naar het werkelijke
punt. De afstand tussen de bal en de camera is onbekend en is met één camerabeeld niet te
bepalen. Bekend is waar de vector het beeldvlak snijdt (punt P1). Dit punt is namelijk precies P
zoals je hem ziet in het beeldscherm. Wat je nu weet is dat de positie van de bal op de richting
van deze vector ligt, onbekend is nog waar op deze vector. Daarvoor is de tweede camera. Als de
tweede camera op dezelfde manier beschouwd wordt, ontstaat er weer een beeldvlak met een
snijpunt (punt P2) van de vector van deze camera naar P. Nu zijn twee vectoren bekend waarop
dit punt ligt, met verschillende richtingen. Punt P is dan het snijpunt van de rechten door C1, P1
en C2, P2. (Zie afbeelding 8).
Afbeelding 8
Het berekenen van de locatie van dit punt P in de lucht bestaat uit verschillende stappen. De
eerste stap hiervoor is weten wat de verhoudingen binnen het vlak zijn. Deze positie wordt
uitgedrukt in pixelcoördinaten. Deze pixelcoördinaten die After Effects geeft moeten vervolgens
nog omgezet worden in vectoren.
15
Van pixelcoördinaten naar vectoren
Om de getallen die we binnen krijgen van After Effects in vectoren om te zetten moet eerst
bekend zijn waar ons beeldvlak ligt. Het beeldvlak kun je voor je zien als de afdruk van een foto.
Deze afdruk kan enkel op één afstand van de camera gehouden worden, zodat de foto perfect
overgaat in de omgeving. Als je de foto een klein beetje naar voren of naar achteren verplaatst,
merk je dat hij niet meer perfect in het landschap opgaat. De afstand waarop je de foto moet
neerzetten is afhankelijk van de grootte van de afdruk van de foto. Wat gelijk blijft is de
verhouding tussen de afstand (d), en de grootte van
de afdruk/het beeldvlak (b). Je kan dit zien door naar
de voorstelling te kijken als naar gelijkvormige
driehoeken. In dit geval geldt:
= C
waarbij b en d de originele afbeelding en afstand zijn,
b1 en d1 de eerste afdruk, en b2 en b3 alle mogelijke
variaties van afdrukken zijn (zie afbeelding 9). Deze
verhouding levert een constante C op. C drukt de
verhouding uit tussen de afstand van het beeldvlak
en de grootte van dit beeldvlak. Om ons eigen
beeldvlak te vinden zetten we zelf twee voorwerpen
op een gekozen afstand van elkaar en op een
gekozen afstand van de camera. Deze afstand en
verhouding zijn gemeten met pionnen. Hiervoor
geldt dat:
En hieruit volgt:
De eenheid van de afstand van de pionnen op het beeld is pixels en kan door After Effects
gegeven worden. Zo worden dus de afstanden tot en binnen het beeldvlak achterhaald. De
laatstgenoemde afstand is echter in pixels. In ons geval maakt het niet uit hoe groot één pixel
precies is, omdat dit zelf gekozen mag worden. Want zoals er eerder al aangetoond is, gaat het
om de verhouding tussen de grootte van het beeldvlak en de grootte van de afstand van dit
beeldvlak tot de camera. Het maakt dus niet uit of deze verhouding in pixels of in meters is, want
voor beiden blijft de verhouding hetzelfde. In ons geval kwamen wij voor de beeldvlakafstand
op een afstand van 1692.36 pixels. Bij ons geldt dus dat 1440 staat tot 1692,36.
Nu mogen wij zelf bepalen hoe groot wij een pixel maken en op welke afstand wij dit beeldvlak
plaatsen maar daarbij blijft deze verhouding geldig. Als wij bijvoorbeeld ons beeldvlak op een
afstand van 5 meter van de camera zetten moet het beeldvlak breed
zijn. Nu is ook gelijk de hoogte van het beeldvlak bekend. Dat is
Afbeelding 9
16
m
Dit zijn de totale breedte en hoogte van het beeldvlak. Wij hebben de afstand zo gedefiniëerd dat
deze loodrecht op het midden van het beeldvlak staat dus beide waardes zullen door 2 gedeeld
worden waarna de ene helft de positieve as vormt van het assentelsel in het beeldvlak en de
andere helft de negatieve helft van de as.
Onze uiteindelijke rechte richting de bal krijgt zo de vorm van de volgende
parametervergelijking:
(
) (
)
is in deze vergelijking de parameter.
Wat we als oorsprong kiezen hebben we ook zelf in de hand en daarom zijn we vrij een voor ons
gunstig punt te nemen. Zoals gezegd staan de camera’s loodrecht op elkaar, dus de lijnen waar
deze camera’s op staan hebben wij als onze x en y-as gekozen. Camera 1 staat op de y-as, camera
2 op de x-as. Dan is er nog de hoogte, die loodrecht op beide assen staat en deze vormt onze z-as.
Als eenheid voor de lengte is gekozen voor meters.
De positie van de camera’s in de ruimte is bekend. We weten namelijk waar deze staan ten
opzichte van de oorsprong en kunnen dit eenvoudig met een meetlint meten. Deze posities zien
we als steunvectoren vanuit de oorsprong. Vanuit deze punten in de ruimte lopen dan nog de
richtingsvectoren naar de bal. De vecotrvergelijkingen van rechten die we moeten snijden ziet er
dan als volgt uit:
(
) (
) en (
) (
)
Steunvector 1 (
) wordt gegeven door de positie van camera 1, en vector 1: (
) wordt
gegeven door de vector die vanuit camera 1, door de afbeelding van de bal op het beeldvlak, naar
de bal gaat. Voor camera 2 geldt hetzelfde principe.
Zoals te zien is heeft de steunvector van vector 1 (horend bij camera 1) een x-waarde van 0. Dit
is zo omdat de camera zich bevindt op het vlak dat wordt opgespannen door de y- en de z-as.
Hetzelfde geldt voor vector 2 (bij camera twee), maar dan zijn de x- en y-waarde omgedraaid.
De waarden van x0, y0, z0 zijn handmatig met meetlinten gemeten. Zie hoofdstuk 3 –
‘Beeldonderzoek’ voor de precieze methode waarmee de vectoren richting de bal zijn bepaald.
17
Uit twee vectoren de plaats van de bal reconstrueren
Vanaf nu wordt er gewerkt met de volgende vectorvergelijkingen:
(
) (
) en (
) (
)
is de vector vanaf de camera op de x-as richting de bal en de vector vanaf de camera op de
y-as. Het zou te verwachten zijn dat de driedimensionale plaats gegeven wordt door het snijpunt
van beide vectoren. Dan zou de oplossing gegeven worden door de vectoren gelijk aan elkaar te
stellen.
(
) (
) = (
) (
) .
Dit geldt weliswaar in theorie, maar niet in praktijk. De twee vectoren zullen namelijk vrijwel
nooit exact snijden. Dit komt doordat er altijd meetfouten zullen zijn in de gegevens. Het maakt
niet uit hoe klein deze meetfouten zijn, al is het een duizendste van een millimeter, ze zullen er
onherroepelijk voor zorgen dat de rechten niet snijden. We kunnen deze methode dus niet
gebruiken om de coördinaten te vinden van het punt waarop de bal zich bevindt. Wat we in
plaats daarvan zullen moeten doen is het punt vinden dat het dichtst bij beide lijnen ligt. Dit punt
zal dan als locatie van de bal beschouwd worden aangezien het de beste benadering is.
Om alle parameters (x,y,z) even zwaar mee te laten wegen moet het punt worden gevonden
waar de afstand tot beide vectoren( )
minimaal is. Dit is het punt dat halverwege de
vector ligt die de kortste afstand tussen de
rechten overbrugt. Hiervoor moet dus eerst
de rechte bekend zijn die de kortste afstand
tussen de twee vectoren overbrugt.
We zijn nu zover dat we twee rechten(P1,P2
en P3,P4) hebben die beide door het punt
gaan waar de bal zou moeten zijn. Vanaf nu
zullen we deze twee als lijn1 en lijn2
definiëren, waarbij lijn 1 de lijn is die
gevormd wordt door de vector met de camera
op de x-as als vertrekpunt en lijn 2 wordt
gevormd door de vector die bij de camera op
de y-as begint.
Lijn1 en lijn 2 zijn in principe oneindig lang.
We kiezen de lijnen echter zo lang dat we zeker weten dat de kortst mogelijke lijn tussen lijn 1
en lijn 2 zich binnen de door ons gekozen lengte bevindt. Vervolgens beschrijven we onze lijnen
elk door 2 punten te kiezen, het begin en het eindpunt van de lijn. Voor lijn1 zijn dit P1 en P2,
voor lijn 2 zijn dit P3 en P4. Deze punten liggen uiteraard op de al eerder gevonden vectoren.
Onze gezochte kortste lijn tussen lijn 1 en lijn 2 loopt tussen 2 punten. Eén punt op lijn 1, punt Pa
en één punt op lijn2, punt Pb. We weten van Pa dat het zich bevindt tussen P1 en P2 waarbij
Afbeelding 10
18
).
Op dezelfde manier kan je een punt op de tweede vector beschrijven, die gegeven wordt door de
punten P3 en P4.
Voor de punten die tussen P1-P2 en P3-P4 liggen, zijn de waardes van a en b tussen de 0 en 1.
Dit geldt voor de punten waar wij naar opzoek zijn. Het
lijnstuk van Pa naar Pb zullen we vanaf nu lijnstuk c
noemen. Ons doel is dus het vinden van c.
Er zijn twee manieren om de benadering van de kortste
afstand op te lossen. Eén manier is het minimaliseren van
de grootte van het lijnstuk c. Deze methode zullen wij
echter niet behandelen. Wij zullen ons focussen op een
andere benadering.
Op afbeelding 11 zien we twee rechte hoeken. Dit komt
doordat het kortste lijnstuk tussen de twee lijnen
loodrecht op beide lijnen moet staan. Anders kan het
niet de kortste afstand zijn en wel om de volgende reden:
als de hoek niet recht is, kun je dit punt Pa altijd een klein
beetje opschuiven waardoor hij dichterbij 90 graden komt, en als je dit lang genoeg doet volgt
altijd een rechte hoek. Uit de Stelling van Pythagoras volgt immers dat de kortste afstand wel de
afstand moet zijn waarbij de lijn op beide andere lijnen een rechte hoek maakt. Op de
afbeeldingen zie je twee mogelijke Pa’s. Bij de rechter Pa is de afstand tot Pb gegeven door C, bij
de rechter Pa door B. Uit Pythagoras volgt dat C gegeven wordt door √ . C is dus op
zijn kleinst als A2 gelijk is aan 0. Dat betekent dat A=0 en dat de Pa dus loodrecht op Pb staat.
Ditzelfde geldt voor Pb.
| || |
De cosinus van 90° is 0, dus het inproduct moet gelijk zijn aan nul. Uit deze redenatie volgt dat
het inproduct van lijn a en lijnstuk c nul moet zijn, net als het inproduct van lijn b en lijnstuk c.
Het inproduct van twee vectoren wordt gegeven door Dit geeft ons de volgende vergelijkingen:
Als we hier nu de formules van onze lijnen invoegen krijgen we:
( )
( )
Als we dit uitwerken naar (x,y,z) zien we:
Afbeelding 11
19
(x1 – x3)(x2 – x1) + (y1 – y3)(y2 – y1) + (z1 – z3)(z2 – z1) +
a((x2 – x1)(x2 – x1) + (y2 – y1)(y2 – y1) + (z2 – z1)(z2 – z1)) –
b((x4 – x3)(x2 – x1) + (y4 – y3)(y2 – y1) + (z4 – z3)(z2 – z1)) = 0
En:
(x1 – x3)(x4 – x3) + (y1 – y3)(y4 – y3) + (z1 – z3)(z4 – z3) +
a((x4 – x3)(x2 – x1) + (y4 – y3)(y2 – y1) + (z4 – z3)(z2 – z1)) –
b((x4 – x3)(x4 – x3) + (y4 – y3)(y4 – y3) + (z4 – z3)(z4 – z3)) = 0
We definiëren nu dmnop als volgt:
(xm - xn)(xo - xp) + (ym - yn)(yo - yp) + (zm - zn)(zo - zp)
d1343 wordt dan:
(x1 – x3)(x4 – x3) + (y1 – y3)(y4 – y3) + (z1 – z3)(z4 – z3)
en als we dit toepassen dan zien onze formules eruit als:
d1321 + a d2121 - b d4321 = 0
d1343 + a d4321 - b d4343 = 0
Als we nu substitutie toepassen door b te schrijven als een functie van a krijgen we:
a = ( d1343 d4321 - d1321 d4343 ) / ( d2121 d4343 - d4321 d4321 )
Als we nu terug substitueren krijgen we
b = ( d1343 + a d4321 ) / d4343
Als we nu onze µa en onze µb invullen in onze eerste formules vinden we Pa en Pb.
).
Ons lijnstuk , is dus gevonden. Met dit lijnstuk kunnen we eenvoudig
het punt vinden dat wij uiteindelijk als punt voor onze balbaanvergelijking gaan gebruiken. Dit
punt kiezen we namelijk door het midden van het lijnstuk te kiezen als dit punt (Pc). Dit vinden
we met
– .
De grootte van lijnstuk c zal afhangen van onze meetfouten. Het is natuurlijk de bedoeling dat
deze afstand zo klein mogelijk is; dan is de kans dat de metingen nauwkeurig waren het grootst.
20
Hoofdstuk 3: Beeldonderzoek
Adobe After Effects
De pixelcoördinaten zijn bepaald met behulp van Adobe After Effects. Dit is een
monteerprogramma waarmee beelden afgespeeld en bewerkt worden. Het wordt vooral veel
gebruikt voor special effects en beeldmanipulatie in films. Voor ons heeft dit programma echter
een aantal interessante functies. Allereerst geeft After Effects van elke pixel de bijbehorende
pixelcoördinaten. Hierdoor kunnen wij bepalen waar in het beeldvlak de bal zich bevindt.
Daarnaast heeft het de functie ‘Motion Tracking’ en dit geeft de mogelijkheid één bepaald object
in een filmbeeld te blijven volgen in slow-motion. Bovendien is het in staat de positie van dit
object nauwkeurig in pixels weer te geven. Dit voorkomt een hoop onnodig werk, omdat we
hiermee het punt waar de bal zich in het beeld bevindt, (let op, dit is niet hetzelfde als waar het
punt zich in werkelijkheid bevindt) voor ons kunnen laten berekenen. De positie van de bal kan
dus, in plaats van in meters, in pixels worden uitgedrukt. Met deze getallen zullen we dus ook in
het vervolg gaan werken.
Afbeelding 9 - Screenshot van camera, bewerkt met 'Motion Tracking'
De lijn die in beeld te zien is geeft de baan aan die de bal richting het doel heeft afgelegd. Het
programma heeft de positie van de bal met een bepaald tijdsinterval (frame voor frame) telkens
aangegeven. Door al deze punten heeft deze vervolgens een lijn getrokken. Elk punt in dit beeld
heeft een x- en een y-coördinaat.
Het is mogelijk de coördinaten van de punten op de lijn meteen naar Excel te converteren, zodat
ze meteen in een tabel zichtbaar zijn. Dit stuk tabel begint op het moment dat de bal wordt
geraakt en dus zijn baan begint. Er zijn 25 frames per seconde, dat betekent een tijdsinterval van
0,04 s. Er is besloten om voor het beginpunt t=0 te kiezen.
21
Het hele beeldscherm is in 1440 bij 1080 pixels uitgedrukt. Per pixel is nog tot drie decimalen
nauwkeurig de positie te bepalen. Hier is een voorbeeld van pixelcoördinaten van een schot uit
schietproef 1.
Frame X pixels Y pixels
1 125,875 187,977
2 153,219 210,723
3 187,82 233,57
4 214,023 256,301
5 236,324 274,863
6 255,523 289,535
7 271,891 302,367
Etc. Etc. Etc.
Tabel 1 - Pixelcoördinaten van schietproef 1
Wat ook van belang is, is dat de beelden van de camera’s die één schot hebben gefilmd precies
gelijk lopen in het programma. Dit moet op de milliseconde nauwkeurig gebeuren, omdat anders
uit één baan niet dezelfde punten vergeleken worden vanuit twee perspectieven. In dat geval
wordt er een andere balbaan berekend dan zoals deze in de werkelijkheid is. After Effects geeft
de mogelijkheid twee beelden apart of tegelijk te laten lopen. Zo kunnen eenvoudig twee
camerabeelden van bijvoorbeeld camera 1 en 2 gelijk aan elkaar worden gezet op het punt dat
de bal wordt geraakt en vanaf hier de beelden synchroon te laten lopen.
Microsoft Excel
Deze pixelcoördinaten moeten voor het beeldvlak wel aangepast worden. Omdat er met
vectoren gewerkt wordt, stellen we in ons beeldvlak een denkbeeldige oorsprong in het midden
van het beeldvlak. Zo wordt het beeldvlak een assenstelsel, met de pixelcoördinaten als x- en y-
waarden. After Effects doet dit eigenlijk ook, maar dan ziet het de linkerbovenhoek van het
scherm als oorsprong en lopen de coördinaten op voor x van links naar rechts en voor y van
boven naar beneden. Dit moet dus omgerekend worden. Hiervoor is Excel geschikt. Met een
beetje modelleren zetten we eenvoudig alle gegeven coördinaten om naar een aangepast
assenstelsel. Het vlak wordt normaal gesproken verdeeld van 0 tot 1440 x-pixels en 0 tot 1080
y-pixels. In ons assenstelsel lopen de x-pixels van -720 tot 720 en de y-pixels van -540 tot 540.
Eerst kopiëren we hiervoor alle coördinaten naar Excel en laten alle x-coördinaten
transformeren door:
– – –
Nu hebben we de juiste gegevens om de vectoren vanuit de camera’s berekenen.
22
Van Excel naar MATLAB
Om nu aan de hand van deze pixelcoördinaten vectoren te berekenen, is een ander programma
nodig. Hiervoor wordt gebruik gemaakt van MATLAB. Dit is een technische softwareomgeving,
waarin alle berekeningen en bewerkingen gebeuren op basis van vectorrekening. Dit is voor ons
erg aantrekkelijk, aangezien wij met vectoren werken. De volgende stap is de excel bestanden
importeren in MATLAB, waarmee veel berekeningen sneller en nauwkeuriger gemaakt kunnen
worden.
Van MATLAB naar vectoren
Als we de positie van de camera als steunvector neerzetten, en de coördinaten van ons punt op
het beeldvlak als richtingsvector is dat genoeg. MATLAB ziet dit punt namelijk al als een vector.
MATLAB is een programma waarin zelf geprogrammeerd moet worden, om het berekeningen te
laten uitvoeren. De steunvector is al bekend, de richting wordt gegeven door de vector door het
beeldvlak. We gebruiken Matlab om de eerder uitgelegde berekening uit te laten voeren die het
punt vindt dat het dichtstbij beide vectoren ligt. Het script dat deze berekening uitvoert is al
eerder uitgeschreven voor Matlab. Dit script hebben wij gebruikt.1
Als input van dit script zijn vier punten nodig. Een lijnstuk wordt gedefinieerd door twee punten
en deze vier punten definiëren dus onze al eerder genoemde lijn 1 en lijn 2. Als beginpunt van
lijn 1 hebben wij de positie van camera 1 gekozen, en voor lijn 2 de positie van camera 2. Het
eindpunt van lijn 1 ligt 50 meter verder op de richtingsvector van camera 1 en het eindpunt van
lijn2 ligt 50 meter verder op de richtingsvector van camera 2. Wij hebben het script zo
aangepast dat het automatisch deze punten invoert en itereert over het aantal frames. Zo krijgen
wij de coördinaten van alle losse punten waar de bal langs is gegaan.
Beeldcorrectie
Het probleem met de gekozen opstelling is dat zelfs kleine meetfouten tot ongewenste
afwijkingen leiden. Dit is op meerdere manieren tegen gegaan. Eén van deze manieren is een
correctie van de camerabeelden na opname. Dit is gedaan door te berekenen waar een bepaald
object zich op het beeldvlak zou moeten bevinden, en waar het zich op de opnames
daadwerkelijk bevindt. Het verschil hiertussen geeft de fout aan. Als object nemen we de bal,
waarvan bekend is waar deze zich bevindt. Om nu te achterhalen waar de bal zich zou moeten
bevinden op het beeldvlak wordt de lijn van de camera naar de bal genomen. Deze lijn l wordt
verkregen door
l =
Als we de camera op de y-as als voorbeeld nemen wordt dit:
l = (
) (
) = (
) (
)
1 Cristian Dima: Matlab conversie voor: The shortest line between two lines in 3D
http://paulbourke.net/geometry/pointlineplane/linelineintersect.m
23
Deze lijn snijden we met een vlak waarvoor geldt dat het parallel aan ons beeldvlak loopt. Dat
houdt voor de camera op de y-as in: alle vlakken waarvoor geldt dat x constant is (deze camera
filmt immers loodrecht op de y-as). Bijvoorbeeld het vlak x =1. We hoeven in de vergelijking
alleen naar de waarde van x te kijken. Dit geeft ons de volgende vergelijking:
Nu vullen we de gevonden in de originele vergelijking in.
(
) = (
)
Om nu de coördinaten op ons zelfgekozen beeldvlak te krijgen wordt dit vlak op dezelfde schaal
als ons beeldvlak gebracht. We laten de steunvector vanaf nu achterwege aangezien deze verder
niet van belang is. Het gaat namelijk alleen om de richting van de lijn die naar de bal toe loopt, en
waar deze het beeldvlak snijdt. De coördinaten van het punt waar dit gebeurt worden
meegeschaald. Zo is dus te bepalen waar de bal zich, in pixelcoördinaten, zou moeten bevinden
op ons beeldvlak. Dit gebeurt door de berekende waarden te vermenigvuldigen met de gegeven
afstand van het beeldvlak in pixels. Aangezien deze afstand door de x waarde wordt bepaald,
kunnen we dit gelijk doen omdat x in onze huidige vergelijking 1 is. Dit geeft
(
) (
)
De pixelcoördinaten van de locatie van de bal worden door deze richting gegeven. De y-waarde
van deze vector geeft het x-pixelcoördinaat en de z-waarde het y-pixelcoördinaat. De plek van de
bal zou in ons camera dus de pixelcoördinaten (17,-118) hebben. Door te vergelijken waar de bal
is waargenomen op het beeld en waar de bal op het beeld zou moeten zijn, kunnen we de
foutmarge inschatten.
Het herstellen van de fout van de camera’s
Bij de eerste twee metingen was de fout klein. Toen was de fout te herstellen door de formule
aan te passen waarmee we de pixelcoördinaten omzetten in vectoren. Stel dat de formule was:
( )
en er bleek achteraf dat de bal 20 pixels meer naar rechts had moeten liggen, dan was dit te
corrigeren door, in plaats van 520, 500 te gebruiken.
( )
Bij de derde meting bleek echter dat één camera een veel grotere afwijking had. Dit was de
camera op de y-as. Nu was deze methode niet meer te gebruiken. Ten eerste hebben we
uitgezocht hoeveel de camera fout gedraaid stond om de z-as. We hebben bepaald waar de
normaal door het midden van het beeldvlak het vlak snijdt dat wordt opgespannen boven de
achterlijn van het voetbalveld (x=36,3) als de camera perfect gepositioneerd zou zijn. Aangezien
de camera op de y-as staat en de lijn loodrecht de y-as snijdt, is alleen de x-waarde anders tussen
ideaal en gefilmd beeld. De coördinaten van het punt a op dit vlak zijn bekend.
24
(
)
Vervolgens bepalen we het snijpunt van de gefilmde normaalvector met hetzelfde vlak. We
kijken enkel naar de x-waarde. Hieronder staan de x-pixelwaardes van de linkerpaal, het midden
van het beeld en de rechter paal. We weten dat het doel in werkelijkheid 7,45 meter lang is. Dit
betekent dat 1140-635=505 pixels overeenkomen met 7,45 meter. Het midden van het beeld ligt
op 720 pixels op de x-as.
Afbeelding 10 - een deel van het scherm in Adobe After Effects
Het kruisje bij x=720 geeft het midden van het hele beeld aan. De afstand tussen het midden van het beeld en de linkerpaal is
m
Het verschil tussen de snijpunten van de ideale normaal en de gefilmde normaal met het vlak
x=36.3, wordt gegeven door de afstand van de het snijpunt van de ideale normaal tot de
linkerpaal op te tellen bij de afstand van de linkerpaal tot het snijpunt van de gefilmde normaal.
Dit geeft een afstand van 4.72 meter. Dit geeft ons de volgende figuur.
Afbeelding 11
De tangens wordt gegeven door de overstaande zijde gedeeld door de aanliggende zijde, dus
delen we de afstand tussen beide snijpunten (overstaande zijde) en delen deze door de afstand
tussen de camera en de x-as en nemen hier de boogtangens van.
(
) =
We weten nu hoeveel onze camera gedraaid stond. Om deze draaiing te herstellen doen we eerst
alsof de camera wel goed stond. We stellen de vectoren op volgens de al eerder genoemde
formules, maar zodra we onze vectoren hebben draaien we deze 7,4 graden terug, zodat het nu
de vectoren zijn die door de gedraaide camera gemeten zijn. Met deze vectoren rekenen we
25
door. Deze draaiing wordt toegepast met behulp van een rotatiematrix. De standaard
rotatiematrix (R) voor een rotatie rond de z-as ziet er als volgt uit.
[
]
Wij vullen nu hier onze in. Dit geeft ons de volgende matrix (M):
[
]
Dit is de matrix die onze gevonden vectoren naar het goede beeldvlak brengt. Om het
omgekeerde te doen nemen we de inverse van onze matrix M.
[
]
[
]
Door de richtingen die deze camera geeft met deze matrix(N) te vermenigvuldigen herstellen we
de draaiing van de camera.
Afbeelding 12
Deze correctie na afloop van de metingen hebben we ook toegepast op de andere draaiing. Zo zal
de camera op de y-as ook een kleine draaiing om de y as als correctie nodig hebben, en via
eenzelfde methode hebben we de beelden van de camera op de x-as gecorrigeerd. Voor de
draaiing om de y-as hebben we dezelfde methode gebruikt, maar dan met de lat als referentie
punt.
Dankzij deze methode kunnen meetfouten achteraf altijd nog hersteld worden, als er maar
genoeg referentie punten zijn waarvan de exacte positie bekend is. Er kan altijd voor een
assenstelsel worden gekozen waarbij één van de camera’s al loodrecht op één as staat. Met deze
methode kunnen de beelden van de andere camera zo gemanipuleerd worden dat deze
loodrecht op de andere as komen te staan. Dit zorgt ervoor dat onze methode universeel
toepasbaar is, mits er genoeg referentie punten zijn en de locatie van beide camera’s bekend is.
Ook is het niet noodzakelijk om de opstelling gelijk perfect neer te zetten aangezien dit achteraf
te herstellen is.
26
Hoofdstuk 4: Balbaanreconstructie
Wanneer we van genoeg punten (in hoofdstuk 2 – ‘Puntreconstructie’ bekend als Pc) uit de baan
de coördinaten weten, kan de balbaan gereconstrueerd worden. Dat gebeurt met behulp van
onder andere de kleinste-kwadraten methode en lineaire regressie.
De kleinste-kwadratenmethode
Wij hebben (tot onze spijt) geen beschikking tot dure high-speed camera’s, lasertechnologie,
infraroodcamera’s of Hawk-Eye2 systemen. De camera’s die in ons onderzoek worden gebruikt
zijn simpeler en beperkter in de functies. Veel gebeurt handmatig. Zo zal de precieze afstelling
van de camera’s altijd enkele centimeters afwijking hebben, wat zijn terugslag heeft op de
beelden die de camera’s ons geven. Dit is onvermijdelijk. Deze nauwkeurigheidsfoutjes kun je
niet voorkomen, maar je kunt ze wel zo veel mogelijk beperken. Bij het filmen wordt geprobeerd
alles zo netjes mogelijk uit te voeren, maar ook in de wiskunde is hier iets aan te doen. Namelijk
met de Kleinste-kwadraten-methode en Lineaire Regressie. In eigen woorden zullen we
proberen de methodes uit te leggen. Deze methodes zorgen ervoor dat, bij kennis van meerdere
punten in een vlak die niet op een
perfecte lijn liggen, de rechte kan
worden bepaald die hier het best bij
past. Deze rechte zal dus niet
precies door alle punten gaan.
De rechte die hier wordt gezocht is
van de vorm:
In het vlak bevindt zich een n aantal
punten:
De afwijking tussen punt (xi,yi) in
het vlak en deze rechte noemen we
voor het gemak di. Dit is het verschil
tussen de y-waarde van het punt en de y-waarde van de rechte voor xi (let op: de i in dit stuk
gaat niet over imaginaire getallen) :
–
De gebruikte maat voor de afwijking is de som van de kwadraten van deze verschillen:
–
Wat wordt gezocht is, wanneer de punten zijn gegeven, een polynoom met als graad m, door
deze punten waarvoor de afwijking minimaal is. Als deze polynoom door alle punten gaat, dan
geldt , kunnen we de y-waarden als volgt uitdrukken in x:
2 Het Hawk-Eye systeem is een computersysteem dat wordt gebruikt om balbanen te volgen bij onder andere tennis.
Afbeelding 16
27
………………………………………….
En zodra we dit zien denken we meteen aan matrices. We stellen een matrix M op.
y1
y2
...
...
yn
=
1 x1 1 x1 2 ... x1 m
1 x2 1 x2 2 ... x2 m
.. .. .. .. ..
.. .. .. .. ..
1 xn 1 xn 2 ... xn m
*
c0
c1
..
..
cm
Simpeler kun je schrijven: . We willen dus dat de afwijking di zo klein mogelijk is.
oftewel dat het verschil, , zo dicht mogelijk bij nul ligt. Om dit te achterhalen moeten
we een c zoeken die hiervoor zorgt. We zoeken in de functie een a en een b. Daarom ziet deze c
er ook uit als een vector, .
Wanneer is dit het geval? Als de verschilvector loodrecht staat op de kolomruimte van M. Een
kolomruimte ontstaat wanneer de kolommen van een m bij n matrix een deelruimte opspannen
van m. Het inproduct moet gelijk zijn aan 0. Dit ziet er als volgt uit:
Met MT wordt in dit geval bedoeld: matrix M, gespiegeld om zijn hoofddiagonaal
Voorbeeld:
Als matrix A = [
], dan is AT = [
]
Wanneer we de vergelijking vereenvoudigen:
–
Aangezien dit voor elke cT moet gelden volgt:
–
28
Nu kiezen we voor de polynoom met m=1. Het gaat immers om een rechte lijn, met waarden a en
b om te berekenen voor de lijn met de minste afwijking op van de punten in het vlak. Er geldt:
[
], [
], [
]
Substitutie in MT M c = MT y geeft:
[
] * [
] [
] = [
] * [
]
Oftewel
[
] [
] = [
]
[
] = [
]
Het begint er steeds overzichtelijker uit te zien. Wat overblijft zijn slechts twee
stelselvergelijkingen die opgelost moeten worden.
Omgeschreven staat er dan
Lineaire Regressie
Om de formule van de lijn daadwerkelijk te vinden, maken we gebruik van Lineaire Regressie.
Dit zorgt ervoor dat we een goede formule krijgen waarmee a en b snel te berekenen zijn. Hoe
gaan we te werk? Ten eerste moeten we a of b zien weg te werken uit de vergelijkingen, want
met twee variabelen willen we liever niet werken. We nemen hiervoor de eerste van de twee
overgebleven vergelijkingen.
29
n is hier het aantal gegeven punten in het vlak. De som van b staat gelijk aan het aantal punten
vermenigvuldigd met b. Nu delen we de vergelijking door n. Wat zien we dan? De som van alle y-
waarden gedeeld door het aantal punten, en a maal de som van alle x-waarden gedeeld door het
aantal punten. Dit zijn de gemiddeldes. Komt dat even goed uit. De gemiddeldes noteren we als
volgt:
en
Nu drukken we meteen b uit in a:
En invullen het in de andere vergelijking in:
Nu hebben we voor zowel a als b een formule. De formule van a kan echter nog wel netter
geschreven worden. Na wat knip en plakwerk ziet dat er zo uit:
en
Voorbeeld:
Gegeven zijn vier punten in het vlak: (1,5), (2,6), (3,9) en (4,10). Vind de rechte met de minste
afwijking tot deze punten.
Oplossing: de gemiddelde x-waarde is gelijk aan 10/4= 2,5. De gemiddelde y-waarde is
30/4=7,5.
= 1,9 en
De formule van de lijn is dus:
30
Onze balbanen
Met deze methodes is het mogelijk een balbaan te reconstrueren. Daarvoor moet met behulp van
lineaire regressie en de kleinste kwadraten methode de best passende lijn door de Pc’s gevonden
worden. Hiervoor is het echter eerst nodig te bepalen in welke vorm de formule moet zijn die
hiervoor gebruikt wordt.
Onze wiskundige werkhypothese, is dat de meest belangrijke effecten goed door een
derdegraads functie worden weergegeven.Wij gebruiken drie derdegraads functies. Eén die de
beweging in het xy vlak beschrijft, één die dit in het yz vlak doet, en nog één voor het zx vlak.
Wat bekend is over de bal is dat de baan in het xz vlak eruit zal zien als een afgeplatte parabool.
Zonder luchtweerstand zou de bal immers een perfecte parabool afleggen. De luchtweerstand
remt de bal echter af waardoor dit geen perfecte parabool vormt. Deze afgeplatte parabool kan
met een derdegraads polynoom weergeven worden. De beweging in het xy vlak representeert
afwijking die door effect aan de bal wordt meegegeven. Ook hiervoor is een derdegraads-
polynoom erg geschikt.
De banen zijn in parametervergelijking gegeven, omdat de functie zich in de driedimensionale
ruimte bevindt. Zo zijn er dus drie vergelijkingen voor x, y en z als functie van t die samen een
balbaan beschijven. MATLAB is in staat een driedimensionale balbaan te geven in vergelijkingen
en met een grafische weergave. We kunnen opgeven in wat de graad moet zijn van de
polynomen van de parametervergelijking. De vergelijking ziet er dan uit als:
Om deze vergelijkingen zelf op de stellen is veel rekenwerk vereist. Daarom laten we de
balbanen door MATLAB berekenen. MATLAB gebruik vergelijkbare methodes (kleinste
kwadratenmethode, lineaire regressie), maar is in staat tot hogere graden van functies te
rekenen, is sneller dan wij en maakt geen rekenfouten.
Voorbeeld
Hier is een (door MATLAB) berekende balbaan van een schot. De parametervergelijking van
deze baan is:
31
In grafische weergave:
Hier zijn twee afbeeldingen die de driedimensionale balbaan van het voorbeeldschot weergeven.
In afbeelding 15 zijn alle assen te zien. Hier is de verplaatsing in de hoogte (z-as) goed te zien,
met links de x-as en rechts de y-as. In afbeelding 16 is alleen het xy-vlak weergegeven. Hierop is
een (kleine) afbuiging te zien in de baan. Dit is de curve van de bal.
Grafiek 1 Grafiek 2
32
Hoofdstuk 5: Rotatie, snelheid en curve
We hebben als aanname dat de factor die ervoor zorgt dat de bal niet in een rechte lijn gaat de
rotatie van de bal is in combinatie met de snelheid van de bal. Deze aanname is gebaseerd op
eigen voetbalervaring. We verwachten dat de rotatie en de snelheid van deze rotatie de mate
bepalen waarin de bal afwijkt van een rechte en dat de snelheid van de bal dit ook zal
beinvloeden. Voor de curve van de balbanen ligt de focus op het xy-vlak. De afbuiging van de bal
in de hoogte wordt buiten beschouwing gelaten, omdat we dit minder interessant vinden. We
denken dat de hoogte minder beïnvloed wordt door de rotatie dan de afbuiging in het xy-vlak, en
dus voor ons moeilijker is te onderzoeken.
Rotatie
De rotatie van de bal wordt in twee componenten onderverdeeld. Ten eerste is er de
rotatiesnelheid. Dit houdt in hoe vaak de bal per seconde in zijn geheel om zijn as draait. Dit
wordt met Adobe After Effects bekeken door simpelweg één van de stippen te volgen en voor
een bepaalde tijdsduur te tellen hoe vaak deze in beeld voorbij komt. Welke stippen dit zijn
maakt niet uit, het kan per schot verschillen welke stippen het best te volgen zijn in beeld. We
nemen aan dat de rotatiesnelheid en de rotatierichting gelijk blijven tijdens het traject. Dit maakt
het beschouwen van de rotatie eenvoudiger, omdat zo op elk moment in de balbaan de
rotatiesnelheid te bepalen is, door het aantal rotaties te delen door de tijdsduur. Dit geeft de
waarde van de rotatiesnelheid in rotaties per frame (Rts/f).
De andere component is de rotatierichting. Deze is moeilijker te bepalen. De rotatie van de bal
vindt plaats rond één speciefieke as. Elk punt op de bal draait in een vlak dat loodrecht op deze
as staat. Dit zorgt ervoor dat deze as te vinden is als het vlak waarin één van de punten zich
beweegt bekend is. Als we dit vlak beschrijven met twee lijnen,
waarbij v1 en v2 een basis vormen voor dit vlak, geldt dat de as loodrecht op beide lijnen moet
staan. De gezochte as vinden we met behulp van het kruisproduct. Het kruisproduct in een
driedimensionale ruimte wordt gedefinieerd door de volgende 3 regels:
1. a×b staat loodrecht op a en b
2. a, b en a×b vormen een rechtshandig assenstelsel (zin van a×b );
3. |a×b|=|a| |b| sin(θ) (absolute waarde van a×b), waarin θ de hoek tussen a en b is.3
Volgens de eerste regel staat de vector loodrecht op v1 en v2. De steunvector wordt nog gezocht.
Door een assenstelsel te kiezen dat het middelpunt van de bal als oorsprong heeft ontwijken we
deze steunvector. Omdat de rotatie-as altijd door de oorsprong zal gaan is de steunvector
overbodig. Nu is het dus mogelijk om de rotatie-as te vinden indien we twee lijnen weten in het
rotatievlak. Om deze lijnen te vinden zijn drie punten in dit vlak nodig.
Het probleem met het vinden van deze punten is dat we een driedimensionaal voorwerp (de bal)
3 http://mathworld.wolfram.com/CrossProduct.html
33
in twee-dimensies gefilmd hebben. Om nu uit deze twee dimensionale beelden drie
driedimensionale coördinaten te halen moeten we ervoor zorgen dat bij elk van deze
coördinaten de x, y of z waarde 0 is. Daarvan uitgaande hebben we drie mogelijkheden. x=0, y=0
of z=0. Dit geeft ons drie punten die we kunnen gebruiken met een oorsprong in het midden van
de bal.
Afbeelding 17 - 3d-bal-assenstelsel, de y-as loopt loodrecht het papier in
Op de rand van de bal in afbeelding 17 weten we dat y gelijk is aan 0. Van elk punt op de rand is
het eenvoudig de exacte coördinaten te bepalen. De waarden van x en z zijn te bepalen met
behulp van pixelbepaling (hierover later meer). Met deze methode zijn we in staat om uit een
tweedimensionaal beeld driedimensionale coördinaten te halen. Van de punten op de x-as is
bekend dat z gelijk is aan 0 en van de punten op de z-as weten we dat x gelijk is aan 0.
We volgen hiervoor een stip op de bal (zie Hoofdstuk 3 – ‘’Schietproef 3’’) en kijken waar deze,
aan de rand van de bal, in beeld komt en waar deze de z-as passeert. Met onze beelden is het
makkelijker x=0 te gebruiken dan z=0. Elke stip draait in zijn eigen rotatievlak. Nu is het een
kwestie van handwerk. Eerst wordt frame voor frame bekeken welke stip het best te volgen is.
Vervolgens zijn over een tijdsbestek van een halve rotatie de frames losgemaakt als foto’s. Nu
hebben we een aantal foto’s waarop we één stip zien verplaatsen. Ten eerste is op elke foto de
voetbal uit de foto geknipt. Deze geknipte voetballen zijn zo op elkaar geplaatst en zo geschaald
dat ze perfect overlappen. Vervolgens is uit elke bal het te volgen vlak geknipt. Deze vlakken zijn
vervolgens allemaal op één bal afgebeeld.
34
Afbeelding 18
De rode stippen bestaan uit gemeten middelpunten van de gevolgde stip en geconstrueerde
punten. Het is duidelijk te zien hoe de stip zich over de bal beweegt. De stip is echter niet precies
aan de zijkant of op de z-as gefilmd. Dit betekent dat we een voorspelling zullen moeten doen
over waar de stip zich zal bevinden. Dit is goed te doen doordat de baan die de stip aflegt zeer
goed te zien is. Het blijft echter een kleine onnauwkeurigheid. Omdat er voor ons geen andere
methode voor handen is zullen we deze methode hanteren. Als eerste moeten deze punten
bepaald worden in twee dimensies. Dit gebeurt door te kijken naar de pixelcoördinaten van de
afbeeldingen. Dit werkt in principe hetzelfde als bij de pixelcoördinaten in After Effects. Elke
pixel heeft een unieke x- en y-waarde in een assenstelsel dat linksboven in de foto zijn
oorsprong heeft. We bepalen de pixelcoördinaten van het middelpunt om vervolgens de best
passende cirkel om de bal heen te trekken. Dit gebeurt omdat de bal net niet precies rond is op
de foto’s. Tijdens de opnames is voor een zo klein mogelijke sluitertijd gekozen zodat de
vervorming zo laag mogelijk zou zijn. De sluitertijd is nooit oneindig klein te krijgen dus zal de
bal altijd licht vervormd waargenomen worden.
Dan wordt de afstand in pixels van de rand van de cirkel tot het centrum van de bal gemeten. Dit
is de straal van de bal in pixels. Vervolgens worden de pixelcoördinaten van de punten A, B en C
gemeten. De punten A en C liggen op de plek waar de stip verschijnt en verdwijnt, hier is y
immers 0. Het punt B ligt op de z-as. Hier is x gelijk aan 0. Omdat we ons driedimensionale
assenstelsel zelf gekozen hebben kunnen we ervoor kiezen de straal van de bal in dit
assenstelsel gelijk te maken aan 1. Onze pixelcoördinaten moeten nog omgezet worden naar
coördinaten in dit driedimensionale assenstelsel, door van al onze gemeten pixelwaardes van A,
B en C eerst de pixelcoördinaten van het middelpunt van de bal af te trekken. Hierdoor
verplaatsen we de coöordinaten naar een assenstelsel met de oorsprong gelegen in het midden
35
van de bal. Vanaf nu spreken we over de vectoren , in plaats van over de punten A, B en
C. Vervolgens normaliseren we deze vectoren(de vectoren liggen immers op de rand van de bal
en moeten dus norm 1 hebben). We hebben nu drie vectoren in een tweedimensionaal
assenstelsel waarin onze voetbal straal 1 heeft (de bal vormt nu de eenheidscirkel). Nu moeten
deze vectoren omgezet worden naar ons driedimensionale assenstelsel. Voor de vectoren a en c
is dit simpel. We hebben a en c immers zo gekozen dat y=0. Van deze vectoren hebben we dus
onze drie coördinaten. Van vector b weten we de z- en x-waarde.
In de normale eenheidscirkel met assen x en y wordt de x-coördinaat van een punt gegeven door
de cosinus van de hoek en de y coördinaat door de sinus van de hoek. In ons geval zijn dit
respectievelijk de y- en z-coördinaat. De z-waarde is ons echter al bekend. Als we de arcsinus
nemen van de z-waarde vinden we hoek t (zie afbeelding 19). Vervolgens nemen we de cosinus
van t en we hebben onze y-waarde. Nu hebben we ook ons derde coördinaat voor vector b. Nu
deze drie punten gevonden zijn kunnen we simpel het draaiingsvlak beschrijven. Omdat we
weten dat niet gelijk zijn kunnen we twee willekeurige vectoren van elkaar aftrekken en
dit als de ene vector voor ons vlak nemen, en met
twee andere vectoren hetzelfde doen.
Bijvoorbeeld . Elk punt in ons
vlak is nu te schrijven als
waarbij elk punt een uniek en paar heeft .
Het is echter niet het vlak, maar de draaiingsas
die we zoeken. Deze is nu eenvoudig te krijgen
door het kruisproduct te nemen van de zojuist
gekozen vectoren zoals al eerder is uitgelegd.
Deze vector is te ontbinden in een x- ,y- en z-
component. Aangezien we de vector zo
gedefiniëerd hebben dat hij loodrecht op het
draaiingsvlak staat, staat de z-as loodrecht op de
draaing van de bal in het xy-vlak, de x-as
loodrecht op de draaing in het yz-vlak en de y-as
loodrecht op de draaing in het xz-vlak.
Nu deze vector gevonden is hebben bestaat nog één probleem. Ons nieuwe assenstelsel ligt
anders georiënteerd dan ons oorspronkelijke assenstelsel. De z-as staat wel nog steeds
loodrecht omhoog. We zijn er hierbij vanuit gegaan dat we de bal steeds loodrecht van voren
hebben gefilmd. De z-waarde zal niet veranderen als we de vector van ons bal-assenstelsel naar
ons oorspronkelijke assenstelsel halen. Ons onderzoek is enkel gericht op de rotatie in het xy-
vlak. Wij hebben daardoor alleen de z-component van onze draaiingsvector nodig en kunnen de
x- en y-component van de vector laten vervallen.
Afbeelding 19
36
Basistransformatie
Als je ook de x- en y-as van het bal-assenstelsel in dezelfde richting wil krijgen als die van het
orginele assenstelsel, zal er een basistransformatie nodig zijn. Omdat we ervan uitgaan dat de z-
as gelijk is gebleven zal deze basistransformatie een draaiing rond deze as voorstellen. Om de
hoek te bepalen waarover geroteerd moet worden is het voldoende te weten in welke mate één
van de assen gedraaid moet worden. In ons geval zullen wij onderzoeken met welke hoek de x-as
van het bal-assenstelsel gedraaid moet worden, zodanig dat deze parallel aan het assenstelsel
komt te liggen van het assenstelsel van de balbaan (de y-as draait met dezelfde hoek mee).
Daarvoor moeten we eerst bepalen hoe de x-as van ons bal-assenstelsel zich bevindt in het
originele assenstelsel. In ons originele assenstelsel wordt de richting van de bal in het xy-vlak
voorgesteld als de afgeleide. We weten op welk moment we onze stip hebben gevolgd, wat
ervoor zorgt dat we de richting kunnen bepalen die bal hier had. Deze richting zal gegeven
worden door de afgeleide in het xy-vlak:
Deze richting zal per frame een klein beetje verschillen, maar door deze richtingen te middelen
komen we tot een goede schatting. Deze uitkomst bepaalt de richtingscoëfficiënt (p) van de lijn
waarvan we aannemen dat deze parallel loopt aan de x-as van ons bal-assenstelsel. Door dit te
zeggen gaan we ervan uit dat er altijd loodrecht op de richting van de bal is gefilmd. Dit is een
gedurfde aanname, maar deze is noodzakelijk omdat wij de locatie van de derde camera niet
exact weten. In hoofdstuk 7 - ‘Discussie en Conclusie’ zullen wij er op in gaan hoe dit te
verbeteren is als de exacte locatie van de derde camera wel bekend is.
De locatie van de bal doet er voor onze draaiingsvector niet toe, we kunnen q weglaten. Nu
hoeven we alleen nog te bepalen met welke hoek (α) px gedraaid moet worden om op de x-as
van ons oorspronkelijke assenstelsel te komen liggen. De hoek tussen px en de x-as noemen we β
en is gelijk aan:
(
)
Indien p>0, dan geldt dat α=β en de gezochte
draaiingshoek is. We vermenigvuldigen dan onze
draaiings-as met rotatiematrix R.
R=[
]
Als p<0, dan geldt α≠β. Als de x-as met β gedraaid
wordt, volgt de lijn . We willen echter de andere Afbeelding 19
37
kant op draaien. Dit kan op twee manieren. We kunnen zeggen dat (in radialen) of
we draaien met de klok mee en dan geldt Het is echter makkelijker om eerst de
rotatiematrix op te stellen die het oorspronkelijke assenstelsel naar het bal-assenstelsel draait.
Dit wordt gegeven door rotatiematrix Q.
[
]
Omdat de inverse matrix hiervan de tegengestelde bewerking uitvoert levert de inverse matrix
van Q ons de rotatiematrix met draaihoek α op. Dit noemen we draaiingsmatrix M (=Q-1).
[
]
Nu roteren we de vector die onze draaiings-as beschrijft om de z-as met hoek α met behulp van
M en we hebben onze draaiings-as in het oorspronkelijke assenstelsel.
Nu zijn de rotatiesnelheid en de rotatierichting bepaald. Deze kunnen nog gebundeld worden tot
één vector, namelijk door de lengte van de draaiingsvector afhankelijk te laten zijn van de
rotatiesnelheid. Hoe sneller de bal draait, hoe groter de draaiingsvector is. Wij zullen de vector
op onze draaings-as als lengte de draaiingsnelheid in rotatie per frames geven. Daarom wordt de
draaiings-as eerst genormaliseerd door deze door zijn eigen lengte te delen. Deze vector
vermenigvuldigd met de rotatie geeft de uiteindelijke rotatie in de x-,y- en z-richting weer.
Bovenaanzicht bal-assenstelsel
en orginele assenstelsel
38
Snelheid van de bal
Los van de rotatiesnelheid staat de snelheid van de bal zelf in zijn baan. Omdat de
driedimensionale balbaan bestaat uit een parametervergelijking van x=x(t), y=y(t) en z=z(t) kan
per component (x,y,z) de snelheid van de bal berekend worden op elk tijdstip. Dit is eenvoudig
te doen door de functies af te leiden naar de tijd. Derdemachtsfuncties die de plaats van de bal
weergeven worden zo kwadratische functies die de snelheid weergeven. Dit toont meteen aan
dat de snelheid niet constant is. Hij is namelijk afnemend voor x (door de luchtweerstand) en
parabolisch voor z (de snelheid neemt eerst af zolang de bal stijgt in hoogte en neemt toe zodra
hij daalt). Voor de y- waarde ligt het ingewikkelder, omdat deze beïnvloed wordt door de curve.
De afwijking vindt namelijk plaats op de y-as. Bij deze methode komt geen handwerk kijken,
omdat MATLAB dit allemaal kan uitrekenen.
De snelheid van de bal is per moment voor de x,y en z richting te bepalen door de
parametervergelijking te differentiëren en t in te vullen voor het moment waarop je de snelheid
wilt weten. Om echter de gemiddelde snelheid van de gehele balbaan te bepalen is een andere
methode nodig. De gemiddelde snelheid van de hele balbaan wordt gegeven door de totaal
afgelegde afstand te delen door de tijd die daarvoor nodig is. Deze afgelegde afstand berekenen
we met de formule voor de booglengte.
In ons geval gaat het over een driedimensionale balbaan, tussen het interval De
booglengte van onze balbanen worden dan gegeven door
∫√(
)
(
)
(
)
anders geschreven,
∫√( ) ( )
( )
Daarna is de gemiddelde snelheid eenvoudig uit te rekenen met
39
Curve
We veronderstellen dat de curve van de bal wordt bepaald door de rotatie in combinatie met de
snelheid van de bal. Hóe dit wordt bepaald is door ons te onderzoeken. Er wordt in dit
onderzoek alleen naar de afbuiging in het xy-vlak gekeken. De hoogte z wordt dus weggelaten.
Om de mate waarin een bal zijn curve maakt te beschouwen, maken we gebruik van de tweede
afgeleide van deze functie in het xy-vlak. Waar de afgeleide van een functie de
richtingscoefficient geeft (hoezeer de bal van richting verandert), geeft de tweede afgeleide weer
hoe deze richtingsverandering verandert. De curve is immers de mate waarin de balbaan afwijkt
van een rechte lijn. We hebben nu de positie van de bal in parametervergelijking.
De richting in het xy-vlak wordt gegeven door
De afgeleide van de richting, de dubbele afgeleide dus wordt:
Om nu de curve (c) te bepalen willen we weten hoeveel de bal in totaal uitgeweken is. Dit is dus
in welke mate de richting van de bal verandert is tussen het begin en het eindpunt. Dit wordt
weergegeven door de integraal van de tweede afgeleide tussen het begin en het eindpunt van de
balbaan.
∫
∫
Omdat dit de totale curve bepaald, hangt deze totale curve ook nog af van de lengte van de
balbaan. We willen een vaste eenheid voor al onze banen, zodat we deze kunnen vergelijken
delen we deze totale curve nog door de lengte van de balbaan.
∫
Dit wordt onze maat voor de curve.
40
Correlatie
Om te ontdekken of er een lineair verband bestaat tussen de rotatie (richting én snelheid), de
snelheid van de bal en de curve maken we gebruik van een correlatie. Uit de correlatie volgt een
correlatiecoëfficient, wat een cijfer geeft tussen -1 en +1. Een correlatiecoêfficient van 1 betekent
een perfecte positieve samenhang tussen de resultaten, -1 betekent een negatieve samenhang en
0 betekent geen lineaire samenhang. Hoe verder dit getal van 0 af zit, hoe groter de samenhang
is.
Afbeelding 20
Afbeelding 20 laat dit nog beter zien ( =correlatie). De correlatiecoëfficiënt wordt berekend met
een formule, namelijk:
∑
√∑ ∑
Waarbij x en y de gebruikte grootheden zijn en staat voor de gemiddelde waarde van alle x. De
correlaties van onze eigen waarden hebben we op drie manieren gedaan. Ten eerste de
correlatie tussen rotatie en curve om te controleren of hier een lineair verband tussen bestaat.
Vervolgens is ook nog de correlatie tussen de rotatie gedeeld door de snelheid en de curve
berekend. Als laatste is de correlatie tussen de curve en de rotatie gedeeld door de snelheid in
het kwadraat berekend.
41
Hoofdstuk 6: Resultaten
Hieronder wordt de correlatie tussen de curve en de rotatie beschreven. Er zijn drie varianten
die verschillen in het aantal waardes die genomen zijn om de correlatie te berekenen. Dit is
gedaan om een indicatie te geven van onze resultaten en meetfouten. Zie Bijlage 3 voor de
volledige tabellen.
Rotatie en curve
aantal schoten Correlatie
9 0.37971873
15 -0.166967804
18 -0.157476815
Tabel 2 - Correlatie tussen rotatie en curve
Rotatie/snelheid en curve
aantal schoten Correlatie
9 0.586800648
15 0.612843569
18 0.61432142
Tabel 3 – Correlatie tussen rotatie gedeeld door snelheid en curve
Rotatie/snelheid2 en curve
aantal schoten Correlatie
9 0.646804285
15 0.570209553
18 0.560465547
Tabel 4 - Correlatie tussen rotatie gedeeld door snelheid in het kwadraat en curve
42
Voor een nog duidelijkere weergave volgen hier twee driedimensionale grafieken met op de x-as
de rotatie, de y-as de snelheid en de z-as de curve.
Grafiek 3 – Rotatie, snelheid, curve
Grafiek 4 f(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p30*x^3 + p21*x^2*y + p12*x*y^2 + p03*y^3 Coefficients (with 95% confidence bounds): p00 = 26.13 (-246.4, 298.7) p10 = 182 (-1768, 2132) p01 = -111 (-913.8, 691.8) p20 = -1805 (-1.302e+004, 9415) p11 = 97.38 (-2583, 2778) p02 = 121.1 (-738.9, 981.1) p30 = 6427 (-3.335e+004, 4.62e+004) p21 = -810.5 (-7764, 6143) p12 = 65.82 (-1937, 2068) p03 = -50.45 (-341.3, 240.4) Goodness of fit: SSE: 0.4829 R-square: 0.6995 Adjusted R-square: 0.3615 RMSE: 0.2457
43
Grafiek 5 – Rotatie, snelheid2, curve
Oppervlakte: Linear model Poly33: f(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p30*x^3 + p21*x^2*y + p12*x*y^2 + p03*y^3 Coefficients (with 95% confidence bounds): p00 = -5.863 (-98.57, 86.84) p10 = 297.8 (-1365, 1960) p01 = -17.95 (-197.8, 161.9) p20 = -2565 (-1.573e+004, 1.06e+004) p11 = 55.84 (-922.2, 1034) p02 = 16.45 (-199.6, 232.5) p30 = 7732 (-3.3e+004, 4.846e+004) p21 = -573.7 (-4745, 3598) p12 = 61.57 (-761.1, 884.2) p03 = -9.937 (-84.52, 64.64)
Goodness of fit: SSE: 0.4963 R-square: 0.6912 Adjusted R-square: 0.3437 RMSE: 0.2491
44
Interpretatie resultaten
Onze resultaten zijn op te splitsten in twee delen. Het eerste deel zijn de tabellen, welke ons niet
vertellen wat de relatie tussen de rotatie/snelheid en de curve is, maar wel of er een verband is
en hoe betrouwbaar dit verband is. De twee geplotte oppervlakken vertellen ons wat het
benaderde verband is tussen de rotatie, de snelheid en de curve.
Ook kunnen wij met behulp van de correlatie het verschil tussen de betrouwbaarheid van de
verschillende schoten inschatten. Zo kunnen we achterhalen of er nog tussentijdse meetfouten
zijn gemaakt bij de schoten. Hiermee bedoelen wij dus niet de meetfouten die bij alle schoten
hetzelfde zijn, maar meetfouten die uniek zijn voor een bepaald schot. Doordat we de correlatie
van meerdere groepen hebben berekend waarbij een deel van de gegevens hetzelfde is, en
waarbij een deel van de gegevens nieuw is kunnen we aan het verschil in correlatie tussen deze
groepen zien in welke mate er tussentijdse meetfouten zijn gemaakt. Als derde kunnen we zien
of het meenemen van snelheid in relatie tot de curve een positief effect heeft op de corelatie. Er
zijn telkens drie verschillende correlaties berekend. Eén waarbij alleen naar de rotatie gekeken
is, één waarbij de rotatie door de snelheid gedeeld werd en één waar de rotatie door de snelheid
in het kwadraat is gedeeld. Deze geven allemaal een eigen correlatiecoëfficiënt. De coëfficiënt
die het verst van nul ligt geeft het duidelijkste verband aan. Daaruit kunnen we afleiden of
rotatie/snelheid een betere indicator is van de te verwachten curve.
Ten eerste kijken we of er überhaupt een verband aanwezig is. Als we kijken naar de
correlatiecoëfficiënt van de rotatie t.o.v. de curve lijkt er nauwelijks een verband te zijn. Zodra
snelheid meegerekend wordt zien we dat de correlatiecoëfficiënt toeneemt. Het is dus duidelijk
dat de snelheid meegenomen moet worden in ons onderzoek naar de curve. Verder lijken er
behoorlijke fouten tussen de verschillende metingen te bestaan wanneer we de
correlatiecoëfficiënten bij de eerste drie schoten beschouwen. Zodra de snelheid echter wordt
meegenomen worden de verschillen tussen de correlaties een stuk kleiner. Aangezien we
hiervoor al geconcludeerd hadden dat de snelheid meegenomen moet worden om een verband
te vinden, kunnen we voor de benadering van onze meetfouten afgaan op de waardes waarbij de
snelheid meegenomen is. Wanneer er alleen naar deze waardes gekeken wordt zien we dat de
meetfouten meevallen. Dat er een klein verschil is in correlatiewaarden is alleen maar logisch
aangezien we van te voren al wisten dat er door bepaalde aannames meetfouten in het
onderzoek zouden sluipen. Voor onze definitieve correlatie kijken we naar de meting waarbij
alle schoten meegerekend zijn. Hieruit blijkt dat de rotatie gedeeld door de snelheid de beste
correlatiewaarde oplevert.
Voor een duidelijkere weergave van het verband tussen de rotatie, de snelheid en de curve te
vinden hebben we onze waardes in een driedimensionale grafiek gezet. Hierbij staat de rotatie
op de x-as, de snelheid op de y-as en de curve op de z-as. Aan elk bekend koppel rotatie-snelheid,
is de curve toegevoegd. Vervolgens hebben we MATLAB het best passende oppervlak hier
doorheen laten bepalen. Dit vlak wordt bepaald door twee derdegraadspolynomen. Deze
worden door middel van de kleinste-kwadraten methode en lineaire regressie gevonden. Dit
gebeurt op dezelfde manier als bij de balbaan, alleen gebeurt het nu in een driedimensionaal
assenstelsel en is de uitkomst geen baan maar een vlak. Dit vlak stelt ons in staat ruwweg de
curve te voorspellen als de rotatie en snelheid gegeven zijn. Uit de waardes die de “juistheid” van
de vlakken weergeven blijkt opnieuw dat de rotatie gedeeld door de snelheid een grotere
correctere inschatting mogelijk maakr. heeft dan als de snelheid gekwadrateerd wordt. Hierbij
45
wordt naar de SSE en de RMSE waardes gekeken. Deze waardes vertellen ons iets over de
voorspellende betrouwbaarheid van de gevonden functie. Hoe dichter deze waardes bij 0 liggen,
hoe beter de voorspelling. Wij zullen er nu niet op ingaan hoe deze waardes berekend worden
door Matlab. Nu we weten dat het vlak waarbij de snelheid niet gekwadrateerd is het
betrouwbaarst is wordt onze formule die de curve voorspelt de formule van dit vlak. Dit wordt:
Dit is de formule die, volgens onze resultaten, de beste voorspelling van de curve geeft aan de
hand van de rotatie en de snelheid van de bal. Doordat het een derdegraadsfunctie is geeft dit
echter alleen de beste voorspelling voor waardes voor r en v die enigszins in de buurt liggen bij
de door ons gemeten waardes. Het is mogelijk dat een tweedegraadsfunctie een betere
voorspelling geeft voor waardes die verder van de door ons gemeten waardes afliggen. Deze
formule zit gemiddeld 10.5% naast de gemeten waarde. Zie Bijlage 4 voor verdere illustratie.
46
Hoofdstuk 7: Conclusie en discussie
Betrouwbaarheid resultaten Doordat een deel van dit onderzoek op empirisch gemeten waardes is gebouwd zullen er
onherroepelijk meetfouten zijn gemaakt. Deze meetfouten hebben invloed op ons uiteindelijke
resultaat. Hieronder zullen we de gemaakte meetfouten bespreken en de mogelijke
verbeteringen van deze fouten weergeven.
Reconstructie balbaan
De reconstructie van de balbaan berust in dit onderzoek op twee camera’s. Met de beelden die
deze camera’s gefilmd hebben is de balbaan gereconstrueerd. Hierbij zijn de positie en de
richting van de camera gebruikt. Dit zal dan ook onze eerste meetfout opleveren. De positie
hebben we vrij precies bepaald. De afwijking van de positie van de camera zal dan ook klein zijn.
De richting van de camera is minder betrouwbaar. Dit hebben we wel grotendeels kunnen
corrigeren met behulp van rotatie matrices.
Controle van balbaan
Het is te controleren of onze driedimensionale balbanen goede weergaves van de werkelijkheid
geven. We doen dit door onze hele methode, van pixelcoördinaten tot puntreconstructie tot
balbaanreconstructie, in tegengestelde richting uit te voeren. Wat dit inhoudt: neem een
bekende balbaan in drie dimensies. Kies uit deze baan een aantal punten, ongeveer hetzelfde
aantal punten dat voor de balbaanreconstructie gebruikt is. Van deze punten zijn de x-, y- en z-
coördinaten eenvoudig te bepalen (met behulp van MATLAB). Laat nu vanuit deze punten een
vector lopen, richting een camera. Deze vector is eerder al voorgekomen, maar dan in
tegengestelde richting. Deze vector gaat door het (denkbeeldige) beeldvlak. Het punt waar deze
vector het beeldvlak snijdt, geeft ons het bijbehorende pixelcoördinaat. Door dit voor meerdere
punten te doen is de balbaan die waargenomen zou moeten zijn door de camera te bepalen. Nu
passen we onze correctie omgekeerd toe. Alsde beelden oorspronkelijk bijvoorbeeld 3,5 graden
naar links werden gedraaid, draaienwij nu 3,5 graden naar rechts. Door vervolgens deze
uitgerekende balbaan te vergelijken met de gefilmde balbaan is het mogelijk de nauwkeurigheid
van de metingen na te gaan.
De punten waar de balbaan uit geconstrueerd is zijn punten waarvoor geldt dat de afstand tot de
vectoren die vanuit de camera’s lopen het kortst is. Een punt ligt dus ergens tussen deze lijnen
in. Daarna is de best passende derdegraads polynoom door deze punten getrokken. Deze dingen
zorgen er dus voor dat de berekende baan nooit precies hetzelfde beeld zal teruggeven wanneer
je het terugrekent. Wel geeft het aan hoe groot de berekende punten afwijken van de originele
punten in de beeldvlakken van de camera’s.
Eerst worden uit een driedimensionale balbaan een aantal punten berekend op verschillende
tijdstippen (dit aantal is ongeveer gelijk aan het aantal frames waaruit de balbaan in eerste
instantie is opgezet) door simpelweg waarden van t in te vullen in de parametervergelijking,
waarna coördinaten (x,y,z) volgen. Vervolgens stellen we een lijn (l) op met
.
47
Deze lijn laten we een vlak snijden dat parallel loopt aan het beeldvlak van een camera (voor camera
1 bijvoorbeeld het vlak waarvoor geldt x=1). Met de omrekenfactor voor de beeldvlakken bepalen we
daarna de pixelcoördinaten en vergelijken deze met de originele.
Voorbeeld
Wij hebben dit uitgeprobeerd voor een paar schoten. Hieronder zullen we de waarden
bespreken van één schot. Dit is schot 12 (zie Bijlage 5 voor de grafieken van de pixelcoördinaten
van de schoten). Voor dit schot hebben we alle bovenstaande stappen doorlopen. Hierbij hebben
we dat één keer met behulp van draaiingsmatrixen gedaan en één keer zonder gebruik te maken
van draaiingsmatrixen. Vervolgens hebben we onze resultaten vergeleken. Eerst hebben we naar
de camera op de x-as gekeken. Zonder de draaiingsmatrixen hadden onze gereconstrueerde x-
waarden een gemiddelde afwijking van 10,64%. Voor de y-waarden was dit 4,00%. Dit
verbeterde aanzienlijk na toepassing van onze rotatie matrices zoals beschreven in het
hoofdstuk Beeldonderzoek. De gemiddelde x-afwijking kwam uit op 0,20% De y-as afwijking
kwam uit op gemiddeld 1,35%.
De camera op de y-as had zonder correctie een gemiddelde afwijking van 15,66% voor de x-
pixels en een afwijking van 4,37% voor de y-pixels. Na gebruik van de rotatie matrices waren dit
afwijkingen van respectievelijk 0,32% voor de x-as en 1,60% voor de y-as.
Hieruit kunnen we concluderen dat met name de rotatie matrix die de draaiing op de x-as
herstelde erg goed gewerkt heeft. Dit is prettig, want voor ons onderzoek hebben wij de z-
waardes buiten beschouwing gelaten.
Draaiing bal
Bij het meten van de draaiing van de bal hebben we een aantal aannames moeten maken. Deze
aannames zijn niet 100% juist. Dit zal invloed hebben op de correctheid van de door ons
gemeten draaiing. Dat het noodzakelijk was deze aannames te maken komt vooral doordat de
exacte positie van onze derde camera niet bekend was. Wij rekenden er namelijk op dat het
nodig zou zijn de bal in zijn vlucht te volgen en we hebben vanaf meerder posities gefilmd om te
kijken wat de beste beelden zou opleveren. Achteraf bleek dit allebei onnodig. Aan het eerste
deel van de balbaan hadden we genoeg om de rotatie te berekenen. Dit betekent dat camera 3 de
bal niet hoeft te volgen maar alleen het begin van de baan hoeft te filmen. Ook hebben we aan de
hand van de beelden kunnen bepalen wat de ideale positie van camera 3 is. Door deze informatie
zouden wij bij een volgende meting een andere opstelling kiezen wat betrouwbaardere
informatie oplevert.
Verbetering rotatie
Omdat de exacte locatie van camera 3 (De camera die de rotatie van dichtbij filmde) niet bekend
was moesten we aannemen dat de z-as van ons bal-assenstelsel parallel liep met de z-as van ons
originele assenstelsel. Hierdoor zullen onze resultaten enigszins vervormd zijn. Nu gaan we er
namelijk vanuit dat de rotatiecamera op een oneindige afstand stond, zodat alle beelden
loodrecht op de z-as zijn geschoten. In werkelijkheid is dit natuurlijk niet zo. Om dit op te lossen
moet je exact weten waar de camera zich bevindt. Als dit bekend is moet het bal-assenstelsel
opnieuw gedefinieerd worden. De y-as wordt nu gevormd door de lijn van de derde camera naar
de bal oneindig te verlengen in beide richtingen. Om de bal z-as te vinden is de x-as nodig. Wel
48
weten we al dat de z-as in het vlak ligt dat loodrecht
boven onze gevonden y-as ligt, omdat we ervan
uitgaan dat de camera niet om zijn eigen as is
gedraaid.
Ook is bekend dat de oude z-as in dit vlak ligt. De x-as
vinden we door even te doen alsof onze z-as nog
steeds de orginele z-as is. In werkelijkheid zal deze z-
as gedraaid zijn. Dit mag omdat we gebruik gaan
maken van het kruisproduct en beide z-assen in het
zelfde vlak liggen. We nemen nu het kruisproduct
tussen onze orginele z-as (in het bal-assenstelsel
geplaatst) en de gevonden y-as. Dit geeft de x-as. Nu
nemen we het kruisproduct tussen deze x-as en de y-
as en we hebben onze z-as. De assen die zo vinden zijn
de meetkundige interpretatie van het bal-assenstelsel in ons oorspronkelijke assenstelsel. Nu
moeten alleen nog de hoeken tussen deze assen en het oorspronkelijke assenstelsel gevonden
worden. Dan kan er door middel van drie rotatie matrices (één voor de x-as, één voor de y-as en
één voor de z-as) beschreven worden hoe gedraaid moet worden zodat de assenstelsels
samenvallen. Als deze rotatie matrices vervolgens vermenigvuldigd worden en hier de inverse
van genomen wordt hebben we de matrix die we willen. Door onze gevonden
draaiingsvectoren(de vector die op de draaiingsas ligt) nu te vermenigvuldigen met deze matrix
krijgen we de draaiingsvectoren in het orginele assenstelsel.
Verband tussen rotatie, snelheid en curve
Uit onze correlatiecoëfficiënten (met een hoogste waarde van 0.613) blijkt dat er een verband
aanwezig is, maar dat dit geen perfect lineair verband is. Wij verwachten dat deze waarde niet 1
is door de hierboven genoemde meetfouten. Dat deze waarde slechts 0.613 is betekent dat onze
formule om de curve te voorspellen als de draaiing en rotatie gegeven zijn niet geheel
betrouwbaar is. Verder hebben wij een aantal factoren buiten beschouwing gelaten. Zo hebben
wij in onze berekeningen geen rekening gehouden met de wind, of met oscillaties van de bal
nadat deze geraakt is. Het is zeer waarschijnlijk dat deze factoren ook invloed hebben op de
curve. Dit hebben wij in dit onderzoek echter buiten beschouwing gelaten. Het is dus ook niet
vreemd dat we geen correlatiewaarde van 1 hebben gevonden. De correlatiewaarde van 0.613
vertelt ons dat er een trend is tussen de rotatie, de snelheid en de curve, maar dat dit geen één
op één verband is. Wij denken dat de manier waarop MATLAB het best passende vlak heeft
geplot geen grote invloed op de nauwkeurigheid van onze resultaten zal hebben. Er is zelfs een
kans dat het feit dat het best passende vlak genomen is enkele van onze eerdere meetfouten
neutraliseert. Hier durven wij echter geen voorspellingen over te doen. We moeten dus in ons
achterhoofd houden dat de gevonden formule niet hét verband is, maar slechts het best
passende verband dat te vinden is met onze resultaten. Wij verwachten dat hét verband echter
wel bestaat en dat de voorspelling van dit verband telkens beter zal worden naarmate er minder
meetfouten tijdens het onderzoek gemaakt worden.
Afbeelding 21- draaiing die niet
heeft plaatsgevonden
49
Vervolg onderzoek
De grote kracht van dit profielwerkstuk zit meer in de gebruikte methodes dan in het resultaat.
Dit profielwerkstuk biedt dan ook mogelijkheden om verder te bouwen. De grote truc is dat het
niet meer nodig is om de camera’s heel nauwkeurig op te stellen. Het maakt onderzoek mogelijk
waarbij de opstelling niet van te voren is uitgedacht. Ter plekke kunnen op willekeurige plaatsen
camera’s worden geplaatst. Vervolgens kan er opgenomen worden en als er maar genoeg
referentie punten zijn en de locatie van de camera’s bekend is kan alles zo aangepast worden dat
het als input voor onze code kan dienen. Dit maakt onderzoek naar balbanen eenvoudiger en
toegankelijker.
Als we puur op ons terrein, het voetbalveld, door willen gaan valt er ook nog een hoop te
verbeteren. Deze verbeteringen zijn vooral van technische aard. Wij denken dat onze methode
theoretisch klopt, ook al zullen hier altijd verbeteringen mogelijk blijven. Het materiaal dat wij
tot onze beschikking hadden was echter niet van optimale kwaliteit. Bij onze derde meting
hadden we een extra camera om de rotatie te filmen. Dit was een kwalitatief betere camera, met
een instelbare sluitertijd en een hogere frame-rate. De beelden van deze camera waren ook
zichtbaar scherper en beter bruikbaar. Als we twee van deze camera’s voor handen hadden was
het waarschijnlijk wel mogelijk geweest de baan van de voet te meten. Daarna hadden we voor
de reconstructie van de baan van de voet dezelfde methodes kunnen gebruiken als voor de
reconstructie van de balbaan. Hoe het daarna verder gaat kan alleen verder onderzoek uitwijzen,
maar met dit profielwerkstuk is hier alvast een mooie basis voor gelegd.
Vanuit dit profielwerkstuk is het onderzoek naar de curve goed uit te breiden naar de curve in
het xz-vlak en de curve in het yz-vlak. De beschreven methodes kunnen allemaal gebruikt
worden om dit te onderzoeken.
Toepassingen
Dit onderzoek is niet alleen toepasbaar op voetbal. Dezelfde methodes werken (waarschijnlijk)
prima voor andere balsporten. De camera’s zullen dan wellicht anders gepositioneerd zijn maar
de methode en programmering zijn nog steeds bruikbaar. Een andere sport waarbij rotatie
bijvoorbeeld een grote rol speelt is tennis. Elke bal wordt tijdens een tenniswedstrijd met een
bepaald soort effect gespeeld. Elk effect heeft ook een andere uitwerking tijdens het spel. Met de
door ons genoemde methodes zou hier op een vergelijkbare manier onderzoek naar gedaan
kunnen worden. Of de curve van een tennisbal bijvoorbeeld volgens een zelfde manier beïnvloed
wordt door de rotatie als een de curve van voetbal. Een ander mogelijk experiment is
onderzoeken of de draaiing van het racket tijdens het raken van de bal de balbaan beïnvloedt. Zo
zijn er nog vele andere mogelijkheden bij andere (bal)sporten, zoals honkbal en hockey.
Het gedeelte van de balbaanreconstructie hoeft niet eens alleen over sport te gaan. Elke
verplaatsing die gefilmd is met tenminste 2 camera’s, kan ons programma omzetten in een
driedimensionale baan.
50
Volledige automatisering
Het volgende niveau van ons systeem is volledige automatisering. Dan zou het echt mogelijk zijn
2 camera’s op een willekeurige plaats neer te zetten, zolang ze maar en de goal of een ander
voorwerp waarvan de exacte afmetingen bekend zijn, en het te volgen object in beeld hebben.
Dan is het ook niet meer nodig om te meten waar de camera’s zich bevinden.Theoretisch is het
mogelijk om een programma te maken dat deze beelden binnenkrijgt en daar direct de balbaan
uit afleidt. Wij hebben dit programma niet gemaakt omdat wij daarvoor niet goed genoeg
kunnen programmeren. We zullen we beschrijven hoe dit zou moeten.
Ten eerste moet het programma in staat zijn aan de hand van hoe de goal op het beeldvlak wordt
weergegeven te bepalen waar de camera zich bevindt. Als bekend is wat de verhoudingen en de
realtieve afstand van het beeldvlak zijn is dit theoretisch gezien mogelijk. Wij zullen er nu echter
niet op in gaan hoe dit precies werkt.
Als de locatie ten opzichte van de goal bekend is, moet een assenstelsel gekozen worden waarbij
beide camera’s zich op een aparte as bevinden. Als dit gedaan is moeten de rotatie matrices
gevonden worden waarmee de camera’s loodrecht op deze assen gedraaid kunnen worden.
Nu bekend is waar de beide camera’s staan in dit nieuw gekozen assenstelsel moet After Effects
automatisch opdracht krijgen de bal te volgen. Nu hebben wij After Effects elke keer handmatig
opdracht gegeven de bal te volgen maar aangezien de bal niet veranderd tijdens het schieten
moet het mogelijk zijn after effects automatisch de bal te laten volgen.
Nadat dit gebeurt is kunnen deze gegevens door ons programma worden gehaald en rollen de
balbanen eruit.
Op het veld
Nu rest slechts de vraag wat we hier aan hebben. Kunnen wij nu net zo schieten als David
Beckham? Nee, dat is helaas niet gelukt maar onze resultaten hebben wel degelijk nut op het
voetbalveld. Uit onze resultate bleek dat de curve van de rotatie en van de snelheid afhankelijk
is. Dit verband wordt versimpeld weergegeven door de volgende vergelijking:
Hieraan zien we dat als de rotatie groter en de snelheid kleiner wordt de curve toeneemt. Dit is
met name toe te passen bij het nemen van vrije trappen. Naarmate de bal dichter bij het doel ligt
is er meer curve nodig om de bal langs het muurtje te krullen. Als je de bal dus om de muur heen
wil krullen van dichtbij is het zaak om de bal niet al te hard te schieten en vooral te zorgen voor
een grote rotatie. Als je te hard schiet zul je de rotatie immers in gelijke mate moeten vergroten
om dezelfde curve te behouden. Als de bal verder weg van de goal ligt en er dus minder curve
nodig is kan de bal ook voller geraakt worden wat resulteert in een grotere snelheid een kleinere
rotatie. Dit verband is versimpeld waardoor onze conclusies dus niet een perfecte weergave van
de werkelijkheid geven, maar ze zijn zeker toepasbaar en in het vervolg zullen wij onze vrije
trappen wat minder hard schieten, en meer benden like beckham.
51
Algemene Conclusie
Al met al zijn wij erg tevreden over dit profielwerkstuk. Natuurlijk zijn er dingen die beter
hadden gekund, en is het hele onderzoek nog lang niet afgelopen maar dat zal het nooit zijn.
Naarmate we vorderden in ons onderzoek kwamen we telkens meer zijpaden tegen. Hoe verder
we kwamen, des te meer mogelijkheden zich aanboden. En nu we eenmaal op dit punt zijn
aangekomen, zien we telkens beter hoe we die zijpaden zouden kunnen bewandelen. Helaas was
daar geen tijd meer voor, maar het is ook goed. Een onderzoek duurt niet eeuwig, en nu is het de
beurt aan anderen om verder in dit onderwerp te duiken. En dit is één van de punten waar wij
zelf het trotst op zijn. Wij hebben het idee dat wij een relatief eenvoudige manier van onderzoek
naar bewegende objecten mogelijk hebben gemaakt. Toen wij ons inlazen over het onderwerp
kwamen we een grote hoeveelheid aan eerdere onderzoeken tegen. Deze gingen over alles wat
maar met voetbal te maken had. Tussen al deze onderzoeken zat echter amper puur wiskundig
onderzoek. Hiermee willen we niet zeggen dat er geen wiskundige onderzoeken naar dit
onderwerp bestaan, maar we zagen wel dat het natuurkundig gerichte onderzoek domineerde.
Op het moment dat er rekening moet worden gehouden met de oscilatie van de bal zelf, met de
lucht die om de bal zweeft en alle andere natuurkundige verschijnselen wordt het een te
ingewikkeld probleem voor analytische methodes. Wiskundig gezien is het echter wel
toegankelijk. Door alleen wat je ziet te onderzoeken maak je een ongelofelijk complex
onderwerp toch bereikbaar op een wetenschappelijk zinvolle manier.
52
Nawoord
Voor ons was dit onderzoek een reis. Een reis door de wereld van voetbal en wiskunde. We
kwamen aan op het voetbalveld, keken om ons heen en hadden nog geen idee wat ons in dit land
te wachten stond. Langzaam maar zeker, naarmate we het land verkenden, kwamen we meer te
weten over dit spannnende land en de paden verschenen aan onze voeten. Zo liepen wij door
deze wereld, en langzaam begonnen de dingen op hun plek te vallen. We begonnen aan te voelen
wat mogelijk was en wat niet, en konden zo telkens dichter bij de werkelijkheid komen. Helaas,
zoals bij elke reis, moet je op een gegeven moment weer terug naar huis. De tijd is op, het was
mooi, maar nu weer terug. Gelukkig blijven de herrinneringen aan de plaatsen en aan de
mensen. Want op deze reis kwamen wij genoeg mensen tegen, die ons geholpen hebben met het
vinden van de juiste paden. We hadden ten eerste een geweldige gids, Sven Aerts, die ons
behoede voor derdegraadswortels wanneer een vierkantswortel nodig was en altijd binnen vijf
minuten een antwoord had op elke mogelijke vraag. Hij heeft het zelfs voor elkaar gekregen om
vriendelijk en goedgehumeurd te blijven tijdens de stortvloed aan vragen die wij over hem heen
hebben gekieperd. Om ons heen, hoorden wij van andere reizigers in andere landen die te
weinig input kregen van hun gids maar over input hoefden wij niet te klagen. Zo werden wij
rondgeleid door deze wereld en kwamen wij nog andere hulptroepen tegen. Zo was Nico Markus
bereid zijn innig geliefde camera een weekend aan ons uit te lenen. Erik-Jan Koeman was de
persoon die ons aanspoorde deze reis überhaubt te ondernemen, en Estevan Veenstra spoorde
ons op de juiste momenten aan om verder te trekken door onze wereld. En nu zijn we dan
aangekomen aan het einde van onze reis. We hebben veel gezien, veel nieuwe dingen
opgesnoven, en veel geleerd maar zoals bij elke reis is het ook heerlijk om weer thuis te zijn.
53
Referenties Bourke, P (1988). The shortest line between two lines in 3D Geraadpleed op: 25-12-2013
http://paulbourke.net/geometry/pointlineplane/
Dawkins, P (2014). Arc Length Geraadpleed op:05-02-2014
http://tutorial.math.lamar.edu/Classes/CalcIII/VectorArcLength.aspx
Dima, C (1988). Matlab conversie voor: The shortest line between two lines in 3D Geraadpleed op:
25-12-2013
http://paulbourke.net/geometry/pointlineplane/linelineintersect.m
Dirkse, D (z.d.) De Kleinste Kwadraten Methode
http://www.davdata.nl/klkw.html
Dirks, D (z.d.) Lineaire Regressie Geraadpleed op: 05-10-2013
http://www.davdata.nl/linregressie.html
Staal (2012). Historische vindingen: Wis- en Natuurkunde – Pythagoras
Geraadpleed op: 21-08-2013
http://wetenschap.infonu.nl/wiskunde/97972-historische-vindingen-wis-en-meetkunde.html
Weisstein, Eric W.(z.d.) ‘’Cross Product’’ From Mathworld Geraadpleed op: 03-01-2014
http://mathworld.wolfram.com/CrossProduct.html
Wikipedia (z.d.) Booglengte Geraadpleed op: 05-02-2014
http://nl.wikipedia.org/wiki/Booglengte
Wikipedia (z.d.). Adobe After Effects Geraadpleed op: 14-08-2013
http://nl.wikipedia.org/wiki/Adobe_After_Effects
Wikipedia (z.d.) Matrix Laboratory Geraadpleed op:17-11-2013
http://nl.wikipedia.org/wiki/MATLAB
Wikipedia (z.d.). Bend it like Beckham Geraadpleed op:20-03-2013
http://nl.wikipedia.org/wiki/Bend_It_Like_Beckham
Website bedrijf: About Hawk Eye Geraadpleed op: 23-05-2013
http://www.hawkeyeinnovations.co.uk/page/about-hawk-eye
Adobe Community Help. Meerdere malen geraadpleegd
http://helpx.adobe.com
Gazet van Antwerpen (2008). Oefen 10.000 uren en word een genie
Geraadpleed op: 06-07-2013
http://www.gva.be/nieuws/wetenschap/oefen-10-000-uren-en-word-een-genie.aspx
Mathworks, user community. Meerdere malen geraadpleegd
http://www.mathworks.nl/matlabcentral/?s_tid=gn_mlc
54
Microsoft Office (2014). CORRELATIE Geraadpleed op: 11-02-2014
http://office.microsoft.com/nl-nl/excel-help/correlatie-HP005209023.aspx
Gebruikte software:
Adobe After Effects CS5.5
Adobe Premiere Pro CS5.5
Adobe Photoshop CS5
Autodesk Autocad 2014
Mathworks MATLAB 7.12.0
Microsoft Office Word 2010
Microsoft Office Excel 2013
55
Bijlages
Bijlage 1: Matlab programma
Eerst zullen we ons programma stap voor stap doorlopen om uit te leggen wat er gedaan wordt.
Vervolgens zullen wij het volledige script plaatsen.
clearvars -except data
Hiermee worden alle bestaande waardes vernietigd, behalve de waarden die onder het kopje
data staan. In ons geval staan de opgenomen waardes van de bal onder data.
ry1 = 0.129335
ry2 = 0.006336003
yrotatie=[cos(ry1) -sin(ry1) 0; sin(ry1) cos(ry1) 0; 0 0 1]
ygrotatie=yrotatie^-1
yrotatie2=[cos(ry2) 0 -sin(ry2);0 1 0; sin(ry2) 0 cos(ry2)]
ygrotatie2=yrotatie2^-1
yrotatienfin=ygrotatie*ygrotatie2
rx1 = 0.043889499
rx2 = 0.000411234
xrotatie=[cos(rx1) -sin(rx1) 0; sin(rx1) cos(rx1) 0; 0 0 1]
xgrotatie=xrotatie^-1
xrotatie2=[1 0 0;0 cos(rx2) -sin(rx2);0 sin(rx2) cos(rx2)]
xgrotatie2=xrotatie2^-1
xrotatienfin=xgrotatie*xgrotatie2
Hier worden de rotatiematrixen die als correctie gebruikt worden opgesteld. Ry1, ry2, rx1 en
rx2 zijn de bepaalde draaiingshoeken.
for x=1:data(1,6)
Dit geeft aan hoe vaak er geitereerd wordt. Het aantal frames per schot staat in elk excel file in
de eerste rij, zesde kolom. Daar verwijst data(1,6) naar.
a=data(x,2)
b=data(x,3)
c=data(x,4)
d=data(x,5)
Hier worden de door After Effects bepaalde waardes geimporteerd en toegewezen. De eerste x
geeft aan uit welke rij de waardes geïmporteerd zijn. Doordat er van 1 tot 24 wordt geitereerd
worden eerst de waardes uit de eerste rij, en de eerste 4 kolommen gepakt. Daarmee wordt het
programma doorlopen. Vervolgens worden de gegevens uit de volgende rij gepakt etc.
p1=[28.2 0 1.4]'
p5=[(a-644) 1692.36 (485-b)]'
p3=[0 39 1.4]'
p6=[1692.36 (720-c) (520-d)]'
Hier worden de waardes uit after effects omgezet tot vectoren.
p8=xrotatienfin*p5
56
p7=yrotatienfin*p6
Hier wordt de correctie met de draiiings matrixen uitgevoerd.
p2=(0.029544541*p8) + p1
p4=(0.029544541*p7) + p3
De lijnen waartussen we het “snijpunt” zoeken worden gevormd door lijn1(de lijn tussen p1 en
p2) en lijn2(de lijn tussen p3 en p4).
p13(1) = p1(1) - p3(1);
p13(2) = p1(2) - p3(2);
p13(3) = p1(3) - p3(3);
p43(1) = p4(1) - p3(1);
p43(2) = p4(2) - p3(2);
p43(3) = p4(3) - p3(3);
if ((abs(p43(1)) < eps) & ...
(abs(p43(2)) < eps) & ...
(abs(p43(3)) < eps))
error('Could not compute LineLineIntersect!');
end
p21(1) = p2(1) - p1(1);
p21(2) = p2(2) - p1(2);
p21(3) = p2(3) - p1(3);
if ((abs(p21(1)) < eps) & ...
(abs(p21(2)) < eps) & ...
(abs(p21(3)) < eps))
error('Could not compute LineLineIntersect!');
end
d1343 = p13(1) * p43(1) + p13(2) * p43(2) + p13(3) * p43(3);
d4321 = p43(1) * p21(1) + p43(2) * p21(2) + p43(3) * p21(3);
d1321 = p13(1) * p21(1) + p13(2) * p21(2) + p13(3) * p21(3);
d4343 = p43(1) * p43(1) + p43(2) * p43(2) + p43(3) * p43(3);
d2121 = p21(1) * p21(1) + p21(2) * p21(2) + p21(3) * p21(3);
denom = d2121 * d4343 - d4321 * d4321;
if (abs(denom) < eps)
error('Could not compute LineLineIntersect!');
end
numer = d1343 * d4321 - d1321 * d4343;
mua = numer / denom;
mub = (d1343 + d4321 * mua) / d4343;
57
pa(1) = p1(1) + mua * p21(1);
pa(2) = p1(2) + mua * p21(2);
pa(3) = p1(3) + mua * p21(3);
pb(1) = p3(1) + mub * p43(1);
pb(2) = p3(2) + mub * p43(2);
pb(3) = p3(3) + mub * p43(3);
Dit gedeelte berekent het korste lijnstuk tussen lijn 1 en lijn 2 volgens de methode beschreven in
het hoofddtuk balbaan reconstructie.
Dit gedeelte van de code is overgenomen
van:http://paulbourke.net/geometry/pointlineplane/linelineintersect.m
Deze code is geschreven door Cristian Dima. De theorie is geschreven door Paul Bourke
muc = [p1+mua*(p2 - p1)+(1/2)*((p3 + mub*(p4 - p3))-(p1 + mua*(p2 -
p1)));]'
Hier wordt muc geintroduceert. Muc is het midden van het hiervoor gevonden kortste lijnstuk.
mucx(x,1)=muc(1,1)
mucy(x,1)=muc(1,2)
mucz(x,1)=muc(1,3)
Hier wordt muc opgesplitst in een x,y en z waarde. Deze verschillende waardes worden
opgeslagen waarbij elke nieuwe muc waardes in de rij onder die daarvoor worden geplaatst
end
Het itereren wordt beeindigt. t=(1:1:x)
Hier wordt begonnen met een nieuwe iteratie.
ux=fit(t',mucx , 'poly3')
uy=fit(t',mucy , 'poly3')
uz=fit(t',mucz , 'poly3')
Er wordt nu gezocht naar de best passende derdegraadspolynomen voor afzonderlijk de x-,y- en
z-waardes van muc. aax=polyfit(t',mucx , 3)
aay=polyfit(t',mucy , 3)
aaz=polyfit(t',mucz , 3)
Hier gebeurt hetzelfde, alleen nu is de output de coëfficienten. Het is nodig om dit nog een keer
te doen omdat de de eerste output niet geplot kan worden.
for i=1:x
aaxx(i,1)=aax(1,1)*i.^3 + aax(1,2)*i^2 + aax(1,3)*i + aax(1,4)
aayy(i,1)=aay(1,1)*i.^3 + aay(1,2)*i^2 + aay(1,3)*i + aay(1,4)
aazz(i,1)=aaz(1,1)*i.^3 + aaz(1,2)*i^2 + aaz(1,3)*i + aaz(1,4)
58
Vervolgens worden de waardes van de functies berekend waarbij i van 0 tot het laatste frame
loopt.
end
plot3(aaxx, aayy, aazz)
Nu worden de functies geplot. Dit is dus de benaderde balbaan
aaxa1(1,1)=aax(1,1)*3
aaxa1(1,2)=aax(1,2)*2
aaxa1(1,3)=aax(1,3)
aaxa2(1,1)=2*aaxa1(1,1)
aaxa2(1,2)=1*aaxa1(1,2)
Zo worden de coëfficienten van de afgeleiden en tweede afgeleide van de functies die de balbaan
beschrijven bepaalt. Dit gebeurt volgens de standaard regels van het afleiden
syms T
Hier wordt de variabele T ingevoerd. fx=aax(1,1)*T.^3 + aax(1,2)*T.^2 + aax(1,3)*T + aax(1,4)
fy=aay(1,1)*T.^3 + aay(1,2)*T.^2 + aay(1,3)*T + aay(1,4)
fz=aaz(1,1)*T.^3 + aaz(1,2)*T.^2 + aaz(1,3)*T + aaz(1,4)
Nu gebeurt hetzelfde als al eerder gebeurt is bij aaxx, aayy en aazz maar dit keer worden er geen
getallen gebruikt maar een variabele.
dfx=diff(fx)
dfy=diff(fy)
dfz=diff(fz)
Matlab krijgt de opdracht de functies te differentieren.
f=sqrt(dfx^2+dfy^2+dfz^2)
De intergraal hiervan is de formule voor de booglengte. fi=int(f, 0, data(1,6))
Nu wordt de integraal tussen 0 en de waarde van het laatste frame genomen. Matlab geeft een
foutmelding als dit wordt ingevoerd omdat matlab het niet exact kan berekenen. Daardoor
wordt deze integraal aan fi toegewezen.
vpa(fi, 5)
Zo geven we matlab de opdracht de foutmelding te negeren en het af te ronden op 5 significante
cijfers. ans/data(1,6)
We delen de afstand in meters door het aantal frames. Zo krijgen we de snelheid in m/frame.
afgeleide=(diff(fx,2)/diff(fy,2))
We introduceren een nieuwe variabele: afgeleide. Dit is de dubbele afgeleide van f(y) naar de
tijd, gedeeld door de dubbele afgeleide van f(x) naar de tijd. opp=int(afgeleide, 0, data(1,6))
59
We berekenen hier de integraal van over het interval 0:laatste frame. Nu zal matlab opnieuw een
foutmelding geven. abs(vpa(opp, 5))
Zo geven we matlab opnieuw de opdracht de foutmelding te negeren en het af te ronden op 5
significante cijfers. Met abs geven we MATLAB de opdracht de absolute waarde van het
antwoord te nemen zodat er geen negatieve oppervlaktes ontstaan.
Bijlage 2: De opstelling
Bovenaanzicht van het veld
60
achter de camera op de y-as
achter de camera op de x-as
61
Bijlage 3: De correlatie-tabellen
Curve rotatie Correlatie 1.777098281 0.1257 0.379719
1.14732011 0.1234 1.527812692 0.106 1.011636101 0.128 1.579972698 0.1106 1.278359218 0.0957 0.747427867 0.09554 0.870053172 0.1088875 0.918980763 0.09088
Curve rotatie Correlatie
1.777098281 0.1257 -0.16697
1.14732011 0.1234 1.527812692 0.106 1.011636101 0.128 1.579972698 0.1106 1.278359218 0.0957 0.747427867 0.09554 0.870053172 0.1088875 0.918980763 0.09088 0.744639243 0.1145375 0.865780551 0.1194 0.866511296 0.104722222 0.868500799 0.154866667 0.985910204 0.116225 0.74308157 0.171963636
Curve rotatie Correlatie 1.777098281 0.1257 -0.15748
1.14732011 0.1234 1.527812692 0.106 1.011636101 0.128 1.579972698 0.1106 1.278359218 0.0957 0.747427867 0.09554 0.870053172 0.1088875 0.918980763 0.09088 0.744639243 0.1145375 0.865780551 0.1194 0.866511296 0.104722222 0.868500799 0.154866667 0.985910204 0.116225 0.74308157 0.171963636 0.957040106 0.097633333 1.156651925 0.121057143 1.303392691 0.106026667
62
Curve rotatie/snelheid Correlatie 1.777098281 0.199548947 0.586801
1.14732011 0.180936768 1.527812692 0.159232822 1.011636101 0.17695934 1.579972698 0.140962062 1.278359218 0.131679165 0.747427867 0.10175422 0.870053172 0.144497537 0.918980763 0.109115603
Curve rotatie/snelheid Correlatie 1.777098281 0.199548947 0.612844
1.14732011 0.180936768 1.527812692 0.159232822 1.011636101 0.17695934 1.579972698 0.140962062 1.278359218 0.131679165 0.747427867 0.10175422 0.870053172 0.144497537 0.918980763 0.109115603 0.744639243 0.100639341 0.865780551 0.111270864 0.866511296 0.087277689 0.868500799 0.118714027 0.985910204 0.096974156 0.74308157 0.15636993
Curve rotatie/snelheid Correlatie 1.777098281 0.199548947 0.612844
1.14732011 0.180936768 1.527812692 0.159232822 1.011636101 0.17695934 1.579972698 0.140962062 1.278359218 0.131679165 0.747427867 0.10175422 0.870053172 0.144497537 0.918980763 0.109115603 0.744639243 0.130354977 0.865780551 0.128123028 0.866511296 0.125653463 0.868500799 0.20202907 0.985910204 0.139297429 0.74308157 0.189112396 0.957040106 0.122357836 1.156651925 0.158836739 1.303392691 0.140884173
63
Curve rotatie/snelheid^2 Correlatie
1.777098281 0.316784265 0.646804
1.14732011 0.265300761 1.527812692 0.239198976 1.011636101 0.244645374 1.579972698 0.179659158 1.278359218 0.181184979 0.747427867 0.108372633 0.870053172 0.191753308 0.918980763 0.131010286
Curve rotatie/snelheid^2 Correlatie
1.777098281 0.316784265 0.57021
1.14732011 0.265300761 1.527812692 0.239198976 1.011636101 0.244645374 1.579972698 0.179659158 1.278359218 0.181184979 0.747427867 0.108372633 0.870053172 0.191753308 0.918980763 0.131010286 0.744639243 0.148356826 0.865780551 0.137483336 0.866511296 0.150768312 0.868500799 0.2635541 0.985910204 0.166950086 0.74308157 0.207971285
Curve rotatie/snelheid^2 Correlatie 1.777098281 0.316784265 0.560466
1.14732011 0.265300761 1.527812692 0.239198976 1.011636101 0.244645374 1.579972698 0.179659158 1.278359218 0.181184979 0.747427867 0.108372633 0.870053172 0.191753308 0.918980763 0.131010286 0.744639243 0.148356826 0.865780551 0.137483336 0.866511296 0.150768312 0.868500799 0.2635541 0.985910204 0.166950086 0.74308157 0.207971285 0.957040106 0.153343531 1.156651925 0.208406618 1.303392691 0.187201492
64
Bijlage 4: Controle voorspelling
Gemeten c Voorspelde c Verschil Modulus verschil
17.771 17.002 0.0769 0.0769
11.473 13.569 -0.2096 0.2096
15.278 15.871 -0.0593 0.0593
10.116 11.279 -0.1163 0.1163
1.58 11.187 0.4613 0.4613
12.784 1.281 -0.0026 0.0026
0.7474 0.7595 -0.0121 0.0121
0.8701 11.963 -0.3262 0.3262
0.919 0.9395 -0.0205 0.0205
0.7446 0.9712 -0.2266 0.2266
0.8658 0.8584 0.0074 0.0074
0.8665 10.549 -0.1884 0.1884
0.8685 0.8932 -0.0247 0.0247
0.9859 10.118 -0.0259 0.0259
0.7431 0.7916 -0.0485 0.0485
0.957 10.909 -0.1339 0.1339
11.567 1.083 0.0737 0.0737
13.034 12.098 0.0936 0.0936
Som van rij erboven 20,0319 19,3502 -0,6817 2,1075
Gemiddelde rij 1,112883 1,075011 -0,03787 0,117083
Afwijking in procenten
10,52072
65
Bijlage 5: Betrouwbaarheid balbaan
0
100
200
300
400
500
600
700
800
0 200 400 600 800 1000 1200 1400 1600
y-w
aard
e
x-waarde
Schot 12, camera x-as
Gemeten baan
gereconstrueerd zonderdraaiingsmatrixen
gereconstrueerd metdraaiingsmatrixen
0
100
200
300
400
500
600
700
800
900
0 200 400 600 800 1000 1200 1400
y-w
aard
e
x-waarde
Schot 12, camera y-as
gemeten
gereconstrueerdinclusiefdraaiingsmatrixen
gereconstrueerdexclusiefdraaiingsmatrixen
66
67
“Als ik zou willen dat je het begreep, had ik het wel beter uitgelegd.” Johan Cruijff
Nederlands voetballer en coach 1947