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
Laut http://de.wikipedia.org/wiki/Bayer-Sensor wirst Du um einen Zwischenspeicher nicht drumrumkommen. In einer Zeile hast Du nur grün/blau oder rot/grün. Eventuell kannst Du Dir ja von den ungeraden Zeilen nur den Blauanteil merken und den mit rot und grün geraden Zeilen zusammenfassen. Duke
Hochwertige Debayer-Algorithmen arbeiten auf einer Fläche von 5x5 Pixeln. D.h. du benötigst Zugriff auf 5 Zeilen. Das kannst du entweder mit BRAMs oder einem externen RAM realisieren.
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 ;)
> 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
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
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.
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
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.
Apropos, falls jemand Konversionsalgorithmen gerne gleich aus der Simulation visualisieren möchte, mit GHDL geht das sehr gut. Siehe auch http://tech.section5.ch/news/?p=130 (englisch kann man ja :-) ) Grüsse, - Strubi
>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.
> Wie verbreitet ist das Bayer-Format bei solchen Sensoren?
Entweder monochrom oder Bayer...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.