Wir benutzen für eine Sortieranlage eine Bildsensoren, die farbig sind,
statt s/w und daher muss eine Bayerkonversion erfolgen. Mitgelieferte
Software ist allerdings derart simpel, das nur schlechte Bild
rauskommen. Kennt jemand eine LIB, die das kann?
Ich brauche nur die Formeln, den Code bekomme ich schon hin.
Falls nichts verfügbar, wie macht man das?
Dass ich für die Farben arbeiten muss, ist klar, mir geht es ums
Interpolieren. Logisch scheint mir, eine 2D-Kurve über mehrere Pixel zu
legen, um die Interpolaionspunkte zu erhalteb. Die Frage wäre, wie weit
ich so einen Filter ausdehnen sollte, damit er noch sinnvoll arbeitet?
Entschuldigung; ich habe was verschlungen. Ich wollte schreiben "eine
neue Art von Bildsensoren".
Außerdem fällt mir noch ein:
Die Bayerdaten kommen sequenziell als schwarz, weiss-Muster, ich muss
das also zwischenspeichern. Gibt es eine Strategie, wie man das scho
gleich mehrfach speichert, um es an verschiedene Prozesse zu senden?
Ich verstehe nur: Bahnhof.
Welchen Translator verwendest Du eigentlich?
Solltest Du ein nativer Deutschsprachler sein, solltest Du nicht mit
Bildern arbeiten, sondern an der Sprache feilen.
Übrigens, bei uns sind alle Bildsensoren Industriegrau und einer Alu
gebürstet;-)
Bildverarbeiter schrieb:> rauskommen. Kennt jemand eine LIB, die das kann?
OpenCV, gstreamer, Cottonpicken, es gibt noch eine Menge andere. Kommt
draufan, was du von deinen Bildern erwartest.
> Außerdem fällt mir noch ein:>> Die Bayerdaten kommen sequenziell als schwarz, weiss-Muster, ich muss> das also zwischenspeichern. Gibt es eine Strategie, wie man das scho> gleich mehrfach speichert, um es an verschiedene Prozesse zu senden?
Macht auf einem Intel kaum Sinn, da nimmst du, wenn's irre schnell gehen
soll, lieber die entsprechenden SIMD-Befehle. Was ist denn das für eine
Kamera? Typischerweise reicht es, 3 bis 5 Zeilen zwischenzupuffern, bei
clever gestrickten Systemen verarbeitet man während des Bildeinzugs. Das
hängt aber stark vom eingesetzten Framegrabber ab.
Gruss,
- Strubi
Ich stochere mal im Nebel, weil mir die Aufgabe bekannt vorkommt: Die
Anlage ist aus Fischertechnik, sortiert Smarties und hat seit "neuestem"
eine intelligente Kamera? Wenn ja, lass dich nicht erwischen, die Profs
und Laborassistenten haben auch Internet und sehen das gar nicht gern.
Jetzt mal weniger esoterisch. Geht es um ein Embedded-System oder läuft
die Auswertung auf dem PC? Wenn PC, dann nimm etwas von dem bereits
genannten. Ansonsten: Das Verfahren nennt sich umgangssprachlich
"Debayering" und hier https://en.wikipedia.org/wiki/Demosaicing finden
sich unter den Referenzen lauter tolle Links mit Formeln (Nebenbei
gestichelt: Der Artikel ist im deutschen Wiki genau einen Link von
"Bayer-Sensor" entfernt).
Bildverarbeiter schrieb:> "eine neue Art von Bildsensoren".
Was soll das sein? Was können die besser? Bitte um Datenblatt,
interessiert mich.
Bildverarbeiter schrieb:> Die Bayerdaten kommen sequenziell als schwarz, weiss-Muster, ich muss> das also zwischenspeichern. Gibt es eine Strategie, wie man das scho> gleich mehrfach speichert, um es an verschiedene Prozesse zu senden?
Du sprichst in Rätseln. Für jede Bildebene (also in deinem Fall RGB/CMY
oder was auch immer) einen Puffer - z.B. R,G,B. Und nach Empfang aller
Ebenen: C = f(R,G,B), wobei C das farbige Bild und f deine
Farbrekonstruktionsfunktion ist. Das für jeden einlaufenden Frame.
Wenn Du weitere Hilfe brauchst: Datenblätter aller beteiligten
Komponenten und Bilder vom Aufbau posten.
Bildverarbeiter schrieb:> Software ist allerdings derart simpel, das nur schlechte Bild(er)> rauskommen.
Was heisst denn in dem Zusammenhang "schlecht"?
Die Schwierigkeit bei der Bayerthematik ist ja hauptsächlich die,
unterhalb der eigenlich definierten Auflösung, die sich durch die
Pixelabstände und dem Abtasttheorem ergibt, nach Informationen zu suchen
und diese wiederherzustellen und das betrifft überwiegend die Kanten.
Es gibt dazu eine Reihe von überlegungen, die man (auch durch die
Hinzunahme der Informationen der anderen Farben) die Geometrie schätzen
und manuell rekonstruieren kann. Das ist aber alles Fischen im Trüben
und erfordert diskrete Berechnungen.
Mit einem einzigen Filter läuft es darauf hinaus, daß man sich 3 oder 5
Werte nimmt und eine glättende Kurve durchlegt und dabei Nyqust
beachtet. Im einfachsten Fall reichen auxh 2, um zu interpolieren, aber
das erzeugt massive Knicke und Artefakte.
Bei der Bildverarbeitung kann man zweidimensional denken, was die
Ausdehnung in jede Richtung X/Y etwas vermindern hilft. Mit 3 Werten
würde man also 6 Pixel für rot und blau - und 3 Pixel für grün in jede
Richtung brauchen.
Die von mir entwickelten Bayerfilter laufen auf 5 Werten, schließen also
bis zu 9 Pixel in jeder Richtung mit ein. Das Filter schaut also auf 81
Werte gleichzeitig und legt eine 2d-Ebene durch - gfs unter Ignorieren
von defekten Pixeln. Die Position wird auch gleich mitkorrigiert, damit
die Farbbilder zueinander passen. Man errechnet aus jeweils 10x10 pixeln
brutto ein echtes 2x2 Farbpixel, dessen wertemäßige Erstreckung 4x4
beträgt. Darauf werden dann Schärfungsfilter angewendet.
Bildverarbeiter schrieb:> Wir benutzen für eine Sortieranlage eine Bildsensoren, die farbig sind,> statt s/w und daher muss eine Bayerkonversion erfolgen. Mitgelieferte> Software ist allerdings derart simpel, das nur schlechte Bild> rauskommen.>> Logisch scheint mir, eine 2D-Kurve über mehrere Pixel zu> legen, um die Interpolaionspunkte zu erhalteb.
Das Stichwort für die google Suche ist demosaicing, damit lassen sich
hunderte Dokumente finden bspw:
https://courses.cs.washington.edu/courses/cse467/08au/pdfs/lectures/09-Demosaicing.pdfhttp://tx.technion.ac.il/~rc/Demosaicing_algorithms.pdfhttp://research.microsoft.com/pubs/102068/demosaicing_icassp04.pdf
Ein interesanter Ansatz ist nicht pauschal nach einer "optimalen"
Interpolation suchen sondern gezielt den am störenden Fehler - den
"Farbsaum" (BTW kombiniert mit "Bayer" auch ein geeignetes
Google-Suchwort) - anzugehen. Also Bereiche bei denen dieser Saum
besonders störend hervortritt anders zu interpolieren. Das setzte bei
den Beispielen mit denen ich mich damals beschäftigte eine
Kantendetektion voraus.
MfG,
Fpga K. schrieb:> Ein interesanter Ansatz ist nicht pauschal nach einer "optimalen"> Interpolation suchen sondern gezielt den am störenden Fehler - den> "Farbsaum" (BTW kombiniert mit "Bayer" auch ein geeignetes> Google-Suchwort) - anzugehen. Also Bereiche bei denen dieser Saum> besonders störend hervortritt anders zu interpolieren. Das setzte bei> den Beispielen mit denen ich mich damals beschäftigte eine> Kantendetektion voraus.
Moin,
der Ansatz deucht mich auch recht elegant, allerdings ist es ganz schön
knifflig, das nur mit einem kleinen Filterkernel so hinzukriegen, dass
lange durchs Bild laufende Kanten (z.B. Richtung 1 Uhr) kein Aliasing
zeigen.
Aber da es wohl nicht auf dem FPGA laufen muss...
Gruss,
- Strubi
Fpga K. schrieb:> Ein interesanter Ansatz ist nicht pauschal nach einer "optimalen"> Interpolation suchen sondern gezielt den am störenden Fehler
Man muss beides tun, weil der interpolierte / tieffrequente Verlauf des
Bildes die Basis für Erkennung der weitläufigen Kante darstellt. Wichtig
ist dabei vor allem auch die Behandlung und Lageinterpretation der
Farbe. Man kann bei einem weitgehend homogenen Verlauf der Umgebung
antizipieren, dass sich a) die Kante im unbekannten Pixel fortsetzt,
auch wenn eine oder gfs sogar 2 Farben das NICHT hergeben und b) gerade
dort eine Mittelung zu einem sichtbaren Fehler führt.
Bildverarbeiter schrieb:> Wir benutzen für eine Sortieranlage eine Bildsensoren, die farbig sind,> statt s/w und daher muss eine Bayerkonversion erfolgen.
Das ist aber auch zu hinterfragen - ob für eine Sortierung also
Gruppierung der aufgenommen Bilder nach optischen Eigenschaften eine
Bayerkonversion zwingend nötig ist.
Eher im Gegenteil, man reduziert das Bild bis die benutzen
Klassifikatoren den Bildinhalt bestimmen und führt dann eine Bewertung
durch. Bei Kontrolle der Farbe genügt ein Vergleich mit einem
Referenzbild (Vergleichsmuster oder auch Farbtafel) ohne
Bayerkonversion, bei einer Kontrolle der Muster, Geometrien genügt ein
Graustufenbild völlig. Deshalb werden in der Auromatisierung gern
Graustufenkameras eingesetzt und das erleichter auch die Downskalierun
(Binning) deutlich.
Beleuchtung mit "farbigen" Blitzlich kann auch helfen. Ich würde also in
die Bayerkonvertierung weniger Aufmerksamkeit widmen sondern die
Sortierung an dem nicht interpolierten Bild ausführen,
Bayerkonvertierung nur für den BildViewer aktivieren. Außer natürlich
man benutz eine "Sortierbibliothek" die zwingend auf "demosaicte" Bilder
angewiesen ist.
MfG,
Das finde ich einen interessanten Ansatz. Aber wie bekommt man dann die
Lage in der Griff? Kleine Verschiebungen unterhalb der Bayer-Dimension
führen zu springendem Verhalten.
Den Vorteil des Blitzens verstehe ich nicht. Die Farbmaske wird doch
ohnehin die Farben trennen und mit Blitz hat man die Farben nur
nacheinander.
Mal ein Byaer Bild wie es aus der Bayer-Kamera kommen sollte:
http://www.cs.unc.edu/~kewang/13spring/vision/figures/crayons_mosaic.pngMarkus F. schrieb:> Das finde ich einen interessanten Ansatz. Aber wie bekommt man dann die> Lage in der Griff? Kleine Verschiebungen unterhalb der Bayer-Dimension> führen zu springendem Verhalten.
Ich glaube das weniger das springen auftritt als eine Verschiebung.
Verschiebungen zu erkennen ist das kleine einmal eins der
Bildverarbeitung, das schafft jede optische maus. Ist die verschiebung
(und eventuell Skalierung) im Vergleich zum Referenzbild erkannt, wird
diese rausgerechnet und dann der eigentliche Sortierungalgo gestartet.
Dabei behilft man sich gerne mit passmarken/Druckmarken, wie
beispielsweise hier bei PCB's:
https://www.dischereit.de/tipps/faq/passermarken-fiducials> Den Vorteil des Blitzens verstehe ich nicht. Die Farbmaske wird doch> ohnehin die Farben trennen und mit Blitz hat man die Farben nur> nacheinander.
wenn man statt einmal Weiss mit Bayer; 3 mal rot/grün/blau ohne Bayer
blitzt hat man für jedes Pixel die volle Farbinformation, rechnet sich
also keine künstlichen Farbsäume durch das demosaicing rein.
Ohne Bayer matrix bekommt man auch ein homogenes bild ohne die Pünktchen
wie im Bild oben. Diese Pünktchen könnten evtl doch eine Interpolation
nötig machen, das hab ich noch nicht ganz durchdacht, aber vielleicht
reicht eine Interpolation in der Grauskala. Oft reduziert man die
Aufbahme für eine Optische Qualitätskontrolle resp Sortierung noch
weiter indem eine Binarisierung durchführt also als auf ein
Schwarz/weiss-bild reduziert. ist halt die Frage was man für eine
objekttrennung vornehmen will.
MfG,
Fpga K. schrieb:> Mal ein Bild wie es aus der Bayer-Kamera kommen sollte:
Wenn ich das Bild im Link prozessiere, erhalte ich einen Linienfehler,
d.h. ich muss das Bayer-Pattern um eine Zeile nach unten schieben, damit
es passt - wieso auch immer. Möglicherweise entsteht der Fehler auch bei
mir durch die Konversion, weil mein FPGA ein anderes Format erwartet und
da ein falscher offset drin steckt.
Das hier käme dann bei einem bilinearen Filter über 3 Pixel hinweg
heraus. Das sollte für Objekterkennung reichen, wenn sie mit dem
Bayersignal direkt nicht umgehen kann. Einen Versatz muss man dann auch
nicht berücksichtigen. Natürlich muss der Filter entsprechend appliziert
werden und selber keinen Versatz produzieren. Man kann z.B. nicht
einfach das Rot-Bild glätten und dem genau so geglättenten Blau
überlagern.
Wenn man farbspezifisch sucht, also z.B: mit einer RGB-Maske, kann man
das natürlich auch im Nachhinein tun und von den ermittelten Koordinaten
jeweils halbe Subpixel weginterpretieren.
> wenn man statt einmal Weiss mit Bayer; 3 mal rot/grün/blau ohne Bayer> blitzt hat man für jedes Pixel die volle Farbinformation, rechnet sich> also keine künstlichen Farbsäume durch das demosaicing rein.
Ich bin ohnehin nicht sicher, ob die nachträglich hineininterpretierten
fehlenden Pixel irgendeine wirklich wichtige Information bieten können,
die die Objekterkennung nutzen kann. Das geschieht ja eigentlich nur, um
den Betrachter ein feineres Bild zu suggerieren.
Wenn man das "ent-Bayern" weglässt, bzw entsprechend farbneutral
durchführt, kommen erst gar keine Falschfarben rein, die dann
farbspezifische Matcher irritieren könnten.
Das Mehrfachblitzen würde in dem Fall auch nicht funktionieren, weil man
dann einen echten SW-Sensor mit Vollspektrum OHNE eine Bayerfarbmaske
benötigt und wenn man das tut, hätte man auch nur ein Drittel der frame
rate. Das ist bei beweglichen Objekten dann schnell der show stopper. Im
Gegenteil: Bei solchen Applikationen (besonders in bestimmten Bereichen,
auf die ich hier nicht näher eingehen kann) geht man durchaus den
gegensätzlichen Weg und verzichtet auf Auflösung, um höhere frame Raten
zum erhalten, als sie z.B. bei konventionellem Video (60 Hz) üblich
sind.
> Ohne Bayer matrix bekommt man auch ein homogenes bild ohne die Pünktchen> wie im Bild oben. Diese Pünktchen könnten evtl doch eine Interpolation> nötig machen, das hab ich noch nicht ganz durchdacht, aber vielleicht> reicht eine Interpolation in der Grauskala.
Dann würde man verschiedene Farben zusammenklatschen und Information
verlieren. Das ginge nur bei reinen Luminanzmatchern.
> ist halt die Frage was man für eine> objekttrennung vornehmen will
Beim Sortieren ist die Farbe meist sehr hilfreich, weil man dann z.B.
mit verschiedenen Farben aus unterschiedlichen Richtungen belichten kann
und so 3D-Strukturen leichter erkennen kann. Erhabene Objektteile werfen
dann zwei farbige Schatten und es braucht mitunter nur sehr simple
Fragestellungen, um die Lage und Orientierung eines Objekts zu erkennen.
Ich denke, das einfachste ist es, man greift sich die Farben parallel
und reduziert die Auflösung durch eine saubere down conversion auf die
tatsächliche Pixelgröße, die der Farbe entspricht. Dann hat man nur ein
Viertel der Rohinformation, fängt sich keine falschen Farben ein und
verliert auch nicht wirklich etwas.