INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Maximalwerte in Matrix erkennen und mit zugehörigem neuen Wert überspeichern



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

31.01.2018, 16:33
Beitrag #1

MartinNewBee Offline
LVF-Grünschnabel
*


Beiträge: 20
Registriert seit: Jan 2018

2016
2016
EN



Maximalwerte in Matrix erkennen und mit zugehörigem neuen Wert überspeichern
Hallo,
ich arbeite derzeit an einem Projekt für die Uni und bin in Folge dessen dabei ein Bildbearbeitungsprogramm in LabView zu schreiben. Das klappt auch alles schon ganz gut. Ich erzeuge aus zwei einem Referenzbild und einem fortlaufenden Scannbild ein Differenzbild. Aus dem Differenzbild lass ich mir dann mittels dem Intensitätsgraphen eine Matrix aller Grauwerte (für jeden Pixel) auslesen. Nun zu meinem Problem. Der Scann hat unterschiedlich viele Schritte und ich möchte eine Schleife programmieren, die für jeden Pixel in der Matrix des Differenzbilds den Maximalwert behält, diesen jedoch am ende nicht abspeichert, sondern mit der jeweiligen Scannerposition (ein x-Wert) überschreibt. Am Ende soll quasi eine Matrix der Bildpixel mit den unterschiedlichen Scannerpositionen für Maximalwerte des Intensitätsgraphen entstehen.

Meine Probleme sind im Wesentlichen:
- Ich bekomme eine Intensitätsmatrix für jede Scannerposition, aber ich weiß nicht wie ich diese verpacken muss damit nicht jede einzeln vorliegt sondern immer nur der Maximalwert für jeden Pixel in der Matrix behalten wird. Ich möchte nicht viele einzelne Matrizen haben sondern am Ende nur eine.
- Wie kann ich die Intensitätsmatrix mit der Scannerposition verknüpfen, damit für jeden maximalen Intensitätswert der richtige Wert der Position eingetragen wird. Oder dass überhaupt eine Scannerposition eingetragen wird.

Anbei ist ein Auszug aus meinem Programm.

Ich hoffe ich hab es nicht allzu verwirrend geschrieben und mein Problem wird klar. Ich bin Anfänger in LabView, daher no hate pls^^
Ich bedanke mich schon mal und hoffe ihr könnt mir weiterhelfen.

Beste Grüße


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
31.01.2018, 21:11 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2018 21:13 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Maximalwerte in Matrix erkennen und mit zugehörigem neuen Wert überspeichern
Hallo Martin,

Zitat:mittels dem Intensitätsgraphen eine Matrix aller Grauwerte (für jeden Pixel) auslesen.
- Ein Intensitätsgraph zeigt keine "Matrix" an, sondern ein 2D-Array.
- wenn du mit Arrays arbeitest, solltest du Arrayfunktionen verwenden - und nicht Matrix-Funktionen… (Jedenfalls nicht so wie bei dir.)

Zitat:immer nur der Maximalwert für jeden Pixel in der Matrix behalten wird.
Was genau willst du haben? Willst du ein 2D-Array haben, in dem jedes Element den Maximalwert aus allen "Scans"/"Intensitätsgraphen" darstellt? Dann nimm doch einfach die MinMax-Funktion…
(Bitte beachte meine Wortwahl: ich versuche wirklich die LabVIEW-Bezeichnungen aus der LabVIEW-Hilfe zu den einzelnen Elementen etc. zu verwenden, um möglichst eindeutig zu formulieren!)
   

Zitat:Ich hoffe ich hab es nicht allzu verwirrend geschrieben und mein Problem wird klar. Ich bin Anfänger in LabView, daher no hate pls^^
Kein "hate", nur "Manöverkiritik" Big Grin:
- zu viele lokale Variablen, zu wenige Schieberegister
- vollkommmen unaufgeräumt: wie soll man da durchblicken, wo du in 1 Monat auch nicht mehr durchblickst?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2018, 09:58
Beitrag #3

MartinNewBee Offline
LVF-Grünschnabel
*


Beiträge: 20
Registriert seit: Jan 2018

2016
2016
EN



RE: Maximalwerte in Matrix erkennen und mit zugehörigem neuen Wert überspeichern
Hallo Gerd,
danke für deine Tipps und die schnelle Antwort. Ich hab jetzt erstmal versucht das Choas etwas zu beseitigen. Deine Lösung zu den Maximalwerten hat super funktioniert, besten Dank!
Jetzt hab ich nur noch das Problem, dass ich den Maximalwerten jetzt noch jeweils den passenden x-Scannwert zuordnen muss. Beispielsweise verfährt der Scanner in 10 Schritten von 3,2-3,3 mm. wie kann ich jetzt innerhalb deiner zuvor gezeigten Schleife für die Maximalwerte hier gleich den X-Scannwert zuordnen lassen (am Besten in einem separaten Array).

Beste Grüße


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2018, 10:10 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2018 10:11 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Maximalwerte in Matrix erkennen und mit zugehörigem neuen Wert überspeichern
Hallo Martin,

Zitat:das Problem, dass ich den Maximalwerten jetzt noch jeweils den passenden x-Scannwert zuordnen muss. … (am Besten in einem separaten Array).
Du willst also zu jedem Element in deinem 2D-MAX-Array wissen, bei welcher X-Position es ermittelt wurde?
Dann musst du auch alle Elementen einzeln vergleichen und bei einem neuen MAX-Wert den Eintrag im "Positions-Array" anpassen…

Code:
i,j = Array-Größe
FOR i
  FOR j
   IF intensität[i,j] > max[i,j] THEN
     max[i,j] := intensität[i,j]
     pos[i,j] := x-position
   ENDIF
  NEXT j
NEXT i

Wirklich weniger lokale Variablen sind das aber nicht. "Aufgeräumt" ist das Bild auch nicht.
Und warum stellst du die ganzen numerischen Werte als Strings dar - und nicht eben als numerische Werte?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2018, 11:27
Beitrag #5

MartinNewBee Offline
LVF-Grünschnabel
*


Beiträge: 20
Registriert seit: Jan 2018

2016
2016
EN



RE: Maximalwerte in Matrix erkennen und mit zugehörigem neuen Wert überspeichern
Hallo Gerd,
ja das mit dem Code hatte ich mir auch schon mal überlegt. aber wie setze ich das ganze in LabView um? bin echt ein blutiger Anfänger was das Programmieren betrifft.

Das Thema mit den lokalen Variablen habe ich registriert, allerdings funktioniert das Programm so gerade und ich hab schon etwas gebraucht, um das so weit hinzubekommen. Daher würde ich das erstmal so lassen, aber ich behalte es im Hinterkopf und versuche daran zu arbeiten.

Meine Idee für LabView war: Ich setze beim ersten Schritt Einträge gleich dem X-Scannwert in einem neuen Array (bzw. in einer Matrix, wenn das denn geht). Anschließend fährt der Scanner einen Schritt weiter, mit deiner Schleife werden die Max-Werte behalten und kann ich dann meiner Matrix nicht einfach sagen, wenn neuer Wert behalten wird im Intensitätsarray, dann überschreib den Matrixeintrag mit neuem X-Scannwert.

Am Ende Brauch ich eigentlich nur ein Raster (ob Array oder Matrix ist eigentlich wurst) mit x = horizontale Pixel, y = vertikale Pixel und z= X-Scannwerte bei Maximaler Intensität.


Beste Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2018, 11:52
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Maximalwerte in Matrix erkennen und mit zugehörigem neuen Wert überspeichern
Hallo Martin,

die zwei FOR-Loops in meinem Pseudocode oben erledigen die ganze Array-Indizierung dank Autoindizierung.
Du brauchst nur den Vergleich in der innersten Loop programmieren…

Probier's mal aus! (Da lernst du auch gleich die LabVIEW-Grundlagen dabei!)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.02.2018, 11:17
Beitrag #7

MartinNewBee Offline
LVF-Grünschnabel
*


