Inhoudsopgave:
- Stap 1: Evalueer de complexiteit van de taak
- Stap 2: Vind de juiste aanpak
- Stap 3: Theta-histogram berekenen
- Stap 4: Bereken Rho-histogram
- Stap 5: Zoek de centrale knoop
- Stap 6: Kies uit 2 alternatieven
- Stap 7: Bepaal de externe hoeken
- Stap 8: Probeer het in de praktijk
Video: 3D-reconstructie van een enkele foto: 8 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
De taak van 3D-reconstructie wordt meestal geassocieerd met binoculair zicht. U kunt ook een enkele camera rond het object bewegen. Ondertussen, als de vorm van het object bekend is, kan de taak worden opgelost met een enkele foto. Dat wil zeggen dat je maar één camera hebt en die beweegt niet. Laten we eens kijken hoe we het stap voor stap kunnen doen. We zullen Rubik's Cube gebruiken omdat het goed gestandaardiseerd is en een uitgebreide reeks functies heeft. Het kan worden beschouwd als een heel eenvoudig object en tegelijkertijd een gecompliceerde constructie. Dus machine vision moet substantiële obstakels overwinnen om de taak te voltooien.
Stap 1: Evalueer de complexiteit van de taak
Op het eerste gezicht is de taak eenvoudig. Zoek de centrale knoop waar 3 randen van de kubus samenkomen en teken deze randen. Uit hun coördinaten is het mogelijk om de afstand tot de camera en de rotatiehoeken te berekenen. Het probleem is dat deze lijnen niet bestaan. In de linkerafbeelding zie je dat elke rand wordt weergegeven door 2 evenwijdige lijnen. Bovendien laat de afbeelding rechtsboven zien dat elk van hen is opgedeeld in 3 segmenten. Bovendien, als we een variant van de populaire Hough-transformatie toepassen die lijnsegmenten kan detecteren, voert deze de taak uit met enkele fouten die detectie van de centrale knoop onmogelijk maken. Als de uiteinden elkaar niet bereiken, is er geen enkel punt. Als de detectie voorbij het einde schiet, zal het eruit zien als de knoop in het midden van de rand zoals je op de 2 resterende afbeeldingen ziet.
Stap 2: Vind de juiste aanpak
Wanneer te veel details deterministische algoritmen onwerkbaar maken, is het tijd om een probabilistische benadering te overwegen. Als we de gemiddelde parameters van de afbeelding berekenen, zullen hun fouten aanzienlijk worden verminderd en paradoxaal genoeg zal de methode betrouwbaarder blijken te zijn. De standaard Hough-transformatie voert geen lijnsegmenten uit. Alleen de helling theta en de afstand rho vanaf de oorsprong van de coördinaat. Ze vormen het Hough-ruimtegedeelte waarvan hierboven is weergegeven. Hier komt theta overeen met de horizontale as. Heldere vlekken markeren mogelijke lijnen op de afbeelding. Merk op dat meerdere van dergelijke plekken boven elkaar liggen. Geen wonder, op onze afbeelding zijn er veel parallelle lijnen. Ze hebben dezelfde theta en verschillende rho.
Stap 3: Theta-histogram berekenen
Laten we dergelijke clusters detecteren. Voor dit doel zullen we metingen samenvatten voor alle punten in de Hough-ruimte met dezelfde theta. U ziet het bijbehorende histogram op de afbeelding. Een paar opmerkingen over metingen. Wanneer u met afbeeldingen in pixelcoördinaten werkt, gaat de X-as zoals gewoonlijk, maar Y wijst naar beneden, dus de oorsprong van de coördinaat is de linkerbovenhoek en theta moet vanaf de X-as met de klok mee worden gemeten. Houd er rekening mee dat het hele bereik van theta op de afbeelding 180 graden is, u kunt bij benadering controleren of 3 grote pieken 3 overheersende hellingen op de afbeelding vertegenwoordigen.
Stap 4: Bereken Rho-histogram
Nu we 3 hoofdclusters van parallelle lijnen kennen, laten we de lijnen binnen elk ervan scheiden. We kunnen dezelfde aanpak herhalen. Laten we een kolom nemen uit de Hough-ruimte die overeenkomt met één piek op het theta-histogram. Vervolgens zullen we een ander histogram berekenen waarbij de X-as de rho-waarde vertegenwoordigt en de Y - samengevatte waarden voor deze rho. Het is duidelijk dat de som minder zal zijn, dus deze grafiek is niet zo soepel. Desalniettemin zijn pieken duidelijk zichtbaar en het aantal ervan (7) komt exact overeen met het aantal parallelle lijnen op het bronbeeld. Helaas zijn niet alle grafieken zo perfect, maar het principe is duidelijk.
Stap 5: Zoek de centrale knoop
Als we de centrale piek op het rho-histogram voor elke theta nemen, krijgen we 3 lijnen die rood zijn op de afbeelding. Hun snijpunt markeert het noodzakelijke punt.
Stap 6: Kies uit 2 alternatieven
Je ziet dat elke lijn vanuit het centrale punt in beide richtingen gaat. Hoe de juiste helft bepalen? Laten we theta3 nemen. Stel dat we het onderste deel van deze lijn nemen. Laten we nog een Hough-ruimte berekenen, alleen voor het deel van de afbeelding van 2 groene lijnen naar de rechterbovenhoek van de afbeelding. Maak er vervolgens een theta-histogram voor. Je ziet dat de derde piek volledig is verdwenen dus we hebben de juiste keuze gemaakt.
Stap 7: Bepaal de externe hoeken
Nu kunnen we de eerste en de laatste piek op rho-histogrammen gebruiken om blauwe lijnen te tekenen die de rode randen doorsnijden en de resthoeken markeren. De taak is opgelost.
Stap 8: Probeer het in de praktijk
De illustraties voor deze Instructable zijn gemaakt met Perception 1.0. Dit is gratis software die OpenCV gebruikt - een krachtige bibliotheek voor computervisie. Het kan ook worden gekoppeld aan WinNB die werd gebruikt in mijn andere Instructable, waardoor robotica een zichtvermogen kreeg. U kunt beide programma's downloaden van nbsite. Voor de installatie voert u gewoon het gedownloade exe-bestand uit. Later kunt u het verwijderen met de standaardtool van Windows. De site bevat ook bronnen over computervisie en aanverwante onderwerpen. In Perception vindt u de beschreven methode van 3D-reconstructie en vele andere. Het voordeel van dit programma is dat het het eindresultaat samen met tussentijdse gegevens uitvoert. Je bent in staat om te onderzoeken hoe computer vision werkt zonder een programmeur te zijn. Wat de invoer betreft, heeft elke methode speciaal geselecteerde typische monsters. Je kunt natuurlijk ook je eigen gebruiken. Het is mogelijk om beelden in te voeren vanuit een bestand of vanaf de camera van de computer. Neem gerust contact met mij op voor vragen of suggesties.
Aanbevolen:
100+ schakelaars in een enkele pin van Arduino - Ajarnpa
100+ schakelaars in een enkele pin van Arduino: inleiding Heb je geen invoerpinnen meer? Maak je geen zorgen, hier is een oplossing zonder shift registers. In deze video gaan we leren over het aansluiten van meer dan 100 schakelaars op een enkele pin van Arduino
Een DIY Arduino bouwen op een PCB en enkele tips voor beginners: 17 stappen (met afbeeldingen)
Een DIY Arduino bouwen op een PCB en enkele tips voor beginners: Dit is bedoeld als een gids voor iedereen die zijn eigen Arduino soldeert uit een kit, die kan worden gekocht bij A2D Electronics. Het bevat veel tips en trucs om het succesvol te bouwen. Je leert ook wat alle verschillende componenten d
Autonome regeling van het toerental van de motor met behulp van een feedbacksysteem van een op IR gebaseerde toerenteller - Ajarnpa
Autonome regeling van het toerental van de motor met behulp van feedbacksysteem van een op IR gebaseerde toerenteller: er is altijd behoefte aan automatisering van een proces, of het nu een eenvoudig/monsterlijk proces is. methoden om ons kleine stukje land water te geven / te irrigeren. Het probleem van geen huidige toevoerleiding
Van een momentopname tot een geweldige foto: Fase één: 17 stappen
Van een momentopname tot een geweldige foto: Fase één: Foto's maken van mensen en plaatsen tijdens straatdansfestivals kan heel kleurrijk en leuk zijn. We worden allemaal erg opgewonden door hier en daar te klikken en ons voor te stellen hoe geweldig de kostuums op onze foto's zouden uitkomen, wat zouden we trots zijn op onze prins
Een batterijpakket van 4,5 volt maken van een batterij van 9 V: 4 stappen
Een 4,5 volt batterijpakket maken van een 9V-batterij: deze instructie gaat helemaal over het splitsen van een 9V-batterij in 2 kleinere 4,5V-batterijpakketten. De belangrijkste reden om dit te doen is 1. Je wilt 4,5 volt 2. Je wilt fysiek iets kleiners dan een 9V batterij