Bayer-Mosaic zu RGB

Gast #1275000
Lesenswert?

Hallo Forum,

ich habe mir vor kurzen ein Kameramodul für mein Terasic Board (DE2-70) 
bestellt.
Das Kameramodul liefert (wie ich mit erschrecken festellen musst :-) ) 
keinen RGB-Datenstrom sondern die Daten kommen durch den Bayer-Mosaic 
Filter in dem Format:
[G,00][B,10][G,20][B,30]...
[R,01][G,11][R,21][G,22]...
[G,03]...

Diese würde ich nun gerne in einen RGB-Datenstrom umwandeln.
Ich habe dazu auch schon einige Algorithmen gefunden, aber diese 
brauchen neben den Zeilenzugriff auch einen Spaltenzugriff, also:
R 00 = [R,01]
G 00 = [G,00]
B 00 = [B,10]

In dem Fall würde ich für den Rotanteil des ersten Pixels schon den 
Rotwert aus der nächsten Zeile benötigten.

Ich könnte einen Zeile im internen Speicher ablegen, aber so viel 
Speicher habe ich leider nicht zur Verfügung.

Drum ist meine Frage ob es einen einfacheren Interpolationsalgorithmus 
gibt, der keinen Vorgriff um eine Zeile benötigt?

Die Qualität muss nicht die beste sein, ich möchte nur das 
zwischenspeichern einer ganzen Zeile vermeiden.

Hat schon jemand etwas ähnliches Realisiert oder ist vor dem gleichen 
Problem gestanden?

Bin für jeden Tipp Dankbar!

lg,
Manuel
Gast #1276032
Lesenswert?

Vielen Dank für eure Antworten.

Ich habe schon befürchtet das ich um den Zeilenspeicher nicht drum herum 
kommen werde. Ich werde es wohl mit dem Ansatz von Duke versuchen um so 
immerhin die Länge des Speichers um die Hälfte zu reduzieren.

Wiegesagt bei der billigen Kamera reicht eine eher einfache 
Interpolation über eine Zeile sicher aus. Ist ja nicht so das ich mit 
dem zur Verfüugung stehenden Speicher eine andere Wahl hätte ;)
#1278452
Lesenswert?

> Ich könnte einen Zeile im internen Speicher ablegen, aber so viel
> Speicher habe ich leider nicht zur Verfügung.

Was ist denn die Aufloesung deiner Kamera?

> Wiegesagt bei der billigen Kamera reicht eine eher einfache
> Interpolation über eine Zeile sicher aus.

Fuer eine 3 Megapixel Kamera mit 8 Bit Farbtripel braucht es 4 M4K 
Bloecke eines CycloneII um eine Zeile zu speichern.
Dein 2C70 hat 250 davon.

Cheers, Roger
Gast #1593728
Lesenswert?

Hallo,

ich stehe vor einem ähnlichen Problem und würde gern wissen, ob ihr das 
Problem gelöst habt und wie ihr letzten Endes ein RGB-Format aus dem 
Bayer RGB erzeugt habt? Als Info, ich möchte eine kleine Kamera 
entwickeln und habe mir dazu den IBIS5-B-1300 gekauft. Jetzt suche ich 
nach einer Möglichkeit, ein schönes Bild zu erzeugen.
Ich habe jetzt schon einige Seiten durch und wäre gerade auch an einer 
Umsetzung des Algorithmus als Quellcode interessiert, wenn sowas jemand 
von euch hat.

Ich danke euch schon im Voraus und wünsche noch einen schönen Abend!
Tobi
Gast #2363121
Lesenswert?

Eine Ent-Bayerung ist ja nicht so schwer. Du musst nur immer 5 Zeilen 
parat haben und dann ein Filter darüber laufen lassen. Das Filter schaut 
in jedem 4er-Böckeh nach den Intensitäten und addiert sie zu 50% für 
grün und 100% für rot und blau. Danach hast Du ein einfaches RGB-Bild.
Gast #2364049
Lesenswert?

Hi,

brauchst du denn wirklich RGB fuer die Bildverarbeitung?
Man kann die bayercodierten Daten naemlich auch per 2x2-Schema direkt in 
planares YUV420-Format umwandeln. Das ist normalerweise das, was JPEG 
bzw. diverse andere Encoder fressen. Ist zwar nicht High-End-Qualitaet, 
aber fuer Bildverarbeitung ok.

Gruesse,

- Strubi
Gast #2364064
Lesenswert?

Wenn Farbinformationen vorliegen, sind die eigentlich immer irgendwie 
hilfreich für die Bildverarbeitung.

> Danach hast Du ein einfaches RGB-Bild
Ein sehr einfaches. Dann lieber die Zwischeninterpolation /nearest 
neighbour.
Persönliche Seite #2364697
Lesenswert?

>nearest neighbour
Nee, wirklich nicht. Eine quadratische Interpolation, gfs selektiv 
kantenorientiert ist einfach zu implementieren. Dazu kann man das Bild 
noch verrauschen, glätten und dann erneut schärfen.

>hochwertige Debayer-Algorithmen arbeiten auf einer Fläche von 5x5
>Pixeln. D.h. du benötigst Zugriff auf 5 Zeilen.
Wenn man für jedes Pixel eine 5x5 laufen lassen will, muss man von den 4 
möglichen Fällen jeweils 2+2 für die alternierenden Zeilen 
unterscheiden. Um die benötigte Entscheidung bei komplexeren 
Interpolationen zu fällen, ist es nötig, mindestens die komplette 
4er-Zelle zu "sehen". Daher ist es gfs. zweckmäßiger mindestens 6 Zeilen 
zur Verfügung zu haben. Dann kann man auch etwas puffern, die 4 Fälle 
parallel prozessieren und so bei den nachgeschalteten Filtern redundante 
Implementierungen der Terme nutzen. Wenn man noch glätten und schärfen 
möchte, muss man den Betrachtungsradius u.U. auf noch mehr Pixel 
ausdehnen.

>Simulation visualisieren möchte, mit GHDL
Danke für den Tipp! Habe ich noch gar nicht gesehen. Sehr guter Ansatz.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren