Forum: FPGA, VHDL & Co. Frage zu 2-dimensionalen Bildfiltern


von Berndt (Gast)


Lesenswert?

Ich baue an einem Bildweiterleitungssystem, das Bildsignaldaten 
aufnehmen und speichern kann. Unter Umständen sollen einfach 
Bildverarbeitungsmöglichkeiten in Echtzeit geschaffen werden, wie z.B: 
Helligkeit, Kontrast und Gamma. Da dies eindimensionale Operationen 
sind, die direkt auf den Datenstrom wirken, gibt es da keine Problem 
meinereits, wie ich da rangehen werde.

Anders sieht es aus, wenn es um Bildglättung oder Kantenschärfung geht. 
Da müsste zweidimensional aufs Bild geschaut werden.

Nach meinem Verständnis muss ich immer sektorweise mit jeweils einem 
Bildareal arbeiten und das dann gedanklich weiterschieben, was gfs 
programmiertechnisch aufwändig sein wird, aber ich denke ich weiss, ich 
ich das machen müsste.

Wo es jetzt aufhört ist die Interpretation der Daten: Bei einem normalen 
Signal habe ich einen kontinuierlichen Strom von Daten, denen ich 
Frequenzen zuordnen kann, um z.B. einen Tiefpass zu etablieren, um das 
Rauschen zu redzieren. Wie ist das im zweimdimensionalen?

Über welche Fläche muss sich ein Filter erstrecken?
Wo tritt hier Nyqist auf und wie designed man einen Tiefpass mit seinen 
Koeffizienten so, dass er alles oberhalb abschneidet, wenn man 
runtersampeln will?

Ich stelle mir eine Art von Radius um den Zentralpunkt vor, ab dem der 
Abstand in einem Verhältnis zum nächsten Filterkoeffizienten steht. Aber 
wie ist der Zusammenhang?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dein Problem hat eigentlich nichts mit Programmierbarer Logik, sondern 
viel eher mit Signalverarbeitung zu tun. Ich schlage vor, den Thread 
dorthin (Forum DSP) zu verschieben. Einverstanden?

von Florian P. (db1pf)


Lesenswert?

Hallo,

bei Bildern (2D Daten) kannst du die 2D Fourier Transformation anwenden. 
(siehe z.B. 
http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation, in der 
Mitte der Seite sind ein paar Beispiele). Nur mit der Interpretation der 
Ergebnisse wird es etwas schwieriger ;)

Grüße,
Florian

von ähmm.. (Gast)


Lesenswert?

ersten: bleib im zeit-bereich.

zweiten: für einfach Filterung reicht nen 3x3 Kernel, je nach HW kannst 
du aufbohren 7x7, 11x11 oder 15x15.

Damit geht nen Blur ( Tiefpass ) z.B:

3 3 3
3 3 3
3 3 3

und ne Edge Enhance (Hochpass) z.B:
 -1 -1 -1
 -1  8 -1
 -1 -1 -1

brauchst im "einfachsten" Fall 9 Multiplizierer und Addier, 9 Register 
und 2 Zeilenpuffer

Wenn du die Wert dann so legst, dass ein vielfaches einer zwei-potentz 
rauskommt bist zu "fertig".

Cheers

von Lupensucher (Gast)


Lesenswert?

Beim Streamprocessing wirst du kleinere Felder benutzen müssen, da ja 
deine daten zeilenwise aus der Kamera tröpfeln und du dan alle "oberen" 
zeilen zwischenspeichern musst. Ein FPGa hat aber nicht so viel On-Board 
speicher.
Bei Farbkameras musst du noch davor die fehlende Farben der bayer matrix 
interpolieren.

Einige Aspekte der Bildverarbeitung in Echtzeit behandelt das Buch: 
978-3540419778. Tipps zur Bildbearbeitung am PC helfen bei der 
Implementierung von Echtzeit-Anwendungen nicht viel weiter.

MfG,

von Lupensucher (Gast)


Lesenswert?

<Dein Problem hat eigentlich nichts mit Programmierbarer Logik, sondern
<viel eher mit Signalverarbeitung zu tun. Ich schlage vor, den Thread
<dorthin (Forum DSP) zu verschieben. Einverstanden?

Falls er das in Echtzeit mit einem FPGA implementieren soll, sollte der 
Thread erstmal hier bleiben. Wenn er sich dann Bild über die 
leistungsfähigkeit von FPGA#s und  entwicklungsaufwand gemacht hat, kann 
er bei den DSP-Gurus bei den besten, gerade noch implementierbaren 
Filter nachfragen.

MfG,

von Robert K. (Firma: Projektleiter Medizinsoftware) (robident)


Lesenswert?

ähmm.. schrieb:
> Damit geht nen Blur ( Tiefpass ) z.B:
> 3 3 3
> 3 3 3
> 3 3 3

Sollte das nicht eher sowas sein?

1 2 1
2 4 2
1 2 1

Damit er sanft reingleitet?

Wie wäre es mit sowas?

0 1 2 1 0
1 2 3 2 1
2 3 4 3 2
1 2 3 2 1
0 1 2 1 0

von Micha (Gast)


Lesenswert?

Was vielleicht noch dem Verständnis dienen könnte: Suche mal den Begriff 
"Raumfrequenzen". Man kann theoretisch jedes Bild auch wieder als 
(unendliche) Summe von solchen Frequenzen interpretieren und schon bist 
Du wieder in der gleichen Gedankenwelt wie Du es im 1D Bereich warst.

Noch was praktisches: Habe in meiner Diplomarbeit (wobei das imho nichts 
neues ist) ua. Bayer Demosaicing und Faltung auf dem Sensorstrom 
gemacht. Wenn Du einen (hier) 3x3 Filterkernel hast kannst Du (wenn der 
Sensor das vom Timing erlaubt) folgendes machen: Du baust Dir 4 
verschiedene Zeilenspeicher aus Blockram die Du mit Bildzeilen füllst. 
Sobald 3 voll sind machst Du darauf deine Faltung. Normalerweise reicht 
es hier einen Kern zu benutzen und von links nach rechts zu gehen. 
Parallel kommt die 4. Bildzeile rein, welche Du in den 4. Zeilenspeicher 
legst.

Die Faltung auf den 3 Zeilen wird ein wenig Latenz haben (lesen aus 
Blockram und ggf. Register um die Frequenz zu erhöhen). In den meisten 
Fällen (Datenblatt!) sollte die aber kleiner sein als das Zeilenblanking 
welches nach jeder Bildzeile vom Sensor kommt - die Faltung dauert also 
nicht so lange wie die Ankunft einer neuen Zeile inkl. horizontal 
Blanking => kein Problem. Ist nun die 4. Zeile gespeichert rotierst du 
die Rollen (Mux + etwas Logik)

Deine alte Zeile 1 nimmt nun die neuen Sensordaten auf und die bisherige 
Zeilen 2-4 werden ausgelesen und darauf die Faltung gemacht. Usw...

Latenz ist dann ca 3 Bildzeilendauern.

Vielleicht hilft das ja, Micha.

von Berndt E. (Gast)


Lesenswert?

Danke schon mal für die Antworten. So ähnlich habe ich mir das schon 
gedacht.

@Micha: Das mit den Puffern und dem Interpolieren bekomme ich schon hin. 
Der Hinweis mit den Raumfrequenzen ist sehr gut, habe schon was 
gefunden.

Eine Frage: Was genau meinst Du mit Faltung?

Den Bayerfilter?

von Robert K. (Firma: Projektleiter Medizinsoftware) (robident)


Lesenswert?

Berndt E. schrieb:
> Eine Frage: Was genau meinst Du mit Faltung?

Mit Faltung ist allgemein die Berechung der Eingangsdaten mit dem Filter 
gemeint. Man könnte auch Vektorverknüpfung sagen.

von Michael W. (Gast)


Lesenswert?

Wie würde denn ein Kantenschärfer aussehen? Bei der Differenzbildung

Berndt E. schrieb:
> @Micha: Das mit den Puffern und dem Interpolieren bekomme ich schon hin.
> Der Hinweis mit den Raumfrequenzen ist sehr gut, habe schon was
> gefunden.

Mit welchen Auflösungen arbeitest Du im FPGA? Reicht der interne 
Speicher?

von Donald Durchblick (Gast)


Lesenswert?

Berndt E. schrieb:
> Den Bayerfilter?

Damit ist die RGB-Farbmatrix auf dem Sensor gemeint mittels derer aus 
dem Grauwertbild ein Farbbild ermittelt wird:

http://de.wikipedia.org/wiki/Bayer-Sensor

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Für die Bayerkonversion ist das bechriebene Glättungsfilter zu wenig. 
Man benötigt zumindest anscliessend eine Kantenschärfung. Intelligentere 
Algorithmen nutzen dazu bereits das Primärbild.

von HTI (Gast)


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #3307061:
> Man benötigt zumindest anscliessend eine Kantenschärfung. Intelligentere
> Algorithmen nutzen dazu bereits das Primärbild.
Beispiel?

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.