Forum: FPGA, VHDL & Co. Rechtecke in BMP-Datei in VHDL erkennen und bearbeiten


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Rayvin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Guten Tag beisammen!
Mein Ziel ist es mit VHDL eine BMP-datei einzulesen, und dann dasselbe 
Bild mit einigen Farbveränderungen und Formveränderungen auszugeben.
Um genau zu sein soll Blau in Rot umgewandelt werden und alle 
(vollständigen) Rechtecke sollen mit Kreuzen versehen werden.

Als kompletter Neuling in dem Gebiet war ich erst komplett überfordert, 
doch nachdem ich mich nun mit dem BMP format auseinander gesetzt habe, 
fand ich das Farbproblem relativ einfach lösbar. zmd in der Theorie. 
Dabei hat mir vorallem diese Seite ungemein geholfen 
https://vhdlwhiz.com/read-bmp-file/


Jedoch bin ich mit der Rechteck-erkennung ansatzlos überfragt. Deswegen 
hoff ich hier vllt auf Tipps wie ich so ein Programm schreiben könnte, 
bzw Links zu einer hilfreichen Quelle.


ps. Dafür habe ich ein vorgegebenes Bild, das heißt die Werte wie Größe 
usw. sind mir bekannt, aber das Programm muss natürlich auch bei kleinen 
Veränderungen des Bildes (mehr Rechtecke oder blaue Bereiche) 
funktionieren.

von Bürovorsteher (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Da fehlen einige wenige Zwischenschritte.
Wenn du dein Problem vllt in einem Blockschaltbild darstellen könntest?
Als alter Sack bin ich mit so großen Gedankensprüngen maßlos 
überfordert.

von Samuel C. (neoexacun)


Bewertung
1 lesenswert
nicht lesenswert
Gibt es ein Beispielbild? Welche Eigenschaften haben die Rechtecke? 
Wieviele Rechtecke gibt es? Wie sind diese im Bild verteilt? Wie ist der 
Rest des Bildes strukturiert?

Soll das nachher synthetisierbar sein oder im Simulator laufen? Wie 
kommt das Bild rein? Wie soll es raus? Genug Speicher für Puffern 
vorhanden oder muss gestreamt werden?

: Bearbeitet durch User
von Tim (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Schreibe zuerst deinen Algorithmus in C. Danach würde ich über VHDL 
nachdenken.

von Proggi (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Wozu wird das in VHDL gemacht? Sicher, um es mal in Echtzeit laufen 
lassen zu können, nehme ich an. Mit "Read-BMP" wird man da aber nicht 
weit kommen. Wahrscheinlich wird wieder ein FPGA vergewaltigt indem man 
ihm einen SoftCore mit OS verpasst und dann ein Dateisystem 
reinbrutzelt, damit man von SD-Karte Bilder verunstalten kann.

Sicher eine Semesteraufgabe eines Fachgruppenbetreuers an einem 
Bätschel-Institut.

Es gibt keine seriöse Anwendung, wo "Blau in Rot umgewandelt werden" 
muss.

Das könnte man auch durch tauschen der Pins am VGA-Stecker erreichen.

von M. H. (bambel2)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde mir (zumindest vorerst) BMP in VHDL sparen und mittles ffmpeg 
o.ä. die Bilder in RAW Format RGB888 oder ähnliches konvertieren. Dann 
ist das Einlesen der Datei deutlich angenehmer. Ausgegen dann auch 
wieder als RGB RAW und zurückkonvertieren. Speicherplatz sollte für die 
2 Bilder ja auf dem Rechner reichen... Damit nimmst du schonmal den BMP 
Codec aus der Kette. BMP ist zwar einfach, aber auch nur unnötiger 
Aufwand.

Für die Rechteckerkennung gibt es dann verschiedene Ansätze. Man könnte 
das Bild erstmal in Grauwerte konvertieren und dann über einen 
Sobelfilter 2 dimensional eine Kantendetektion machen. Je nachdem wie 
gut die Rechtecke definiert sind, kann man dann die Rechtecke bspw. über 
Korellation suchen.

Sollten in dem Bild noch Verzerrungen sein, bspw, durch 3D Verkippung, 
wird das Ganze etwas schwieriger. Bei solchen Algos habe ich aber jetzt 
auch nicht wirklich viel Ahnung. Da können dir bestimmt andere 
weiterhelfen.

Das Vertauschen der Farben hat aber ansich nichts mit BMP zu tun, oder? 
Das BMP format ist ja nur das Testvehikel um Bilder in und aus der 
Simulation zu bekommen. Hoffe ich zumindest für dich...
In den Pixeldaten dann R mit B zu tauschen sollte man dann auch nach dem 
4. Bier noch hinbekommen

: Bearbeitet durch User
von Proggi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
M. H. schrieb:
> Für die Rechteckerkennung gibt es dann verschiedene Ansätze. Man könnte
> das Bild erstmal in Grauwerte konvertieren und dann über einen
> Sobelfilter 2 dimensional eine Kantendetektion machen.

da siehst du Kanten, wo keine sind. Das muss im kompletten Farbraum 
passieren

von M. H. (bambel2)


Bewertung
0 lesenswert
nicht lesenswert
Proggi schrieb:
> M. H. schrieb:
>> Für die Rechteckerkennung gibt es dann verschiedene Ansätze. Man könnte
>> das Bild erstmal in Grauwerte konvertieren und dann über einen
>> Sobelfilter 2 dimensional eine Kantendetektion machen.
>
> da siehst du Kanten, wo keine sind. Das muss im kompletten Farbraum
> passieren

Da hast du wohl recht. Wie gesagt, ich kenne mich zwar in einigen 
Gebieten sehr gut aus. Aber Bildverarbeitung gehört definitiv nicht 
dazu. Ich war schon froh, als ich für mein Ambi-light halbwegs die 
Farben aus HDMI-Datenstrom fischen konnte.

Dem TO würde ich allerdings empfehlen, die Alogrithmik erstmal am PC zu 
entwickeln. Das ist deutlich schmerzfreier, als direkt mit einer 
gepipelinten performanten Logik anzufangen.

in SW gibt es auch einige schöne frameworks, die einem da erstmal die 
Arbeit abnehmen. OpenCV wäre da das Stichwort. Wenn das ganze in SW tut, 
kann man dann die Algorithmik in Logik gießen.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.