LabVIEWForum.de - Wellenlängen eines Bildes bestimmen

LabVIEWForum.de

Normale Version: Wellenlängen eines Bildes bestimmen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,

ich möchte mit einer USB-Webcam Bilder aufnehmen und diese auswerten.
Neben einem Histographen hätte ich gerne auch einen Graphen mit Wellenlänge/Intensität oder Wellenlänge/Pixelanzahl.

Mein Problem liegt darin, dass ich die Wellenlängen nicht bestimmen kann.
Hat jemand eine Idee oder gibt es überhaupt eine Möglichkeit die Wellenlängen zu erhalten??

Habe im Netz eine Tabelle mit RGB-Codes und den dazugehörenden Wellenlängen gefunden.
Eventuell könnte LabVIEW diese Werte für die jeweiligen RGB-Codes nehmen und so einen Graphen formen.
Leider fehlt mir da das nötige Wissen.

Ich nutze LabVIEW2014 mit Vision.

Vielen Dank

Grüße
Hallo Unterberg,

Zitat:Habe im Netz eine Tabelle mit RGB-Codes und den dazugehörenden Wellenlängen gefunden.
Du hast also ein Array mit RGB-Werten. Und eine Tabelle, die dir sagt, welcher RGB-Wert zu welcher Wellenlänge führt.
Du musst also nur schauen, welcher RGB-Wert in dieser Tabelle deinem aktuellen Messwert am nächsten kommt und die zugehörige Wellenlänge ausgeben…

Fragen/Hinweise zum VI:
Wieso nutzt du TransposeMatrix, wenn du eigentlich TransposeArray machen willst?
Es ist keine gute Idee, in einer Eventstruktur mit "default if unwired"-Tunneln zu arbeiten, jedenfalls bei Referenzen…
Ab und zu Ctrl-U schadet nicht…
Die Konvertierung von Wellenlaenge zu RGB ist nicht wirklich möglich (Wellenlänge impliziert monochromatisches Licht, denk mal an grau, violett etc.).
Wenn ich eine einigermassen korrekte Messung durchführen wollte, würde ich vermutlich die Spektralantwort des Kamerasensors anschauen müssen und mit dem RGB-Gewichtungswerten durchrechnen - bei einer USB-Webcam mit entsprechender Fertigungsqualität macht so was aber vermutlich keinen Sinn.

Eine Lookup-Table, so wie du sie in deinem Anhang hast, könnte dir aber zumindest eine Idee geben. Die Lookup-Table, die du hast, ist aber ziemlich schwach. Wenn du nur die RGB-Werte eines Bildes nehmen würdest, und suchen, und dann statistisch aufaddieren, dann würdest du vor allem eine grosse Häufung bei "nicht gefunden" finden.
Einfach mal so interpolieren ist auch nicht... wir haben RGB Werte.. also müsstest du in Komponenten zerlegen und gewichten, um irgendwas wie eine Approximation hinzukriegen. Also ja, man kann technisch daraus was machen, aber es geht auch leichter.

Ich würde gleich auf das HSL Farbmodell übergehen. Aus dem Hue Value so grob eine Wellenlänge errechnen und dann anzeigen lassen. Ich hab jetzt mal die erste Formel dafür verwendet, die ich im Web gefunden hab. Wie gesagt, das ist Blödsinn für violett etc, aber vermutlich trotzdem das, wonach du suchst.

VG
Birgit
Vielen Dank Birgit! Genau das habe ich gesucht.

@Gerd Ich bin noch ein Neuling in Sachen LV und meistens zufrieden wenn es läuft.
Danke für die Hinweise. Ctrl-U kannte ich noch gar nicht...

Grüße
Interessantes Thema. Wäre schön, wenn dieser Thread noch eine Weile am Leben bleibt und ihr noch weitere Ergebnisse hochladet!

Birgit hat schon einige der Schwachstellen und Herausforderungen richtig benannt. Denke aber, dass sich der Ansatz doch durch unterschiedliche Maßnahmen (Hardware/Software) verfeinern lässt... Damit meine ich nicht den Kauf eines Monochromators Flop

So kann man z.B. Wellenlängen, die nur Fehler zu den theoretischen Werte der LookUp-Tabelle beitragen, mit optischen Filtern entgegentreten.

Wenn ich etwas mehr Zeit habe, werde ich mich gern etwas tiefer damit beschäftigen.


nurso Wink
Ich glaub, ich würd erst mal eine Farbkarte kaufen, und schauen, was ich da messe.

-----------------------------

Nun, ich hätte da so ein Interferometer oder zwei im Labor stehen, die würden da durchaus als sehr teuere Monochromatoren durchgehen ;-)

Hmmmm... gute Lichtquelle (Lampe aus dem Kinobereich! Kinobranche hat echt manchmal interessante Spielsachen), mit Prisma zerlegen (Prisma in einen Halter spannen, mit kleinem Piezo neigen), auf die Probe richten, Reflektion anschauen? Müsste das mal selber mal mit unseren Optikern diskutieren, klingt nach einem netten Feierabendprojektchen :-)
Hallo,

ich bin doch noch auf einige Probleme gestoßen.

Die Bilder meiner Proben zeigen Interferenz bzw. Beugungsmuster von Gitterstrukturen, die ich untereinander vergleichen möchte.
Es sind noch störende Reflexionen enthalten und die Qualität der Bilder ist generell noch gering,
allerdings sieht man, dass ein Großteil der Bilder schwarz ist.

Wenn Schwarz wie auch Rot einen Hue=0 hat, dann spuckt er mir eine Wellenlänge von 650nm raus.
Ist es möglich die Schwarzanteile im Bild zu entfernen?

Eventuell könnte man es mit ROI machen und so nur das Farbmuster auswählen.
Habe im Example-Finder ein Beispiel rausgesucht, aber man muss die Koordinaten des Rechtecks per Hand eingeben.
Beim Vergleichen der Bilder käme es dann aber zu ungenauen Ergebnissen, weil die Position der Muster von Probe zu Probe nie exakt gleich ist.

Gruß
Hallo,

ROI ist ein bisschen schwierig, weil vordefinierte ROI ja immer Polygone oder Kreise oder so Kram sind. Man kann halt ein Binärbild nehmen, und dann mit MaskToROI sich was definieren lassen, aber ich glaub nicht, das es nötig ist.
Ich würde das Bild erst mal thresholden, zB in der Luminance Plane. Alle Koordinaten, die da einen zu kleinen Wert haben (also defakto schwarz sind) auf beliebige Weise nicht beruecksichtigen. Oder Color Thresholding, das müsste hier auch reichen. Entweder im Histogram rauskicken, oder (das ist die Variante für Faule Blush), erst durch Farbe 1 ersetzen, bereits bekannte Analyse machen, dann durch Farbe 2 ersetzen, bereits bekannte Analyse machen, und dann aus dem Ergebnis den Einfluss von Schwarz finden.

Viele Grüsse,
Birgit

Edit: es geht auch theoretisch mit 1 Farbe, aber .. wenn du zB mit Rot 1 ersetzt und ein Teil deines nicht-tiefschwarzen Schwarzes hat genau diesen Hue Wert, dann kriegst du den nicht raus.
Hallo,

mit den Threshold kam ich nicht weiter, allerdings habe ich einen RBGtoLambda Code gefunden.
http://codingmess.blogspot.de/2010/02/tr...ength.html

1)
Der Code ist in Python geschrieben, aber habe ihn in LV einsetzen können.
Allerdings kann ich keine Arrays einfügen bzw. nicht die Werte für R,G und B.
Die Werte sind nicht als Array definiert, aber bin zu unerfahren, um das passend zu machen.
Jemand einen Vorschlag?

2)
Ich möchte in einem weiteren Schritt zwei Bildarrays auf Gleichheit prüfen.
Es soll ein prozentualer Wert ausgespuckt werden.
Bisher habe ich das mit einem Mean-Wert der Arrays gemacht.
Habe aber das Gefühl, dass die Ergebnisse eher ungenau sind.

Gruß
Hallo Underberg,

wenn man Arrays verarbeiten will, aber nur eine Funktion für skalare Inputs hat, kann man doch so gut wie immer mit einer autoindizierenden FOR-Loop um diese Funktion herum arbeiten…

Außerdem könnte dein Python-Code in LabVIEW so aussehen:
[attachment=53918]
(Ich habe nur den Case für "highind==1" implementiert, der Rest ist aber analog zum gezeigten und damit trivial… Big Grin)
Seiten: 1 2
Referenz-URLs