Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Sp3iky

Treue Seele

  • »Sp3iky« ist der Autor dieses Themas

Beiträge: 232

Beruf: Entwicklungsingenieur

  • Private Nachricht senden

1

04.04.2012, 16:01

Nearest Neighbor Point Cloud Matching

Hi Leute,

ich sitze gerade an einem Problem, bei dem ich einfach nicht auf einen passenden Algorithmus komme.

Zur Ausgangslage:

ich habe zwei zweidimensionale Punktwolken. Meine "Soll-Punktwolke" mit fest definierten Punkten hat immer 6 Elemente. Meine "Objektpunktwolke", die ich überprüfen will, hat 6 oder weniger Elemente. Es ist also nicht unbedingt der performanteste Algorithmus gefragt.

Ich möchte am Ende für jeden Punkt aus der Objektpunktwolke den nächstgelegenen Punkt aus der Sollpunktwolke. Dafür berechne ich mir für jeden Punkt die Abstände zu allen Punkten der Sollpunktwolke. Soweit so gut.

Nun geht es aber darum die jeweils am besten passendsten Punktpaare zu finden, so dass kein Punkt aus der Sollpunktwolke mehr als einmal vor kommt. Wenn ich einfach immer den nächstgelegenen Punkt verwende, können Punkte mehrmals verwendet werden.

Irgendwie müsste man dann den zweibesten Punkt nehmen und falls der schon vergeben ist, wieder schauen, welcher der konkurrierenden Punkte näher liegt...das Spiel geht dann aber immer so weiter. Dafür will mir im Moment einfach keine ordentliche Implementierung einfallen. Ich konnte auch leider nichts dazu finden, wie das andere gemacht haben, denn der Beispielcode hat meist mit Klassifizierung zu tun, oder verwendet einfach nur einen Punkt und nicht zwei Punktwolken.

Würde mich freuen, wenn ihr mir da weiterhelfen könntet.

Gruß Sp3iky

Achja, das Ganze programmiere ich in C#. Das verhindert leider, dass ich die OpenCV-Funktion dafür verwende, da der C# Wrapper eine Access Violation auslöst (bestätigtes, ungelöstes Problem).

Mastermind

unregistriert

2

04.04.2012, 16:57

Und was macht die OpenCV Funktion intern?

Sp3iky

Treue Seele

  • »Sp3iky« ist der Autor dieses Themas

Beiträge: 232

Beruf: Entwicklungsingenieur

  • Private Nachricht senden

3

04.04.2012, 17:13

So wie es aussieht nicht das, was ich haben möchte. Dort können doppelte Zuordnungen auftreten.

Mastermind

unregistriert

4

04.04.2012, 17:23

Wikipedia sagt dein Problem heißt minimal maximum Matching (Finde ein maximum Matching, das bezüglich der Kantenkosten minimal ist)

http://de.wikipedia.org/wiki/Matching_%28Graphentheorie%29

Leider ist dort kein Algorithmus dafür angegeben, aber wenn es einen gibt kennt google den bestimmt.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

04.04.2012, 19:55

Wenn es auf die Performance überhaupt nicht ankommt, dann bilde alle möglichen Paare. Danach addierst die Abstände zwischen den Punkten jedes Paares auf und guckst bei welcher Version das Ergebnis minimal ist. Je nach Anwendungsfall kann so ein einfacher Brute Force Ansatz ausreichen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige