LabVIEWForum.de
Daten aus einem 1D-Array filtern - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Daten aus einem 1D-Array filtern (/Thread-Daten-aus-einem-1D-Array-filtern)

Seiten: 1 2


Daten aus einem 1D-Array filtern - IngDanny7 - 25.02.2015 14:53

Hallo,

Habe ein kleines Problem bei meinem Projekt und hänge seit den letzten Tagen daran.

Und zwar bekomm ich nach einer Reihe von angewendeten Filtern von einem Bild die erkannten Punkte einer Schweißnaht. Diese Punkte sind dann in einem 1D-Array bestehend aus einem Cluster mit 2 Elementen (X & Y Wert) zusammengefasst.

Mein Problem nun: ich möchte diese Punkte so anzeigen lassen das ich "so gut es geht" nur die Punkte, welche direkt auf der Schweißnaht liegen anzeigen lasse. Dazu muss ich die Y-Werte untereinander vergleichen und dann bei den dazugehörigen X-Werte n schauen welcher näher ist am Mittelwert aller Punkte.
Da an manchen Y-Stellen sogar 3 X-Werte zu finden sind geht es ein wenig über meine Vorstellungskraft wie ich das am einfachsten realisieren könnte. Ich möchte ganz einfach für einen Y-Wert maximal 2X-Werte bekommen, jedoch nur dann 2 wenn dieser auf der anderen Seite der Naht liegt.

Für den weiteren Schritt dachte ich mir dann auch schon ob es funktioniert wenn ich dann zwischen den Punkten interpoliere damit ich so gut es geht die gesamte Schweißnaht umrande für anschließende Vermessung des Abstandes.


Hoffe mir kann jemand helfen.Box

LG

[attachment=52224]


RE: Daten aus einem 1D-Array filtern - GerdW - 25.02.2015 15:28

Hallo Ing,

Zitat:Dazu muss ich die Y-Werte untereinander vergleichen und dann bei den dazugehörigen X-Werte n schauen welcher näher ist am Mittelwert aller Punkte.
Es ist generell ungünstig, Floats auf Gleichheit zu prüfen! Der Vergleich mit Null zählt auch dazu…

Was du machen kannst: den Abstand zweier Punkte berechnen? Wie? Pythagoras hilft…

Tipp: Mit komplexen Zahlen ist ein Abstand sehr schnell berechnet:
[attachment=52225]
Genauso kannst du auch den Mittelpunkt berechnen und dann den Abstand aller Punkte vom Mittelpunkt…

Hallo Danny aka Max,

Crossposts bitte immer als solche kennzeichnen!


RE: Daten aus einem 1D-Array filtern - IngDanny7 - 26.02.2015 09:24

Danke für die schnelle Antwort (Ja im englischen Forum hat mein werter Kollege Max, zur Sicherheit, die selbe Frage gepostet)!

Leider wurde meine Frage etwas falsch verstanden:
[attachment=52229]

Auf einer Y-Koordinate kann es vorkommen, dass ich mehrere Punkte mit unterschiedlichen X-Koordinaten habe (hier zB. 5 Punkte). Diese sind für jede y-Koordinate unterschiedlich!
Es kann auch vorkommen, dass mehrere Punkte übereinander liegen (3+4), obwohl diese von uns in einer for-Schleife vorher entfernt werden.

Nun ist es mein Ziel aus den 5 Punkten, jene 2 auszuwählen, welche links und rechts vom avg am nächsten sind (Der avg-Punkt wurde vorher bereits berechnet - zur Anmerkung: dieser ist das Ergebnis zweier anderer Punkte, nicht der avg der 5 Punkte).

Das Bild als Beispiel genommen, benötige ich schlussendlich Punkt 2 und 3 oder 4. die anderen Punkte sollen aus dem Array gelöscht werden.


Ich hoffe ich habe mich nun klarer ausgedrückt Box Box


RE: Daten aus einem 1D-Array filtern - GerdW - 26.02.2015 09:42

Hallo Danny,

Zitat:benötige ich schlussendlich Punkt 2 und 3 oder 4. die anderen Punkte sollen aus dem Array gelöscht werden.
Dann berechne den Abstand deiner Punkte vom Mittelwert (Beispiel siehe im Beitrag zuvor). Wähle die drei Punkte mit den kleinsten Abständen.

Das sind zwei Teilprobleme. Das erste habe ich dir oben schon gezeigt, das zweite erfordert eine Sortierung der Ergebnisse und das Auswählen der ersten drei Resultate. Hört sich nicht schwierig an!
Kleine "Komplikation": du willst Punkte links und rechts vom Mittelwert haben und musst deshalb bei deiner Sortierung darauf achten, jeweils mindestens einen Punkt von jeder Seite zu erwischen…

Zitat:Es kann auch vorkommen, dass mehrere Punkte übereinander liegen (3+4), obwohl diese von uns in einer for-Schleife vorher entfernt werden.
Wie ist das möglich? Dann funktioniert wohl eure "Entfernen-Schleife" nicht…


RE: Daten aus einem 1D-Array filtern - IngDanny7 - 26.02.2015 11:09

(26.02.2015 09:42 )GerdW schrieb:  ... und das Auswählen der ersten drei Resultate.

Das ist eben unser Problem. Es sind eben nicht immer drei gleiche Punkte. Es kann sein, dass nur 2 gleich sind oder aber auch 14. Ich muss irgendwie jeden einzelnen Punkt mit jeden anderen vergleichen, daraus die Anzahl der gleichen Punkte herausfinden und dann aus diesen bis auf zwei bestimmte alle löschen.

eines unserer etlichen Lösungsversuche
[attachment=52233]


RE: Daten aus einem 1D-Array filtern - GerdW - 26.02.2015 11:16

Hallo Danny,

du hängst immer so tolle Bilder an. Dummerweise kann man mit Bilder NICHTS anfangen…

Besser wäre es, wenn du ein VI anhängst. Eines, welches Beispieldaten enthält! (Daten in Arrays anzeigen lassen, Menü->Edit->Aktuelle Werte als Default setzen, speichern)
Und besser wäre es, wenn du eine klare Aufgabenbeschreibung erstellen könntest!

Zitat:Ich muss irgendwie jeden einzelnen Punkt mit jeden anderen vergleichen
Abstand der Punkte berechnen (siehe oben): wenn kleiner als Schwellwert, dann liegen die Punkte übereinander…


RE: Daten aus einem 1D-Array filtern - IngDanny7 - 26.02.2015 14:51

Hallo Gerd,

okay hier mein VI samt Werte
[attachment=52239]

+

der neueste Lösungsversuch
[attachment=52240]
anschlüsse:
array3 = y-Array
array2 = x-Array



Die Idee mit den komplexen Zahlen wird bei uns nicht funktionieren, wir müssen im y-Array schauen an welchen stellen gleiche werte auftreten und dann an diesen Stellen im x-Array die Werte raussuchen und dann nur einen Wert links vom average und einem rechts vom average behalten und zu diesem dann auch den y-Wert wieder dazu schreiben.

So wie ich deinen Vorschlag verstehe funktioniert dieser nur wenn ich y mit x vergleichen möchte...

LG


RE: Daten aus einem 1D-Array filtern - GerdW - 26.02.2015 15:25

Hallo Danny,

hier mal dein "Werte sortieren" im Anhang.

Ich habe die Rundung nach Int32 weggelassen - ist die sinnvoll und gewollt?
Ihr habt 6706 X-Werte (im Beispiel-VI), die sich auf einen Bereich von 1773.41 bis 1926.21 (Differenz ~= 150) verteilen. Wollt ihr da wirklich gnadenlos die Nachkommastellen wegrunden?
Warum habt ihr 80% Nullen in euren Daten?


RE: Daten aus einem 1D-Array filtern - IngDanny7 - 26.02.2015 15:28

Hallo Gerd

(26.02.2015 15:25 )GerdW schrieb:  Ich habe die Rundung nach Int32 weggelassen - ist die sinnvoll und gewollt?

Ich richtete mich nur an deinen Hinweis ;-)
(25.02.2015 15:28 )GerdW schrieb:  Es ist generell ungünstig, Floats auf Gleichheit zu prüfen! Der Vergleich mit Null zählt auch dazu…



RE: Daten aus einem 1D-Array filtern - GerdW - 26.02.2015 15:30

Hallo Danny,

Zitat:Ich richtete mich nur an deinen Hinweis ;-)
Es ist generell ungünstig, Floats auf Gleichheit zu prüfen! Der Vergleich mit Null zählt auch dazu…
Da wusste ich noch nicht, dass ihr eure Messdaten durch Einfügen von Nullen auf die 5fache Menge aufblast…

Zurück zum Sortier-Problem: Sind die 6700 Werte im Beispiel-VI alle auf eine X-Position bezogen? Wonach bestimmt ihr diese X-Position?
So sehen deine Beispieldaten in einem XY-Graph aus:
[attachment=52242]