Computer visie gaat vaak over beeldverwerking. Hierbij vertrek je vanuit de afbeelding – opgebouwd uit pixels – om bijvoorbeeld een persoon in de afbeelding te detecteren. Het resultaat is dan de positie van de persoon in de afbeelding, gemeten in “aantal pixels”. In veel praktische toepassingen wil je echter de positie van de persoon in de echte wereld achterhalen. Voor onder andere zulke toepassingen is er camera calibratie nodig, zodat je verbanden kan leggen tussen posities in de afbeelding (in pixels) en posities in de echte wereld (in meter).

Camera calibratie bestaat er uit om bepaalde parameters van de camera te bepalen die je dan in de formules kan invullen om de gewenste dingen te berekenen. Deze calibratie parameters zijn opgesplitst in intrinsieke en extrinsieke parameters.

 

Camera model: intrinsieke parameters

Theorie
Het verband tussen de wereld en de afbeelding begint met het werkingsprincipe van een camera. Het meest simplistische camera model is de pinhole camera, waarbij elk punt in de wereld via juist 1 lijn op de camera sensor wordt geprojecteerd. Dit is een lineaire project die bijgevolg voorgetseld kan worden door een matrix-vermenigvuldiging. Deze matrix wordt de camera matrix genoemd en kan ingevuld worden met de brandpuntafstand en het optische center c van de camera. Via de formule hieronder kan je de coordinaten van een punt in de wereld (X,Y,Z) berekenen na de transformatie naar camera sensor (x,y,w). Omdat de camera sensor echter een 2D vlak is, is er nog een projectie nodig van de homogene coordinaten (x,y,w) op dit vlak om de uiteindelijke pixel coordinaten (x’,y’) in de afbeelding te bepalen. Deze projectie kan simpelweg berekend worden door de x- en y-waarden te delen door w :

  • x’ = x / w
  • y’ = y / w

Bron: https://www.quora.com/How-can-a-pinhole-act-as-a-lens                        Bron: https://docs.opencv.org/master/d4/d94/tutorial_camera_calibration.html

 

In de praktijk gebruikt een typische camera echter een lens in plaats van een pinhole, zodat er meerdere lijnen zijn waarmee een punt in de wereld op de camera sensor wordt geprojecteerd. Het effect van een lens zorgt voor radiale en tangentiale distortie in de afbeelding, waardoor het verband tussen wereld en afbeelding niet meer lineair is. Onderstaande formules kunnen worden gebruikt om de pixel coordinaten te bepalen rekening houdend met radiale en tangentiale distortieparameters (k en p respectievelijk)

Bron: https://www.quora.com/How-can-a-pinhole-act-as-a-lens                        Bron: https://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html?#calibratecamera

 

Praktijk
Als je een camera met lens koopt, kan het zijn dat je sommige intrinsieke parameters in de datasheet kan terugvinden. Maar het is meestal toch aangewezen om deze parameters experimenteel te bepalen, aangezien ze afhankelijk zijn van onder andere de lens focus en kunnen verschillen door product varianties.

Het experimenteel bepalen van de intrinsieke parameters wordt gedaan met behulp van een kleine collectie training data. Deze training data bestaat uit afbeeldingen van een gekend patroon uit verschillende perspectieven. Typisch wordt hier een schaakbordpatroon voor gebruikt, waarbij men zelf telt hoeveel rijen en kolommen er zijn en precies meet hoeveel (centi)meter de zijde van elk vierkantje is. De volgende stap is om een hoeveelheid foto’s te nemen van dit schaakbord met de camera die je wenst te calibreren. Het is hierbij belangrijk dat je het schaakbord ook naar de hoeken van het camerabeeld verplaatst en verschillende rotaties van het schaakbord opneemt. Op die manier bevat de dataset meer gespreide informatie om de intrinsieke parameters nauwkeuriger te kunnen bepalen.

Met het juiste beeldverwerkingsalgoritme kan je vervolgens de pixel coordinaten van het patroon in de afbeeldingen gaan detecteren. Daarna kan je een optimalizatie algoritme gebruiken om de waarden van de intrinsieke parameters te zoeken die het optimale verband geven tussen het opgemeten schaakbordpatroon en de schaakbord detecties in de afbeeldingen. Deze algoritmes zijn typisch voorhande in de meeste beeldverwerking toolboxen zoals OpenCV of Matlab’s Computer Vision Toolbox.

Bron: https://www.researchgate.net/figure/Checkerboard-corner-detection-for-camera-calibration-Top-row-shows-results-from-the_fig2_280111830

 

Toepassingen
Eens de intrinsieke parameters gekend zijn, kunnen ze gebruikt worden voor verschillende toepassingen, zoals het corrigeren van de lensdistortie in software.

Bron: https://medium.com/analytics-vidhya/camera-calibration-with-opencv-f324679c6eb7

 

Een andere toepassing is om de pose van een gekend patroon in de afbeelding te bepalen. De figuur hieronder toont de poses van enkele ArUco markers, die bijvoorbeeld gebruikt kunnen worden voor Augmented Reality toepassingen.

 

Bron: https://docs.opencv.org/master/d5/dae/tutorial_aruco_detection.html Bron: https://github.com/fdcl-gwu/aruco-markers/blob/master/images/detected_cube.gif

 

Andersom kan een gekend patroon met een gekende pose in een bepaald assenstelsel ook gebruikt worden om de pose van de camera te berekenen in datzelfde assenstelsel. Deze laatste toepassing brengt ons naadloos bij de extrinsieke camera calibratie.

 

Camera pose: extrinsieke parameters

Theorie
De extrinsieke parameters beschrijven de pose van de camera in een gekozen assenstelsel. Ze bestaan uit een translatie- en rotatievector. De translatievector geeft de positie van de camera in het gekozen assenstelsel, terwijl de rotatievector de orientatie van de camera bevat.

Praktijk
Je kan in principe met de juiste meettoestellen proberen te bepalen wat de positie en orientatie van de camera is in een gekozen assenstelsel. Het alternatief is om deze parameters eveneens experimenteel te bepalen. In dit experiment ga je opnieuw een bepaald patroon in het gezichtsveld van de camera leggen, zoals een schaakbordpatroon of ArUco marker. Anders dan bij de bepaling van intrinsieke parameters, is het deze keer niet nodig om meerdere afbeeldingen te nemen uit verschillende perspectieven. Wat wel nodig is, is het bepalen van de positie en orientatie van het patroon in het gekozen assenstelsel. Bovendien heb je ook de intrinsieke parameters nodig om het verband tussen afbeelding en camerasensor te gebruiken in de volgende stap.

De volgende stap bestaat uit een algoritme dat het patroon in de foto detecteert (net zoals bij het bepalen van de intrinsieke parameters) en vervolgens de pose van de camera berekent aan de hand van het gedetecteerde patroon en diens pose in het assenstelsel dat je zelf gemeten hebt. Opnieuw zijn zulke algoritmes typisch wel voorhande in de meeste beeldverwerking toolboxen.

Toepassingen
Met de volledige calibratie (intrinsiek plus extrinsiek) kan je nu voor eender welk punt in het gekozen assenstelsel berekenen waar dit punt in de afbeelding ligt. De figuur hieronder toont dit bijvoorbeeld aan voor het punt op de boom waarvan de 3D positie in het gekozen assenstelsel `Ow` gekend is. Met de extrinsieke parameters kan je eerst bepalen waar dit punt in het camera assenstelsel `Oc` ligt. De intrinsieke parameters kan je tenslotte gebruiken om de transformatie van het 3D camera assenstelsel naar de 2D afbeelding `Oi` te doen.

Bron: https://nl.mathworks.com/help/vision/ug/camera-calibration.html

 

Het omgekeerde is helaas niet meteen waar: het is niet mogelijk om voor elk punt in de afbeelding eenduidig te bepalen waar dit punt in het gekozen assenstelsel zou liggen. Dat is omdat we hier een transformatie van 2D naar 3D voor nodig hebben. Uit de figuur kan je zien dat het punt in de afbeelding overeen kan komen met eender welk punt op dat op de oranje lijn gelegen is. Je hebt dus nog 1 onbekende over: de afstand van het werkelijke punt langs de lijn. Om dit probleem op te lossen kan je bijvoorbeeld een extra camera plaatsen die uit een ander perspectief kijkt, zoals getoond is in de figuur hieronder. Camera C1 detecteert punt A in de afbeelding als a1, waardoor we via de calibratie van deze camera kunnen achterhalen dat punt A ergens op lijn R1 moet liggen. Analoog weten we voor camera C2 dat het punt A ergens op de lijn R2 moet liggen. Aangezien beide lijnen slechts 1 snijpunt hebben, kunnen we nu de 3D positie van punt A eenduidig bepalen. Merk op dat beide camera’s dus volledig gecalibreerd zijn. Een extra moeilijkheid in de praktijk is vaak om te bepalen dat de punten a1 en a2 in de twee afbeeldingen overeenkomen met eenzelfde punt A. Voor meer informatie over dit gebied van computer visie kan je verwijzen naar stereovisie of 3D reconstructie.

Bron: https://www.researchgate.net/figure/Diagram-of-3D-reconstruction-using-two-cameras-OC-1-and-OC-2-represent-the-optical_fig3_230566131

 

Auteur
PIETER DE CLERCQ
Pieter is een onderzoeker/ingenieur gespecialiseerd in het verwerken van camera en lidar data voor object detectie en perceptie voor autonome voertuigen. Hij heeft ervaring in deep learning en andere takken binnen AI, maar ook in de meer klassieke computer vision en signaalverwerking.

Contacteer EUKA/Flanders Make voor meer informatie
Updates en nieuwe artikels ontvangen in je mailbox? Schrijf je dan snel in voor onze nieuwsbrief!

Pin It on Pinterest