ThermalViewer

Das Programm wurde teilweise neu aufgesetzt und wird jetzt als ThermoVision_JoeC Software weitergeführt.

#Einleitung

Die Wärmebildkamera (Flir Thermovision MV) war ja eigentlich nur zur Anzeige eines Wärmebildes gedacht und nicht zur Temperaturmessung. Nachdem ich es durch Berechnungen aber doch geschafft habe, mit ihr zu messen, kam mir die Idee einer Radiometrischen Auswertung.

In diesem Softwareprojekt sind viele Entwicklungsthemen mit eingeflossen:

  • Drag & Drop
  • Standardmenüs und Contextmenü für Maus
  • Speichern von Einstellungen
  • Falschfarbdarstellung
  • Interpolation
  • Dynamische Positionierung von Steuerelementen
  • Propertygrid als Eigenschaftsbox
  • Bild aus vielen Temperaturwerten erstellen
  • Bild als Datei in unterschiedlichen Formaten abspeichern
  • Zusätzliche Daten an eine Datei anheften
  • Datei nach spezifischen Datensätzen durchsuchen
  • Auswerten von Datensätzen (Messlinie, Messbereiche )
  • Dynamische Erstellung einer Temperaturskalierung
  • Datenextraktion in eine Textdatei (zum weiterverwenden in Excel oder so)

Die Erfassung der Messwerte
Dafür wurde von jedem Bildpunkt der Temperaturwert erfasst und als Temperaturwert in eine Datei abgespeichert. Jeder Pixel ist dadurch nicht mehr als Bildpunkt, sondern nun als Temperaturwert mit einer Nachkommastelle abgespeichert.
Alle anderen Wärmebildkameras mit Auswertungsmöglichkeit speichern ihre Bilder auch Radiometisch (wiki: Radiometrie) ab.
Dadurch kann man nachträglich die Temperaturspannen und die Farbpaletten zur Anzeige ändern. Über meine Kamerasoftware erstellte Bilder können also nachträglich analysiert werden, wie es bei anderen Kameras auch möglich ist.
Die PCE-TC3 beispielsweise, speichert ihre Messwerte vermutlich als Detektormesswert ab. In der .IRI Bilddatei wird jedenfalls jeder Messpunkt durch 2 Bytes abgespeichert. Daher liegt der Temperaturwert für jeden Pixel als Angabe von 0-65535 vor. Ich hatte schon vor längerem Mal aus Interesse versucht, die Kamerabilder von der TC3 mit einem eigenen Programm auszulesen und bin auch erfolgreich damit gewesen. Daher kam mir die Idee, es mit der FLIR ähnlich zu machen.

Speichern und auslesen der Daten
Die Daten von der FLIR Kamera liegen hingegen nur als Temperaturwert mit einer nachkommastelle vor (xx.x °C). Aber das reicht um eine Auswertung damit machen zu können.
Bei mir wird auch jeder Bildpunkt durch 2 Bytes abgespeichert. Der Temperaturwert wird einfach mit 10 Multipliziert und dann noch 1000 dazu addiert (so kann 23.6 genauso leicht abgespeichert werden wie -7.2). Der so erstellte Wert liegt immer zwischen 0 und 65535 und lässt sich damit leicht abspeichern und rückumwandeln.
Anfangs hab ich die Daten als eigene Datei angelegt. Später hab ich ein normales Bild im .png Format erstellt und die Daten dann einfach an die Bilddatei ran gehängt. Dadurch hab ich ein normales Bild (die Vorschau sozusagen) und kann dennoch normal auf die Daten zugreifen.
Bevor die Daten an die Bilddatei ran gehangen werden, wird ein Datenheader erzeugt und eingesetzt (bei mir "###RADIO"). Nach diesem wird beim auslesen gesucht. Hätte ich es einfach mit einem festen Index geregelt, dann hätte das Bild immer gleich groß sein müssen. So lasse ich einfach nach dem Datenheader suchen und beginne ab da meine Daten zu lesen.
Nachdem die Temperaturwerte normal gespeichert und geladen werden konnten, wurden noch zusätzliche Daten eingefügt.
So werden einerseits die Min- und Maximal Temperatur, sowie die Farbpalette mit abgespeichert. So bleibt die eingestellte Darstellung des Bildes erhalten. Eingestellte Messungen werden auch mit abgespeichert. So werden für die Messlinie z.B. 9 Byte verbraucht (1x on/off, 2x start_x, 2x start_y, 2x stop_x, 2x stop_y). Das so erzeugte Bild ist mit ca. 200kb recht klein finde ich (als reines Bild wären es nur ca. 65kb).

Messungen
Zum Auswerten stehen 3 verschiedene Messarten zu verfügung:

  • 6 frei plazierbare Messpunkte
  • 2 frei platzier und skalierbare Rechtecke (innerhalb der Rechtecke wird der kleinste und größte Wert angezeigt sowie die Menge der Messpunkte und der Temperaturmittelwert über den gesamten Bereich)
  • 1 Messlinie (von links nach rechts, mit frei wählbarer Neigung und Länge)

Bild Speichern
Dank der Interpolation, kann man sich Bilder in unterschiedlichen Auflösungen erstellen lassen. Außerdem kann sich, sofern eingeschaltet, die Temperaturskala und die Messobjekte mit einzeichnen lassen.

#Funktionen

Bild 1

Bild 1
Als Farbscala ist hier Gelb-Blau (früher "Ironbow" oder "Eisen") gewählt worden.
Die Interpolation ist auf x4 gestellt (1172x968) und die Messobjekte sind eingeschaltet.
Messobjekte sind Objekte wie Labels und Panels, welche ihrerseits durch Mausevents verändert werden können.
So kann man Messlinien und Messbereiche einfach verschieben. Wenn die Messobjekte ausgeblendet sind, werden sie stattdessen in das Bild eingezeichnet.
Es ist einer von 2 Messbereichen eingeschaltet. Diese sind Rechteckige Felder, wo der Durchschnitt aller Messpunkte, sowie der kleinste und größte Wert angezeigt werden.


Bild 2

Bild 2
Farbscala ist jetzt Regenbogen, Interpolation auf x2 (586x484) und die Messobjekte sind ausgeblendet (sie werden daher eingezeichnet).
Außerdem sieht man hier das Mausmenü, welches mit einem Rechtsklick auf das Hauptbild erscheint.
Wie auch im ersten Bild sind hier 3 Messpunkte gesetzt und die Min/Max Werte werden ebenfalls markiert.
Min und Max sind die jeweils niedrigsten und höchsten Werte, an ihrem ersten Punkt, an dem sie gefunden wurden (wenn man 2 identisch heiße Wärmequellen auf dem Bild hat, wird die oberste von beiden markiert).


Bild 3

Bild 3
Hier wurde ein neues Bild geladen, Farbscala ist jetzt Kontrast (Regenbogen mit farblichen Zwischenschatten) und Interpolation auf x1 (293x242).
Das so angezeigte Bild wird auch zum abspeichern verwendet, damit bereits in den Vorschaubildern gesehen werden kann, welche Messungen eingeschaltet sind.
Alle möglichen Messungen sind aktiv (6x Messpunkt, 2x Messbereich, 1x Messlinie).
Die Ergebnisse der Messlinie werden, wie im Kameraprogramm auch, in einem extra Fenster dargestellt.

Die Messlinie
Die Messlinie ist, neben der Temperaturberechnung und der Interpolation, eines der Mathematisch aufwendigeren Bestandteile des Programms.
In C# gibt es ja recht viele und einfache Möglichkeiten eine Linie zu zeichnen. Der Funktion DrawLine übergibt man einen Anfangs- und Endpunkt, sowie ein Pen (ein Grafikobjekt, das die Farbe und Strichstärke klassifiziert) und schon bekommt man seine gezeichnete Linie. Allerdings wollte ich ja nicht nur eine Linie einzeichnen, sondern auch alle Messpunkte auf der Linie erfassen und darstellen.
An dieser Stelle habe ich Bekanntschaft mit dem Bresenham-Algorithmus gemacht. Bei dieser Berechnung, wird jeder Bildpunkt einzeln zu einem Strich zusammengesetzt. Ich habe den Algorithmus so angepasst, dass er von links nach rechts eine Linie zeichnen kann (die Codevorlagen lassen nur einen Quadranten zu). Ich brauchte dem Algorithmus, welcher nun über 2 Quadranten zeichnen konnte, nur noch eine Datenliste hinzufügen, die jeden Bildpunkt der eingezeichnet wird auch gleichzeitig als Messwert aufnimmt. Am Ende habe ich eine Liste mit Messwerten die genauso aufgenommen wurde, wie sie dann eingezeichnet ist. Zusätzlich werden noch weitere Angaben erfasst:
GraphTempMax = höchste Temperatur auf der Linie
GraphTempMin = niedrigste Temperatur auf der Linie
GraphCount = Messpunkte auf der Linie

Algorithmus zum darstellen einer Messlinie von links nach rechts...

int dx = (x1-x0); int sx = x0<x1 ? 1 : -1;
int dy = (y1-y0); int sy = y0<y1 ? 1 : -1;
int err = (dx>dy ? dx : -dy)/2; int e2 = 0; int pt = 0;
graphTempMax=-100; graphTempMin=1000;
graphCount = 0; mess_Line1.Clear();

if (x0<0||x1>292) { return; }
if (y0<0||y1>241) { return; }
if (y0<=y1) {
     while(true){
          if (x0==x1 && y0==y1) break;
          if (x0<0||x0>292) { return; }
          if (y0<0||y0>241) { return; }
          double temp = math.Round(((double)data_RAW[x0,y0]-1000)/10,1);
          if (graphTempMin>temp) {graphTempMin=temp; }
          if (graphTempMax<temp) {graphTempMax=temp; }
          mess_Line1.Add(pt,temp);
          e2 = err; pt++; graphCount++;
          if (e2 >-dx) { err -= dy; x0 += sx; }
          if (e2 < dy) { err += dx; y0 += sy; }
     }
} else {
     err = (dx>-dy ? dx : dy)/2;
     while(true){
          if (x0==x1 && y0==y1) break;
          if (x0<0||x0>292) { return; }
          if (y0<0||y0>241) { return; }
          double temp = math.Round(((double)data_RAW[x0,y0]-1000)/10,1);
          if (graphTempMin>temp) {graphTempMin=temp; }
          if (graphTempMax<temp) {graphTempMax=temp; }
          mess_Line1.Add(pt,temp);
          e2 = err; pt++; graphCount++;
          if (e2 >-dx) { err += dy; x0 += sx; }
          if (e2 <-dy) { err += dx; y0 += sy; }
     }
}

Die Interpolation
Ich verwende eine recht einfache Bilineare Interpolation. Je nach Höhe der Interpolation, werden unterschiedliche Stufen durchlaufen. Bei jeder Stufe wird die Bildgröße verdoppelt. Es werden also immer neue Pixel erzeugt, die sich zwischen 2 vorhandenen Pixeln befinden und die den Mittelwert der Intensität beider Pixel haben. Außer diagonale Bildpunkte. Sie haben statt 2 Pixeln 4 benachbarte, daher werden sie etwas anders gehandhabt.

Interpolation x1

Interpolation x1 (genau genommen ist es das reine Datenbild)
Auflösung: 293x242
Es ist das gleiche Format, in dem die .png Dateien zum hinzufügen der Radiometrischen Daten erstellt werden.


Interpolation x2

Interpolation x2
Auflösung: 586x484
Ein gutes Format für normale Bilder, meiner Ansicht nach. Qualitativ gut, nicht zu groß, passt gut auf ein A4 Blatt.


Interpolation x4

Interpolation x4
Auflösung: 1172x968
Wenn das x2 nicht reichen sollte. Die Qualitätssteigerung ist nicht so hoch wie bei x2, da nun nicht mehr die reinen Messdaten interpoliert werden, sondern auch schon interpolierte Messwerte.

Ich verwende diese Interpolation bevorzugt beim normalen betrachten der Radiometischen Wärmebilder, da so die Messobjekte nicht zu groß sind und bei entsprechender Fenstergröße die Anzahl der Bildpunkte auch ausgenutzt wird.


Temperaturdaten extrahieren
Diese Funktion war bei der Entwicklung recht hilfreich. Ich hab sie drin gelassen, damit die Temperaturdaten für welchen Zweck auch immer zur Verfügung gestellt werden können. Im Prinzip wird jeder Temperaturwert, getrennt durch Tabs, in eine Textdatei geschrieben (ohne Textumbruch entspricht jede Temperaturzeile einer Bildzeile). Von dort kann man sie leicht kopieren und z.B. in Excel einfügen.

Schritt 1

Schritt 1
Im Thermalviewer den Dateinamen nach eigenem Wunsch anpassen und auf "als Text speichern" klicken. Im Ordner der radiometrischen Bilder ist danach die Textdatei zu finden.


Schritt 2

Schritt 2
Die Textdatei öffnen, alles markieren und in die Zwischenablage kopieren (STRG+A dann STRG+C). In Excel kann man dann mit STRG+V seine Temperaturwerte einfügen. Da die Temperaturwerte mit Tabs getrennt sind, teilt Excel sie automatisch in den Zellen auf. Von hier aus ist es jedem selbst überlassen, was er damit anstellt.


Schritt 3

Schritt 3
Bei diesem Beispiel wurden zuerst die Spaltenbreiten angepasst, damit sie (zumindest annähernd) ein Quadrat ergeben. Dann wurde auf den gesamten Bereich eine "bedingte Formatierung" mit 3 Farben eingestellt. Der kleinste ist Blau, der Mittelwert aller ist Rot und der höchste ist Gelb. Alle dazwischen liegenden Werte werden mit einem Farbverlauf dargestellt. Wenn man nun sehr weit raus zoomt, wird jede Zelle zu einem Bildpunkt und das ursprüngliche Wärmebild kommt wieder zum Vorschein.
Unten in der Leiste kann man sehen, dass Excel hier auch zum Auswerten gekommen werden kann. Man braucht nur einen Bereich markieren und kann sich unten in der Leiste dann Minimal, Maximal, Mittelwert oder was auch immer Anzeigen lassen.

Dynamische Positionierung von Steuerelementen
Die Labels und Panels, die zum messen verwendet werden, sollten idealerweise natürlich genau über dem Bereich liegen, der gemessen wird. Das hat anfangs ohne Probleme recht gut geklappt. Das Quellbild ist immer gleich groß und über eine Dreisatzrechnung, konnte man die Ausleseposition einfach bestimmen.

Allerdings hatte ich damals noch, die Picturebox mit dem Wärmebild, auf "Stretch" gestellt. Dadurch wurde das Bild immer in die Box eingepasst, was aber zur Folge hatte, dass (bei unpassendem Seitenverhältnis) das Bild entsprechend Verzerrt und gestaucht wurde. Aber das angezeigte Bild hatte immer die Abmaße der Picturebox.
Später hatte ich die Picturebox auf "Zoom" gestellt. Dadurch wird das Bild, so gut es geht symmetrisch vergrößert, bis der Rahmen der Box erreicht ist. Diese Variante brachte aber ein neues Problem mit sich, da nun zusätzliche leere Randbereiche die offenen Stellen in der Box füllen.
Das ist für die Darstellung kein Problem, für die Berechnungen der Mausposition hingegen schon. Denn nun hat das angezeigte Bild andere Abmaße, als die Picturebox selbst und diese Abmaße müssen dann extra berechnet werden.

//Scalierung berechnen mit "Stretch"            
read_X = (int)math.Round((double)e.X/(double)picBox1.Width*294f);
read_Y = (int)math.Round((double)e.Y/(double)picBox1.Height*242f);

//Scalierung berechnen mit "Zoom"
int EX = 0; int EY = 0;
pic_faktor = (double)picBox1.Width/(double)picBox1.Height; 
if (pic_faktor>1.2167) {
    pic_W_offset = (int)math.Round((picBox1.Width-((double)picBox1.Height*1.21666))); pic_H_offset = 0;
    EY=e.Y; EX = e.X-(pic_W_offset/2);
    if (EX<0) { return; }
    pic_W = picBox1.Width-pic_W_offset;
    pic_H = picBox1.Height;
} else {
    pic_H_offset = (int)math.Round((picBox1.Height-((double)picBox1.Width*0.822))); pic_W_offset = 0;
    EX=e.X; EY = e.Y-(pic_H_offset/2);
    if (EY<0) { return; }
    pic_W = picBox1.Width;
    pic_H = picBox1.Height-pic_H_offset;
}
read_X = (int)math.Round((double)EX/(double)(picBox1.Width-pic_W_offset)*294f);
read_Y = (int)math.Round((double)EY/(double)(picBox1.Height-pic_H_offset)*242f);

#Version 003

Die neue Version ist für eine andere Kamera (Mobir M8) entstanden. Nachdem die Version zufriedenstellend funktioniert hat, wurden alle Ansteuerungen für diese Kamera entfernt. Somit ist es jetzt wieder ein reiner "Viewer" und wird in Version 003 zum Download angeboten.

Screenshot

Es hat sich einiges getan, die die wichtigsten Änderungen:

  • ein Visuelles VGA Bild wird mit im Datensatz abgespeichert (sofern vorhanden)
  • im Visuellen Bildfenster kann das IR Bild in unterschiedlichen Transparenzstufen dargestellt werden
  • auch im IR Hauptbild kann das Visuelle in unterschiedlichen Transparenzstufen eingeblendet werden
  • es werden unterschiedliche IR Quellformate unterstützt (bis 640x480)
  • Temperaturwerte können direkt ins Bild gezeichnet werden
  • Automatische Bildauswertung (siehe unten)
  • IR Dateiformat ist jetzt .jpg

#Bildauswertung

Bildauswertung

Die Bildauswertung kann im Mausmenü des Graphen gestartet werden und 640x480 oder 1280x960 als Auflösung haben. Dabei wird das IR Bild uns seine aktiven Messungen neben dem VGA IR-Bild eingezeichnet. Darunter kommt der Graph (wenn L1 nicht aktiv ist, ist der Graph leer, wird aber dennoch mit dargestellt) und daneben die Messtabelle.
Somit erhält man ein normal verwendbares JPG Bild, was die Messungen gleich mit anzeigt. Andere Programme machen dies meist über Word/Excel oder PDF. Hat beides so seine Vor- und Nachteile. Die Bildvariante ziehe ich vor, da es einerseits schneller geht und andererseits leichter umsetzbar ist.

#Version 004

Hier nun ein weiteres Mal, die zum Viewer ein gekürzte Version meiner Kamerasoftware. Einige neue Funktionen sind noch nicht ganz ausgereift, aber sie Funktionieren schon mal zufriedenstellend.

Screenshot
  • 2 Isotherme können belegt werden(Farbe änderbar)
  • Bildbearbeitung integriert (Kanten, Prägen, Schärfen)
    Verliert bei Interpolation x4 zurzeit noch an Wirkung
  • Berechnungsart bei der Scala verändert
    (früher wurden in fixen Abständen die Temperaturen angezeigt. Jetzt sind die Temperaturen auf gewisse Schritte festgelegt... daher laufen die Balken beim Scrollen jetzt mit)
  • .JPG und .SAT Kamerabilder (Mobir M8 und Hotfind-L) können geöffnet werden.
    (leider nur teilweise, da ich das Dateiformat noch nicht richtig entschlüsseln konnte und die Hersteller dazu keine Hinweise oder Hilfe geben wollen...)

#Version 005

Hier die neue Version. In diesem Zustand, ist sie möglicherweise nicht nur für C# Programmierer interessant, die sich für den Quellcode interessieren. Inzwischen werden auch Formate anderer Kameras unterstützt (nicht so gut wie die Herstellersoftware, aber dafür sind Funktionen wie Interpolation nutzbar).

Zoombox

Eine einstellbare Zoombox ist jetzt verfügbar. Diese kann mit wandern, wenn die linke Maustaste gedrückt gehalten wird, oder aber frei platziert werden und mit linksklick einen neuen Zoompositionswert bekommen.

Und noch eine kleinere Änderung: die Farbpalette Regenbogen2 wurde überarbeitet und orientiert sich nun eher an der FLIR Feder Palette.


Preview

Das bei DevTools schon bekannte Bilderfassungstool wurde hier mit ein paar Extras eingebaut. Somit können abgespeicherte 16 Bit Rohdaten aus einem Wärmebild ausgelesen und dargestellt werden. Zusätzliche Informationen werden aber nicht erfasst. Angaben wie Messpunkte, Umgebungstemperatur, Datum, Min und Maxtemperatur oder ähnliches sind daher nicht nutzbar. Mein Programm wird die Originalsoftware also nicht ersetzen... sondern eher erweitern.
Die Rohdaten für folgende Kameras sind entschlüsselt und integriert:

  • SDS Hotfind L / Trotec Hotfind L (384x288 .SAT)
  • Guide M2 (120x120 .IRI)
  • Trotec EC060 (160x120 .SAT)
  • Trotec IC080 (160x120 .SAT)
  • PCE TC3 (160x120 .IRI)

Für die Temperaturberechnung gibt es einen Offset und einen Teiler (beide im "Bild Min/Max" Feld), womit die Temperaturen zumindest ansatzweise in die richtige Richtung gehen. Man sollte dann, nach dem Importieren des Rohbildes, von Hand die Min und Max Temperaturen einstellen. Alles andere dazwischen wird dann berechnet und sollte keine Differenz zum Originalprogramm haben.


Importiert mit x4|noresize
OriginalSoftware mit x4

Interpolations- und Schärfealgorithmus wurden verändert um bessere Ergebnisse zu erzielen. Im Bild 4 ist ein Vergleichsbild zur Originalsoftware der TC3 (die einzige mir bekannte, mit einstellbarer Interpolation). Mein Programm ist leider noch schlechter als die Originalsoftware... aber darum kümmere ich mich später nochmal.

#Version 006

Diese Version entstand als Nebenprodukt meiner Beschäftigung mit der FLIR Ex Wärmebildkamera.

Neuheiten

Video
Genaugenommen ist die Funktion schon recht alt. Sie war vorher in der Thermovision Dias (für Mobir M8) eingebaut, um radiometrische Videosequenzen aufzunehmen.
Man kann sie aber auch ohne eine Radiometrische Videoquelle dazu benutzen, mehrere Bilder in eine einzige Datei zu bekommen, wo man dann die Bilder wie in einer Diashow durchschalten kann.
Sehr viel interessanter dürfte aber sein, dass die Videosequenzen der Ex Kamera (Videodatei aufzeichnen und Downloaden mit Ex Tools) ausgelesen werden können.
Die Erfassung der Frames läuft wesentlich schneller als bei FLIR Tools... zumindest bei mir. So lässt es sich wirklich als Video darstellen und nicht als langsame Diashow.
Ich hab mir bisher noch nicht die Mühe gemacht, die richtigen Temperaturen mit auszulesen. Die Min und Max Werte der Sequenz stehen also immer auf fest eingestellte Werte von Tab:Setup->IR Picture Grabber->Solltemp min/max.
Wenn jemand Interesse am entschlüsseln der Temperaturinformationen hat, mit dem Fileformat des Devtools kommt man leicht an die Bytes ran... viel Spaß beim suchen.
Sequenzen können einfach mit Drag&Drop geöffnet werden... einfach drauf ziehen und ansehen.

Tab: FLIR Ex
Für die FLIR Ex hab ich ein eigenes Programm entwickelt. Der Thermoviewer wurde erst nur verwendet, um die Sequenzdatein etwas genauer zu begutachten. Die Kamera muss mit Telnet verbindbar sein (über USB mit RNDIS, RNDIS_UVC oder RNDIS_MSD verbunden und IP im Thermoviewer eingestellt).
Wenn die Verbindung hergestellt worden konnte (beim ersten Start meldet sich bestimmt die Firewall, weil dann ja ein Netzwerkzugriff stattfindet), dann ist die Schaltfläche Telnet grün.
Sobald Telnet grün ist, kann die Konsole für Befehle benutzt werden. Der Befehl "nuc" löst den Shutter aus und ist voreingestellt.

Vollautomatisierte radiometrische Bilderfassung
Was passiert da:
Die Ex Wärmebildkamera bekommt über Telnet und FTP folgende Befehle:
Init Grab: (Kamera zur Messung vorbereiten)

  • Nuc auslösen (damit die Temperaturen passen...)
  • Radiometrische Aufnahme auf 2 Frames stellen (wenn die Aufnahme gestartet wird, schaltet sie sich nach 2 Bildern wieder selbständig ab)
  • Radiometrische Frequenz auf 10 stellen (Kamera hat laut datenblatt 9FPS, sie hat die 2 Frames also schnell aufgenommen)
  • Radiometrischen Dateinamen festlegen (dort werden die 2 Frames rein gespeichert)
  • Messbox 4 einstellen (es ist zwar möglich, die Temperaturen bei der Skala auszulesen, die stimmen aber nicht mit dem höchsten und niedrigsten Messwert überein. Darum wird eine Messungsbox über das ganze Bild gelegt und der Min und Max Wert ausgelesen. Zuerst werden die Parameter der Box eingestellt, dann wird sie aktiviert.)

Nach der Initialisierung sollte auf dem Kamerabild Min und Max für das ganze Bild zu sehen sein.

Grab IR: (Bild erfassen und darstellen)

  • Radiometrische Aufnahme starten
  • Max auslesen (direkter Messwert von der Messfunktion mbox.4)
  • Radiometrische Aufnahme speichern
  • Min auslesen (direkter Messwert von der Messfunktion mbox.4)
  • Datei mit FTP auf die Festplatte downloaden (der Dateiname ist durch Init Grab ja schon bekannt)
  • Datei von der Festplatte auslesen
  • Datei nach dem auslesen löschen

Da die Telnet-Anfragen immer eine gewisse Zeit dauern, hab ich sie in 2 Funktionen aufgespalten, damit die eigentliche mehrfache Bilderfassung nicht unnötig lange dauert.

  • Init Grab: dauert ca. 20 Sek
  • Grab IR: dauert ca. 9 Sek

Am Ende der ganzen Prozedur sollte man das aktuelle Kamerawärmebild komplett auf dem PC haben. Dort kann dann das übliche mit Interpolation und Messpunkten angestellt werden.

Das ganze ließ sich bestimmt noch etwas eleganter machen, aber es ging mir vorrangig nur um den Funktionstest. Die richtigen Fernsteuerungen werden von dem Programm Ex Tools übernommen. Aber hiermit kann man gut testen, ob die Kamera mit den Ex Tools gesteuert werden kann... die Kommunikationsart ist ja die selbe.

#Version 007

Das Programm wurde ein weiteres mal auf die FLIR Ex Wärmebildkamera angepasst.

Version 007

Die Kommunikationsart wurde verbessert und ist jetzt so schnell wie bei Ex Tools.
Außderdem ist es nun möglich, einzustellen von wo die Min und Max Werte ausgelesen werden. Bei Ver006 musste es mBox 4 sein, jetzt kann die Nummer selbst festgelegt werden. Alternativ kann die Temperatur von der Skala genommen werden (wenn keine Messbox freigeschaltet ist, allerdings sind die Werte dann falsch).

Einfach Tab_FLIR_Ex->Telnet anklicken, wenn die Schaltfläche grün ist (Kamera verbunden), kann mit "Init Grab" die Kamera vorbereitet werden (muss beim Wechsel der Messboxnummer auch aktiviert werden). Dann kann man mit "Grab IR" ein Bild aufnehmen und mit den Funktionen des Programms entsprechend auswerten (interpolieren, schärfen, messen...). Zum Auslesen muss die Kamera eine IR Auflösung von 320x240 haben.

#Version 008

Bei dieser Version hat sich so einiges getan. Die Einstellungstabs auf der rechten Seite sind nun in ein Floating-Layout-Panel geändert worden. Die Einstellungen / Funktionen sind nun in Gruppen aufgeteilt und einzeln Ein/Ausschaltbar. Außerdem wird auch bei Tabs jetzt das neue Design verwendet.

Des Weiteren sind 2 Webcam Steuerungen eingebaut worden. Dadurch kann nun ein UVC-Lifebild angezeigt werden, was bei der FLIR Ex Wärmebildkamera sehr von Vorteil ist. So kann man auf dem Bildschirm die Kamera so ausrichten wie gewünscht, und dann die Bilderfassung starten.
Man kann aber auch von der Webcam ein Bild erfassen und dem IR-Datensatz hinzufügen. So kann man auch bei Kameras, die nur IR-Bilder liefern, eine Visuelle Überlagerung abspeichern.

#Rohdaten Schärfen

Rohdaten Schärfen

Ich hab mich mit dem Thema Edge enhancement beschäftigt. Dabei ist eine neue Funktion entstanden, die ich "Rohdaten schärfen" genannt habe. Da die Schärfung mit den Rohdaten arbeitet (14 Bit) und nicht mit dem normalen Anzeigebild (8 Bit), ist es sehr viel genauer.
Die Minimal und Maximalwerte des gesamten Bildes werden nicht verändert. Aber die Pixel dazwischen verschieben sich an den Kanten, was letztendlich die Messwerte verfälscht, aber die Bildqualität Signifikat verbessert. Beim Laden des Bildes werden die Rohdaten im Hintergrund ein zweites Mal im Arbeitsspeicher abgelegt (nur 1.5KB extra, bei 320x240 Bild), daher kann man Rohdaten auch wieder mit "Reset" zurücksetzen.
Beim Speichern wird das Aktuelle Bild wie sonst auch Gespeichert.
Im Gegensatz zur anderen Schärfen-Funktion, muss das Bild nicht immer wieder neu berechnet werden, was sich in der Performance bemerkbar macht.
Darum wurde es auch Rohdaten Schärfen genannt, da es im angewendeten und gespeicherten Zustand nicht reversibel ist.

Man sollte das Bild also nur so weit schärfen, wie man es auch behalten will.

#Weitere Neuheiten

Weitere Neuheiten

Für die Ex-Kamera ist auch eine Bilderfassung integriert, die die normalen gespeicherten Kamerabilder (*.jpg) einlesen kann. Dafür sind aktuell noch 2 Extraprogramme nötig, die in das /bin Verzeichnis kopiert werden müssen:
bin/convert.exe aus dem Toolset imagemagick
bin/exiftool.exe Bekommt man hier: exiftool
Dann lassen sich die Ex-Kamerabilder normal öffnen und Analysieren.

Das Dateiformat hat sich geändert und ist nicht mehr kompatibel zu den Vorversionen.

Das liegt daran, dass nun sehr viel mehr Extradaten in einer Datei gespeichert werden.
Pro Bild ist es nicht mal 1Kb, aber es macht einiges aus, da nun sehr viel mehr Messungen verfügbar sind und gespeichert werden.

  • Messpunkte können jetzt 8x vergeben werden (vorher 5x). Außerdem kann ein Name von jeweils 10 Zeichen angeben werden.
  • Messlinien können jetzt 5x vergeben werden (vorher 1x). Außerdem kann ein Name von jeweils 20 Zeichen angeben werden, die Linienfarbe ist einstellbar, Min und Maximalwert können als Symbole dargestellt werden und Extramessungen werden angezeigt(Max, Min, Diff[Max-min] und Messpunkte).
  • Messbereiche können jetzt 5x vergeben werden (vorher 2x). Außerdem kann ein Name von jeweils 20 Zeichen angeben werden, Min und Maximalwert können als Symbole dargestellt werden und Extramessungen werden auf Wunsch angezeigt(Max, Min, Diff[Max-min],Avr[Mittelwert] und Messpunkte[Pixel]).

All diese Extraeinstellungen werden auch in der Bilddatei gespeichert, weshalb das Format jetzt auch anders ist.
Die Bilder der Vorversion lassen sich im Menü bei "Bild vom alten Thermoviewer Laden" öffnen, aber es wird nur das Bild und die Farbpalette übernommen, die Messungen müssen neu eingestellt werden.

Außerdem werden Messungen nicht mehr als eigenständige Labels und Panels über dem Bild dargestellt, wie in den Vorversionen, sondern im "Paint-Event" des Hauptbilds direkt mit dargestellt. Das sieht zum einen besser aus (finde ich) erhöht aber die Darstellungsgeschwindigkeit und Performance enorm.

Die Netzwerk Bilderfassung für Flir Kameras wurde angepasst. Ab jetzt sind alle Auflösungen der Ex-Serie und ix-Serie auswählbar. Es konnten neben der E4/E8 auch von der C2 und der i3/i7 erfolgreich Bilder erfasst werden. Bei der C2 und Ex kann auch parallel das Videobild betrachtet werden.
Die ältere ix-Serie unterstützt das leider nicht. Man kann sie aber neben einer Webcam montieren, deren Bild man sich anzeigen lässt. Somit sieht man zumindest das Objekt, dessen IR-Bild erfasst werden soll. Außerdem kann man so auch gleich das Visuelle Bild mit erfassen damit man später beides Überlagern kann.

Das Programm wurde teilweise neu aufgesetzt und wird jetzt als ThermoVision_JoeC Software weitergeführt.


Zuletzt geändert am: Okt 23 2015 um 9:11 PM

© by joe-c, 2023 - 2024. All Rights Reserved. Built with Typemill.