org.lego.navigation.img
Class ScanNeu

java.lang.Object
  extended by org.lego.navigation.img.ScanNeu

public class ScanNeu
extends java.lang.Object

Die elementaren Bilderkennungsoptionen werden von dieser Klasse bereit gestellt.

Erstellung von Masken

Um Farben zu erkennen durchsucht die Funktion erstelleMaskeHSV(Farbe, boolean) das Bild nach dem übergebenen Farbton. Daraus wird dann eine Maske erstellt, die als Schwarz-Weiß-Bild die Punkte ähnlicher Farbe enthält.

Suche nach der LED

Um Punkte, die sich zwischen zwei Bildern stark geändert haben, zu finden, vergleicht die Methode findeDiff(Image, Image) zwei Bilder miteinander. Pixel für Pixel werden die Farbwerte verglichen und daraus eine Maske erstellt, die die Differenzen festhält.

Particle Analyzer

Um aus der Maske, die meist noch etwas Rauschen enthält, zusammenhängende Gebilder herauszufiltern, gibt es die Methode analyzeParticles(ImagePlus, ImagePlus). Diese von ImageJ eingebettete Routine durchsucht das übergebene Schwarz-Weiß-Bild und legt Ellipsen um die gefundenen Bereiche.

Auswahl der passenden Bereiche

Um aus den nun gefundenen Ellipsen nur diejenigen mit der gewünschten Größe herauszufiltern, haben wir die Funktionen getPassendeResultRows(ResultsTable, Ellipse) und getPassendeResultRows(ResultsTable, int, int) geschrieben. Damit werden kleinere Partikel ausgeblendet.

Author:
Joachim

Constructor Summary
ScanNeu(int width, int height)
           
 
Method Summary
(package private)  ij.measure.ResultsTable analyzeParticles(ImagePlus blackWhite, ImagePlus ergebnis)
          Hier wird der ParticleAnalyzer von ImageJ aufgerufen, um zusammenhängende Bereiche in der Maske zu finden.
 java.awt.Image debugImg()
          gibt das aktuell gespeicherte Bild zurück.
 java.awt.Image debugImg(int i)
          Gibt die HSV-Ebenen einzeln als Graustufen-Bild zurück.
(package private)  void entferneHintergrund()
          Ruft den BackgroundSubtractor von ImageJ auf, um den Hintergrund des Bildes zu entfernen.
(package private)  ImagePlus erstelleMaskeHSV(Farbe farbe)
           
(package private)  ImagePlus erstelleMaskeHSV(Farbe farbe, boolean verwendeHelligkeit)
          Durchsucht das aktuelle Bild nach dem übergebenen Farbton und erstellt daraus ein Schwarz-Weiß-Bild
(package private)  ImagePlus erstelleMaskeRGB(Farbe f)
          Durchsucht das aktuelle Bild nach dem übergebenen Farbton und erstellt daraus ein Schwarz-Weiß-Bild Es werden Punkte markiert, deren Abstand zum Übergebenen Punkt kleiner als der in der Config gespeicherte Maximalabstand ist.
 ImagePlus findeDiff(java.awt.Image dunkel, java.awt.Image hell)
          Sucht nach Differenzen zwischen zwei Bildern.
 ImagePlus findeDiffHSV(java.awt.Image dunkel, java.awt.Image hell)
          sucht nach Differenz zwischen übergebenem und gespeichertem Bild durch Helligkeitsvergleich Vergleicht dazu die Helligkeitswerte.
 Farbe getFarbe(int x, int y)
          Gibt die Farbe eines Punktes zurück
(package private)  Farbe getFarbeMittelwert()
          sucht den Mittelwert der Farbe (Hue) im aktuellen ROI Da 256 = 0 ist im HSV-Farbmodell, müssen wir hier etwas mehr Aufwand betreiben.
(package private)  java.util.Vector<ResultRow> getPassendeResultRows(ij.measure.ResultsTable rt, Ellipse el)
          Wähle aus einem Resultset die Ellipsen mit passenden Parametern aus
(package private)  java.util.Vector<ResultRow> getPassendeResultRows(ij.measure.ResultsTable rt, int x, int y)
          Sucht aus einer ResultsTable diejenige(n) Ellipse(n) heraus, die den Punkt (x,y) enthalten.
 void setDiff(int diff)
          Deprecated. 
(package private)  void setRoi(ij.gui.Roi newRoi)
          Setzt die RegionOfInterest neu.
 void updateImg(java.awt.Image img)
          ersetzt das gespeicherte Bild durch das übergebene und rechnet es in HSV um
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ScanNeu

public ScanNeu(int width,
               int height)
Method Detail

updateImg

public void updateImg(java.awt.Image img)
ersetzt das gespeicherte Bild durch das übergebene und rechnet es in HSV um

Parameters:
img -

getFarbe

public Farbe getFarbe(int x,
                      int y)
Gibt die Farbe eines Punktes zurück

Parameters:
(x - , y) der gewünschte Punkt
Returns:
Den HSV-Farbwert an der Position (x, y)

setDiff

@Deprecated
public void setDiff(int diff)
Deprecated. 


debugImg

public java.awt.Image debugImg()
gibt das aktuell gespeicherte Bild zurück.

Returns:
AWT-Image

debugImg

public java.awt.Image debugImg(int i)
Gibt die HSV-Ebenen einzeln als Graustufen-Bild zurück.

Parameters:
i: - 0=Hue, 1=Saturation, 2=Brightness
Returns:
AWT-Image

findeDiff

public ImagePlus findeDiff(java.awt.Image dunkel,
                           java.awt.Image hell)
Sucht nach Differenzen zwischen zwei Bildern. Wird zur Ortung der LED verwendet Arbeitet auf den RGB-Werten

Returns:
eine Schwarz-Weiß-Maske, die die Punkte mit großer Differenz enthält

findeDiffHSV

public ImagePlus findeDiffHSV(java.awt.Image dunkel,
                              java.awt.Image hell)
sucht nach Differenz zwischen übergebenem und gespeichertem Bild durch Helligkeitsvergleich Vergleicht dazu die Helligkeitswerte. Diese Funktion ist problematisch, wenn die ausgeschaltete LED schon einen Helligkeitswert > 240 hat. Dann wird die Differenz in der Helligkeit nicht mehr erkennt.


entferneHintergrund

void entferneHintergrund()
Ruft den BackgroundSubtractor von ImageJ auf, um den Hintergrund des Bildes zu entfernen.


erstelleMaskeRGB

ImagePlus erstelleMaskeRGB(Farbe f)
Durchsucht das aktuelle Bild nach dem übergebenen Farbton und erstellt daraus ein Schwarz-Weiß-Bild Es werden Punkte markiert, deren Abstand zum Übergebenen Punkt kleiner als der in der Config gespeicherte Maximalabstand ist.

Parameters:
(r,g,b) - die Farbe, die gesucht werden soll
Returns:
eine SchwarzWeiß-Maske, die für die Weiterverarbeitung im ParticleAnalyzer geeignet ist

erstelleMaskeHSV

ImagePlus erstelleMaskeHSV(Farbe farbe)

erstelleMaskeHSV

ImagePlus erstelleMaskeHSV(Farbe farbe,
                           boolean verwendeHelligkeit)
Durchsucht das aktuelle Bild nach dem übergebenen Farbton und erstellt daraus ein Schwarz-Weiß-Bild

Parameters:
farbe -
verwendeHelligkeit - - bei false werden die Helligkeitsangaben ignoriert
Returns:
eine SchwarzWeiß-Maske, die für die Weiterverarbeitung im ParticleAnalyzer geeignet ist

analyzeParticles

ij.measure.ResultsTable analyzeParticles(ImagePlus blackWhite,
                                         ImagePlus ergebnis)
Hier wird der ParticleAnalyzer von ImageJ aufgerufen, um zusammenhängende Bereiche in der Maske zu finden. Es werden Ellipsen um die gefundenen Bereiche gelegt, deren Mittelpunkte und Winkel stehen in der ResultsTable, die zurückgegeben wird.

Parameters:
blackWhite -
ergebnis - In dieses RGB-Bild werden die gefundenen Ellipsen eingezeichnet. Kann auch null sein.
Returns:
ergebnis-Image mit den berechneten Ellipsen und Result-Table

getFarbeMittelwert

Farbe getFarbeMittelwert()
sucht den Mittelwert der Farbe (Hue) im aktuellen ROI Da 256 = 0 ist im HSV-Farbmodell, müssen wir hier etwas mehr Aufwand betreiben.

Returns:
Die Helligkeit und der Farbton werden zurückgegeben. Fallse der Roi null ist oder eine Gleichverteilung der Farben vorliegt, wird Null zurückgegeben.

getPassendeResultRows

java.util.Vector<ResultRow> getPassendeResultRows(ij.measure.ResultsTable rt,
                                                  Ellipse el)
Wähle aus einem Resultset die Ellipsen mit passenden Parametern aus

Parameters:
rt - ResultTable
el - Ellipse mit den Parametern area, major, minor etc
Returns:
einen Vector mit den passenden Ellipsen

getPassendeResultRows

java.util.Vector<ResultRow> getPassendeResultRows(ij.measure.ResultsTable rt,
                                                  int x,
                                                  int y)
Sucht aus einer ResultsTable diejenige(n) Ellipse(n) heraus, die den Punkt (x,y) enthalten.

Parameters:
rt -
x -
y -
Returns:
einen Vector mit den passenden Ellipsen

setRoi

void setRoi(ij.gui.Roi newRoi)
Setzt die RegionOfInterest neu.

Parameters:
newRoi -