Beiträge: 20
Registriert seit: Jan 2018

2016
2016
EN



If than Für Matrixeinträge
Hallo,
wie muss ich eine If/than-Funktion für eine komplette Matrix darstellen, die alle einzelnen Einträge abfrägt?
Bsp:
M_x,y
if z < 10;
than set z =! 0;

mit dem Select-tool kann ich das zwar für eine einfache Zahl machen, aber sobald ich eine Matrix anschließen möchte funktioniert es nicht mehr.
Danke schonmal
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.02.2018, 11:25 (Dieser Beitrag wurde zuletzt bearbeitet: 08.02.2018 11:35 von GerdW.)
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: If than Für Matrixeinträge
Hallo Martin,

ich hoffe, du arbeitest mit 2D-Arrays und nicht etwa mit Matrizen…

Lösung: zwei FOR-Loops mit Autoindizierung. (Gehört zu den LabVIEW-Grundlagen…)

(Ich habe mal deine Themen zusammengefügt - ich wusste doch, dass wir das Thema schon einmal besprochen hatten!)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.02.2018, 13:40
Beitrag #9

MartinNewBee Offline
LVF-Grünschnabel
*


Beiträge: 20
Registriert seit: Jan 2018

2016
2016
EN



RE: Maximalwerte in Matrix erkennen und mit zugehörigem neuen Wert überspeichern
Hallo Gerd,

Ich hab mich mal daran versucht das in mein Programm einzubauen (bin mittlerweile auch schon daran es nochmal neu zu programmieren, damit die Strukturierung besser wird). Jetzt hab ich allerdings das Problem, dass die beiden For-Schleifen nicht ausgeführt werden, und das Programm in die Pause nach jeder äußeren For-Schliefe geht. Hast du mir n Tipp was ich anders machen muss? Oder stimmt mein Gedankengang überhaupt nicht?

Danke dir.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.02.2018, 13:57
Beitrag #10

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Maximalwerte in Matrix erkennen und mit zugehörigem neuen Wert überspeichern
Hallo Martin,

Zitat:Jetzt hab ich allerdings das Problem, dass die beiden For-Schleifen nicht ausgeführt werden, und das Programm in die Pause nach jeder äußeren For-Schliefe geht.
Das könnte an dem roten Rahmen liegen, der die äußere Loop markiert: das ist ein Breakpoint - und den kann man auch wieder (durch Rechtsklick auf den Rahmen) löschen…

- Für das "IF a> b THEN a ELSE b" gibt es die MinMax-Funktion bei den Vergleichsoperationen!
- Wozu das 2D-Array des Intensitätsgraphen durch sich selbst dividieren und dann mit "Tank" multiplizieren? (Was kommt wohl dabei heraus, wenn im Graph eine Null steht?) Warum nicht einfach "Tank" selbst in die FOR-Loops hineinverdrahten???
- Warum arbeitest du immer noch mit Matrizen anstatt einfacher 2D-Arrays???
- Warum ist "Tank" nicht in einem Schieberegister gespeichert? Das wären dann schon mal 2 lokale Variablen weniger…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  X-Wert zu Maximal Wert aus Array JK87 9 7.621 07.11.2019 10:26
Letzter Beitrag: JK87
  Positionen (Werte) in Matrix speichern tahity94 37 23.925 12.02.2018 18:10
Letzter Beitrag: tahity94
  Automatische Erstellung und Namenshochzählung eines neuen Ordners falls selbiger exis Cinox 5 6.925 29.09.2016 14:37
Letzter Beitrag: Cinox
  1D Array in 6er xD matrix formatieren Da_Rudi 9 8.022 27.11.2013 15:22
Letzter Beitrag: Da_Rudi
  Stringlänge bei neuen Pfad afietze 8 6.045 12.10.2012 13:04
Letzter Beitrag: F.Bi
  Fehlerhafte txt Datei erkennen ralph.d 5 6.769 22.05.2012 13:51
Letzter Beitrag: NWOmason

Gehe zu: