Forumregels
(Middelbare) school-achtige vragen naar het forum "Huiswerk en Practica" a.u.b.
Zie eerst de Huiswerkbijsluiter
Sgrovert
Artikelen: 0
Berichten: 4
Lid geworden op: za 21 okt 2023, 15:16

2D foto's omzetten in 3D model

Afgelopen jaar ben ik begonnen om, met behulp van een camera, een 3d model van de verlichting in mijn kerstboom te maken. De lampjes in de kerstboom zijn per stuk aanstuurbaar en ik wil graag een model hebben, waarvan voor elk lampje een x, y, z coördinaat bekend is. De image processing heb ik vrij ver klaar. De algoritmes die ik daarvoor bedacht heb staat op https://gathering.tweakers.net/forum/li ... es/2153702
Het resultaat van de image processing ziet er als volgt uit :
Afbeelding Afbeelding

In het centrum van de boom loopt een blauwe lijn
Y = m * X + c.
m en c zijn met een least-squares fit bepaald en lijkt vrij aardig door het centrum van de boom te lopen.

Bovenstaande afbeeldingen zijn met dezelfde camera gemaakt, waarbij de camera met een onbekende hoek om de boom geroteerd is. Te zien is dat een flink aantal leds in beide afbeeldingen aanwezig zijn. Leds hebben allemaal een uniek Id en in beide afbeelding is dit hetzelfde. M.A.W, led 60 in afbeelding A is ook led 60 in afbeelding B

Aanwezig is de volgende informatie:
In elke afbeelding:
- De center lijn. Voor deze geld X = 0, Y = 0
- Voor elke led positie I, J in de afbeelding.

In de afbeeldingen zijn positie I, J van de led geen coördinaten, maak representeren deze hoeken. Een camera heeft een lens en de lichtstralen die op het middelste pixel vallen komen recht van voren. Hoe verder een pixel naar buiten zit, hoe groter de hoek van de lichtstraal.

Vraag : Hoe kan van elke led de X, Y, Z coördinaat bepaald worden?
Ik wil graag voor elke led die in beide afbeeldingen zit een (x, y, z) coördinaat bepalen.
Voor beide camera's een x, y, z coördinaat voor de positie van de camera.

Omdat het assenstelsel in principe niet gedefinieerd is, kan alles relatief van elkaar bepaald worden.
- Het centrum van de boom loopt door (0, 0, 0)
- Een camera mag vrij gekozen worden (1, 0, 0)

Dit zou het stelsel fixed maken, waarin alle coördinaten bepaald moeten zijn.


Graag zou ik hulp hebben hoe nu verder. Kwa oplossing hoop ik op een matrix uit te komen, welke met een least sqaures of ander algoritme op kan lossing.

Leds hebben allemaal een eigen positie Lx

Voor elke led X kunnen 2 lijnen gedefinieerd worden:
C1 -> Lx
C2 -> Lx

Voor lijn C1 -> L1 en C1 -> L2 is de hoek die deze lijnen in punt C1 maken bekend. Dit is L1(I, J) - L2(I, J)

Per toegevoegde led aan de matrix komen er 3 onbekende bij Lx(x, y, z), maar elke lijn heeft 2 snijpunten, wat zou betekenen dat er 4 vergelijking op te stellen zijn. Bij meer vergelijkingen dan onbekende is dit probleem oplosbaar.
Gebruikersavatar
wnvl1
Artikelen: 0
Berichten: 3.039
Lid geworden op: di 20 jul 2021, 21:43

Re: 2D foto's omzetten in 3D model

De tweede camerapositie C2->(a,b,c) is ook volledig onbekend?

Is de richting van de normaal op het vlak van de camerasensor ook niet relevant in het verhaal?
Daar zeg je niets over.
Sgrovert
Artikelen: 0
Berichten: 4
Lid geworden op: za 21 okt 2023, 15:16

Re: 2D foto's omzetten in 3D model

De tweede camera positie is bijna volledig onbekend. Uit de data is wel te halen of de camera clockwise, of counter clockwise verplaatst is. Daarbij zal de verplaatsing < π en waarschijnlijk kleiner dan π < 2 zijn.
Vanaf het huis krijg ik de boom niet in 1 beeld. Vanaf de huiskant is het alleen mogelijk om 1 foto van onderaf en 1 van bovenaf te maken. De hoogte van de Camara's kan daardoor veel verschillen.

Ik weet niet of de normaal op het vlak van de camerasensor relevant is. Hij staat niet richting de oorsprong, maar wordt ook niet gebruikt als je lijn Lx -> C of (0,0,0) -> C zou plotten
Gebruikersavatar
wnvl1
Artikelen: 0
Berichten: 3.039
Lid geworden op: di 20 jul 2021, 21:43

Re: 2D foto's omzetten in 3D model

De hoek die je meet is de hoek tussen de lichtstraal van de led en de normaal op het vlak van de fotosensor. In dat opzicht lijkt het mij wel relevant om een algoritme te ontwikkelen.
Sgrovert
Artikelen: 0
Berichten: 4
Lid geworden op: za 21 okt 2023, 15:16

Re: 2D foto's omzetten in 3D model

De resolutie van mijn camera is 640 * 480. De normaal is volgens mijn dan 320, 240. De hoek van de lens weet ik niet, maar is uiteraard voor beide foto's hetzelfde. Ik denk dat de precieze lens niet relevant is, daar met een andere lens de camera verder weg kan staan voor dezelfde image. De hoeken tussen de normaal en een led is met de huidige resolutie dus (Li-320, Lj-240).
Gebruikersavatar
wnvl1
Artikelen: 0
Berichten: 3.039
Lid geworden op: di 20 jul 2021, 21:43

Re: 2D foto's omzetten in 3D model

Ik denk dat je normaal verwart met het midden. De normaal kan je beschrijven via de richtingsgetallen van de recht loodrecht op het vlak van de lens.
Sgrovert
Artikelen: 0
Berichten: 4
Lid geworden op: za 21 okt 2023, 15:16

Re: 2D foto's omzetten in 3D model

Je bedoelt dat de normaal van camera in het 3D model niet richting de oorsprong wijst. Dat klopt idd.
Maar volgens mij is in de 2d afbeeldingen de normaal wel in het midden. Indien deze daar niet in het midden zit, is de lens niet center symmetrisch.
Gebruikersavatar
wnvl1
Artikelen: 0
Berichten: 3.039
Lid geworden op: di 20 jul 2021, 21:43

Re: 2D foto's omzetten in 3D model

Ik heb het zelf nog nooit gedaan, maar er wordt hiervoor gewerkt met camera matrices die de mapping beschrijven van een camera van 3D-punten van objecten naar 2D-punten op een afbeelding.

https://en.wikipedia.org/wiki/Camera_matrix

Let op, je moet werken met homogene coördinaten.

Per camera heb je dan 11 onbekenden. Dus in jouw geval 2*11 = 22 onbekenden voor de camerametrices, en dan nog eens 6 voor de locatie van de 2 camera's. Als je n leds hebt, heb je 3n onbekende coördinaten. Dus in totaal 28+3n.

Als je n leds hebt, dan heb je 2*(2*n) 2-dimensionale coördinaten. Je kan jouw hoeken wel omrekenen naar coördinaten.
Als je voldoende leds hebt, wat in jouw geval zo is, moet je er geraken.

Kijk naar het deeltje projectieve reconstructie op de wiki link.

https://en.wikipedia.org/wiki/3D_recons ... ple_images


Een beetje achtergrond in lineaire algebra is wel handig.

Terug naar “Wiskunde”