Forum: Digitale Signalverarbeitung / DSP / Machine Learning Bayer-Bildsensor interpolieren


von Bildverarbeiter (Gast)


Lesenswert?

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?

von Bildverarbeiter (Gast)


Lesenswert?

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?

von Sebastian S. (amateur)


Lesenswert?

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;-)

von Strubi (Gast)


Lesenswert?

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

von Timmo H. (masterfx)


Lesenswert?


von Strömli (Gast)


Lesenswert?

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.

von Strömli (Gast)


Lesenswert?

Merke gerade, muss natürlich R,G,B = f(C) heißen, wobei C die Rohdaten 
in der Reihenfolge des Bayer-Sensors enthält.

von J. S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.

: Bearbeitet durch User
von Fpgakuechle K. (Gast)


Lesenswert?

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.pdf
http://tx.technion.ac.il/~rc/Demosaicing_algorithms.pdf
http://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,

von Strubi (Gast)


Lesenswert?

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

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von Fpgakuechle K. (Gast)


Lesenswert?

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,

von Markus F. (Gast)


Lesenswert?

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.

von Fpgakuechle K. (Gast)


Lesenswert?

Mal ein Byaer Bild wie es aus der Bayer-Kamera kommen sollte:
http://www.cs.unc.edu/~kewang/13spring/vision/figures/crayons_mosaic.png


Markus 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,

von J. S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.