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!
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.
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.
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
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.
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 :-)
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ß
14.08.2015, 13:26 (Dieser Beitrag wurde zuletzt bearbeitet: 14.08.2015 13:33 von b.p.)
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 ), 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.
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ß
30.08.2015, 17:38 (Dieser Beitrag wurde zuletzt bearbeitet: 30.08.2015 17:39 von GerdW.)
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:
(Ich habe nur den Case für "highind==1" implementiert, der Rest ist aber analog zum gezeigten und damit trivial… )