• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

2D data stitchen

Status
Niet open voor verdere reacties.

mcs51mc

Gebruiker
Lid geworden
19 feb 2008
Berichten
386
Hallo,

In bijgesloten bestand zijn 3 sheets met data te vinden.
Elk dataset moet 30 graden verdraaid worden tov de vorige.
Dat is piece of cake
De datast moet vervolgens verschoven worden in X en Y zodanig dat het begin van de volgende overlapt aan het einde van de vorige.
Hoeveel datapunten de overlap bevat is niet gekend willekeurig).
Maar er is altijd gegarandeerd een overlap.
Die X/Y verschuiven is te vinden in cellen B13 & B14 van elke sheet.
Ik heb het voor die 3 sheets visueel gedaan
Ik moet er zo nog 9 doen in deze file en er komen nog veel files achter.

U hoort mij misschien al komen... ...

Welk algoritme kan gebruikt worden om automatisch cellen B13 & B14 in te vullen.


"Stitchen" hoor ik jullie al roepen!
Inderdaad maar hoe gaat dat in zijn werk????

Alvast bedankt voor jullie inputs!

Bekijk bijlage AllRawData--V002b.xlsx
 
Je kan toch op blad 1 berekenen welke x,y-coordinaat overeen komt met 30graden ten opzichte van de oorsprong (0,0).
Op blad 2 pak je de 1e coordinaat en die verschuif je naar de gevonden coordinaat op blad 1.
 
Bedankt voor je reactie alphamax!
Echter, ik heb je eerste zin wel 10 keren gelezen en overlezen maar begrijp nog steeds niet waar je naartoe wilt :(
Elke boog is 30 graden en de oorsprong van het assenstelsel kan eender waar liggen.
Dus, neen sorry ik begrijp het niet :(

Hoeveel graden de segmenten overlappen is willekeurig.
Je kan zien dat de 3de de 2de meer overlapt dan de 2de de 1ste.


Wil je je idee aub proberen te verduidelijken?
Alvast bedankt hiervoor




PS: Heeft niets te maken met de vraag die je aanhaalt.
 
Kan je me uitleggen waar deze data vandaan komt, dat maakt het makkelijker om een oplossing te bedenken
Moet de data uiteindelijk ongeveer overeenkomen met een cirkel, een ellipse of een andere geometrische figuur?

De data vorm een parabool vorm
Wat je nu doet is roteren om 0,0 dit ligt linksonder de parabool, dit lijkt me in eerste instantie niet goed, gezien de eindvorm waar je naar toe wil.
Eigenlijk zou je willen roteren om een punt midden boven de parabool.

p.s. dit lijkt me wel een leuke uitdaging
 
Laatst bewerkt:
het gekke is dat als ik de data in 1 vergelijk met de data in 2 :
ik heb 3 uit elkaar liggende punten genomen van beide data reeksen .
en ik kom op behoorlijk verschillende stralen en middelpunten.

dus met exact berekenen kom je er niet. visueel is er best een mouw aan te passen.

ps waarom zijn de getallen in de A en B kolom in de 3 data pagina's niet de zelfde?
 
Laatst bewerkt:
Eerst en vooral bedankt voor het helpen meedenken!

Er zat een foutje in blad 1 van vorig bestand, er ontbraken wat getallen aan het begin.
Correcte versie hier.

Je moet de data zien als segementen van een cirkel overlappend opgemeten.
Nu is de kunst om die segementen op de juiste wijze aan elkaar te koppelen om terug de cirkel uit te komen.
Bijgesloten screenshot "capture.jpg" toont segmenten 8 & 9 die bijna goed staan, nog een beetje dX bijsturen en 't is ok :)
Wanneer ik dat manueel & visueel doe voor de 12 segmenten kom ik cirkel uit, wat ik verwachtte; zie bestand Capture-2.JPG

Dus sylvester-ponte
Er moet ergens een foutje in je berekeningen zijn want alle segmenten hebben dezelfde straal maar andere centerpunten.
Tussen haakjes: (Mocht er geen overlap zijn dan is dit misschien de oplossing, de afstand tussen de centerpunten... ...)


Eigenlijk zit ik met een probleem met 3 onbekenden:
a) de overlap
b) verschuiving in X
c) verschuiving in Y


PS: Bijgesloten grafieken hebben een betere resolutie dan het bestand dat ik poste omdat het bestand slechts 10% van de data van één segment bevat.

Bekijk bijlage AllRawData--V002b.xlsx
Capture.JPG
Capture-2.JPG
 
Laatst bewerkt:
@sylvester-ponte

Je hebt gelijk ! :( !
Er is inderdaad véél verschil in straal van het 2de segment.
1ste: 1521 (zelfde range als derde)
2de: 1753!!!
3de: 1503 (zelfde range als eerste)

Nu, dat is voor mij geen probleem.
Niets in de natuur is perfect rond, segment 2 zal een vlakke zone hebben, geen probleem
Zijn uiteinden moeten matchen aan 1 & 3 no matter what!


Sorry om te denken dat je een foutje zou hebben gemaakt :)
 
je gaat er van uit dat het cirkelsegmenten zijn.
er zijn per segment maar 3 punten nodig om de straal te berekenen.

een optie is:
bereken van ieder segment de straal .
neem de grootste of de gemiddelde straal als basis.
plak alle segmenten tegen de basis cirkel met of zonder overlap.
het zal er een beetje hobbelig uit zien.
 
Laatst bewerkt:
Is een mogelijkheid maar ik dacht om de pieken en dalen te matchen in de overlapzone.
Zoals je kan zien op de grafiek in mijn vorige post matchen die pieken en dalen perfect in de overlapzone.
Waarom ze dan niet gebruiken als bakens om 2 segmenten te matchen?
Ik dacht aan iets gelijkaardig met cross correlation maar dan in 2D.
Probleem is, hoe doe je dat?????
 
Hier alvast een bestand met code die de bestpassende cirkel trekt tussen meer dan 3 punten.
Het is volgens het "Algebraic circle fits algorithm" van "Taubin".
Er zijn 2 soorten "circle fit algorithms", algebraische en geometrische
Algebraische zijn sneller en eenvoudiger en gevoelsmatig iets minder precies
Geometrische zijn langzamer en complexer en gevoelsmatig iets preciezer
Maar gezien jouw data, veel punten in een van een gedeelte van een cirkel, denk ik dat algebraisch wel voldoende moet zijn.
 

Bijlagen

Laatst bewerkt:
Het blad berekent:
de lengtes van de lijn, kolom "Lengte"
de hoek tussen 2 lijn, kolom "Hoek"
Vervolgens wordt gezocht op blad "2"
Als het verschil tussen "index lijn 1" en "index lijn 2", 1 is, dan is er een gelijke combinatie qua lijnlengte op blad "1" en blad "2".
Als daarnaast ook de hoek nog klopt is dit een potentieele overlap.
Kijk op blad "1" van onder naar beneden om de eerste potentieele overlap te vinden.

met deze potentieele overlap kan je proberen een rotatie/translatie matrix te vinden
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan