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!
Hallo Gemeinde,
ich habe das Problem, dass ich in einem 2-D Array (U8)(erstellt aus einer BMP) Pixelfarben vergleichen soll.
Konkret soll ich ein VI erstellen, jedes Pixel des neuen Bildes aus der Differenz seiner direkt horizontal angrenzenden Nachbarn berechnet.
11, 12, 13, 14
21, 22, 23, 24...usw.
Die Werte von 11 und 13 von einander abziehen und daraus entsteht der Wert 12 für das neue Bild.
Für die Randwerte (mit nur einem horizontalen Nachbarn) hatte ich mir vorgestellt diesen zu duplizieren und die Berechnung dann beim n+1. Pixel zu beginnen:
10, 11, 12, 13...
wobei 10=11.
Und dann 10 und 12 verrechnen und 11 fürs neue Bild erzeugen .
Den read.bmp und unflattern Pixmap habe ich bereits gefunden, doch wie komme ich damit weiter??
- U8 speichern entweder Graustufen oder Indizes einer Farbtabelle. "Pixelfarben" dagegen benötigen üblicherweise 24bit Speicherplatz...
- Der triviale Weg besteht in einer FOR-Loop über jede Zeile im Bild. Für jede Zeile dann jeweils die Pixelwerte indizieren und miteinander verrechnen (auch in einer Schleife).
Zitat:Für die Randwerte ... diesen zu duplizieren
Ich würde nur von Pixel 1 bis n-2 rechnen (Zählung beginnt bei 0 und endet bei n-1 bei n Pixeln pro Zeile)...
Das mit den Pixelfarben habe ich falsch gesagt sorry. =) Das VI soll später horizontale Kanten suchen (Bildverarbeitung).
Ich komm nur nicht ganz dahinter wie ich die Graustufen/Indizes miteinander verrechnen kann (also wie ich sie überhaupt aus dem Bild heraus bekomme um mit ihnen zu rechnen).
Dann lege ich eine for loop an und führe dort das 2D Array drauf...
(Tut mir Leid, wenn ich mich anstelle wie ein Anfänger, aber ich bin leider auch einer)
23.03.2012, 12:59 (Dieser Beitrag wurde zuletzt bearbeitet: 23.03.2012 13:00 von GerdW.)
Zitat:wenn ich mich anstelle wie ein Anfänger, aber ich bin leider auch einer
Hast du den Link in meiner Signatur beachtet?
Vorschlag (ohne besondere Behandlung der Ränder):
Während du das nachprogrammierst, solltest du dir überlegen, wieso/weshalb/warum ich es so vorgemacht habe...
(30.01.2012 11:25 )Erdberquark schrieb: Danke für die Antwort.
Wenn ich das richtig sehe wollen die Ordentlich Geld dafür ;-)
Gibt es auch eine möglichkeit das ohne Extra Kosten zu Realisieren?
Also Bild in Pixel umrechen.
Gruß
Quark
Wenn Du IMAQ Vision Bilder verwendest verwendest Du eigentlich schon das Vision Toolkit. Nun war (ist?) es so dass in der Vergangenheit ein sehr kleiner Teil des Vision Toolkits innerhalb der Interface VIs zum Vision Acquisition Treiber auch verfügbar waren ohne dass man dazu eine Vision Toolkit Lizenz benötigte (aber eine Vision Acquisition Runtime Lizenz), die für die Entwicklung, aber nicht für Runtime Executables Bestandteil der Treibersoftware war die man mit der NI Hardware mitbekommt. Aber das ist halt eben ein sehr beschränktes Subset des Vision Toolkits, das nur gerade soweit geht, dass man ein eingelesenes Bild im Frontpanel darstellen kann. Alles andere benötigt effektief das Vision Toolkit.
(23.03.2012 12:59 )GerdW schrieb: Hast du den Link in meiner Signatur beachtet?
Ja den habe ich gesehen und auch schon durchstöbert. Leider finde ich recht wenig zur Graustufenanalyse etc. von Pixel..
(23.03.2012 12:59 )GerdW schrieb: Während du das nachprogrammierst, solltest du dir überlegen, wieso/weshalb/warum ich es so vorgemacht habe...
Also über read bmp.file und unflatten.pixmap erzeuge ich ein U8 2D-Array. Dieses gibt mir mit dem Matrix size die Anzahl der Durchläufe der for-loops. (Sollte dazu nicht auch die number of rows mit dem N der äußeren for-loop verbunden werden?
So wie ich das verstehe, zeihst du die 2 von der Anzahl Columns ab um den Inhalt des zweitletzten Elements zu erhalten.
Den indicator der inneren for-loop gibt den index für das neue Array und für den zwei Stellen weiter. Diese beiden Inhalte werden Subtrahiert um das neue Element zu erhalten...?
Beim nachprogrammieren habe ich Schwierigkeiten mit dem Array2. Dieses Ding hat bei mir keine Klammern stattdessen aber zwei blaue Rechtecke um U8... und werden hier jetzt schon Graustufen verglichen? Oder benötige ich dazu den "Colors" Ausgang des Unflatten Pixmap Bausteins?
So sieht es bisher bei mir aus...
26.03.2012, 11:59 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2012 12:01 von GerdW.)
Zitat:Beim nachprogrammieren habe ich Schwierigkeiten mit dem Array2.
Das könnte daran liegen, dass du eben dort kein Array hast, sondern nur eine skalare Anzeige...
Merke:
Passende Anzeigen erzeugt man einfach durch Rechtsklick auf den Ausgang einer Funktion/Struktur und Wahl von Erzeuge->Anzeige...
Zitat:Sollte dazu nicht auch die number of rows mit dem N der äußeren for-loop verbunden werden?
Nein, nicht nötig. Nachdenken, warum das so ist - und evtl. den Basics-Lehrgang wiederholen, da wird das erläutert...
Zitat:So wie ich das verstehe, zeihst du die 2 von der Anzahl Columns ab um den Inhalt des zweitletzten Elements zu erhalten.
Nein, ich mache das, um nur die "inneren" Pixel einer Zeile zu betrachten - und das sind nunmal 2 weniger als die Zeile insgesamt Pixel hat...
Klicke ich aber nach dem Minus mit rechts und Create einen Indikator bekomme ich genau das. (Das klappt auch. Ziehe ich diesen nun aus den zwei For-Loops wird die Verbindung zwischen den äußeren For-Loop und dem Indikator als fehlerhaft angezeigt..
26.03.2012, 12:05 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2012 12:05 von GerdW.)