www.mikrocontroller.net

Forum: PC-Programmierung Bildverarbeitung mit .NET


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich habe bereits einen Prototypen in MATLAB geschrieben.
Jetzt würde ich diesen gerne in eine eigenständige Anwendung für den 
Endbenutzer überführen.
Als jemand der von GUI- / Windows-Programmierung keine Ahnung hat denke 
ich, dass ich das mit VisualStudio 2010 Express in C# am schnellsten 
hinbekomme.

Benötigt werden folgende Schritte:
- JPEG öffnen
- Histogramm erstellen
- Tonwertkorrektur
- Schwarz / Weiß Umwandlung
- Zugriff auf jedes Pixel in Matrixform
- Rechenoperationen auf Matrix oder Bereiche der Matrix
- Schneiden
- Exif / IPTC Daten bearbeiten
- JPEG speichern

Welche Bibliothek nimmt man da?
Am liebsten währe es mir, wenn die sich möglichst Matlab-ähnlich 
bedienen lässt.
Gibt es Tutorials / Beispiele?

Gruß,
Thomas

Autor: Andi ... (xaos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die frage ist was du mit der softwrae machen willst... verkaufen etc...
wenns nur mehr oder weniger nen einzelexemplar ist generier einfach aus 
dem matlab code ne .exe und gut..

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Tip.
Die Matlab-Funktion nimmt z.Zt. das bereits geladene Bild und ein paar 
Parameter entgegen.
Ich könnte die Funktion so anpassen, dass sie die JPEG-Datei direkt 
entgegen nimmt.
Würde sich die exe Datei dann genauso aus der Konsole aufrufen lassen 
wie die M-Function in Matlab?

Es soll zwar nicht verkauft werden, allerdings schon auf mehreren PCs 
betrieben werden.
Matlab ist auch nicht auf allen PCs verfügbar, ist das ein Problem?

Auf jeden Fall würde ich noch eine hübsche GUI drumherum basteln wollen.
Aber wenn ich Bilverarbeitungsalgorithmus trotzdem in Matlab 
implementieren kann währe das schon hilfreich.

Trotzdem würde mich auch noch die reine .NET Lösung interessieren.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Hallo Zusammen,
>
> ich habe bereits einen Prototypen in MATLAB geschrieben.
> Jetzt würde ich diesen gerne in eine eigenständige Anwendung für den
> Endbenutzer überführen.
> Als jemand der von GUI- / Windows-Programmierung keine Ahnung hat denke
> ich, dass ich das mit VisualStudio 2010 Express in C# am schnellsten
> hinbekomme.
>
> Benötigt werden folgende Schritte:
> - JPEG öffnen

Hängt davon ob ob WPF/Silverlight oder WinForms benutzt werden soll
http://msdn.microsoft.com/en-us/library/ms653387.aspx
http://msdn.microsoft.com/en-us/library/system.win...
http://msdn.microsoft.com/en-us/library/system.dra...

> - Histogramm erstellen
> - Tonwertkorrektur
> - Schwarz / Weiß Umwandlung
> - Zugriff auf jedes Pixel in Matrixform
> - Rechenoperationen auf Matrix oder Bereiche der Matrix
> - Schneiden
> - Exif / IPTC Daten bearbeiten

http://msdn.microsoft.com/en-us/library/system.win...

> - JPEG speichern

s.o.

>
> Welche Bibliothek nimmt man da?

Keine

> Am liebsten währe es mir, wenn die sich möglichst Matlab-ähnlich
> bedienen lässt.
> Gibt es Tutorials / Beispiele?
>
> Gruß,
> Thomas

Autor: Zwie Blum (zwieblum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm OpenCV, da kommt auch eine einfache GUI mit.

Autor: Mars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die System.Drawing.Bitmap Klasse ist leider sehr langsam, wenn du Pixel 
für Pixel verarbeiten willst. Verwende die ColorMatrix Klasse um das 
Bild schnell zu transformieren. Falls du damit nicht auskommst, ist es 
u.U. schneller das Bild in ein eigenes Array zu packen.

Autor: Sven H. (dsb_sven)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Such mal bei Google nach "unsafe Bitmap". Damit haben wir, als wir 
Bildverarbeitung an der Uni gemacht haben, das Bild in ein 
2-dimensionales Array umgerechnet, was zur Folge hat, dass sämtliche 
nachfolgenden Dinge, die du mit dem Bild machen willst, erheblich 
schneller von statten gehen.

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternativ ist es eine Überlegung die Bildverarbeitung in C++ .net zu 
machen, die Funktionen davon kannst Du direkt von Deiner C# GUI 
aufrufen.

gruß
Tom

Autor: Mario Grafe (mario)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du C/C++ programmieren kannst dann kannst du auch Visual Studio C++ 
benutzen. Als Tool zum basteln Oberflächen empfiehlt sich FLTK (das 
nehme ich immer).
Siehe hier:
http://www.fltk.org/
http://seriss.com/people/erco/fltk-videos/
(sehr gutes Video-Tutorial, einfach anschauen)

Das ist super einfach zu bedienen (Es gibt einen Konfigurator [FLUID] 
der eine C und H-Datei ausspruckt welche man einbindet, nur die 
Callbacks schreibt man selbst). Man kann es in 10 min lernen.

Für das Bilder öffnen und bearbeiten benutze ich die Freeimage Library 
(mit C++-Wrapper).
Siehe hier:
http://freeimage.sourceforge.net/download.html

Damit hast du alle Freiheiten, er frisst so gut wie jedes Format (auch 
EXIF Daten).

Ich komme aus der µC-Programmierungsecke und benutze beides häufig. Es 
klappt wunderbar.

Gruß
Mario

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Burkhart schrieb:
> Alternativ ist es eine Überlegung die Bildverarbeitung in C++ .net zu
> machen, die Funktionen davon kannst Du direkt von Deiner C# GUI
> aufrufen.

Dann aber ein Projekt mit unmanaged C++, sonst kommts aufs selbe raus 
wie wenn man es mit C# macht. ;-)

Autor: PI314 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arc Net schrieb:
>> - Exif / IPTC Daten bearbeiten
>
> http://msdn.microsoft.com/en-us/library/system.win...

Kommt darauf an, was Du unter "verarbeiten" verstehst. Einfach lesen - 
ja, ändern oder auch "richtig lesen" wird mit einer Bibliothek von der 
Stange eher schwierig. Insb. in IPTC-Bereich herrscht dank Adobe (PS v. 
6-7-CS) ein echter Chaos. Sollten noch die ICC-Profile / Farbräume ins 
Spiel kommen, würde ich mich gleich auf C++ (oder eine andere 
"unmanaged"-Sprache) + eigene Implementierung einstellen. Die Auswahl 
der GUI-Bibliothek ist dann eher sekundär.

Autor: Gastino G. (gastino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Hallo Zusammen,
>
> ich habe bereits einen Prototypen in MATLAB geschrieben.
> Jetzt würde ich diesen gerne in eine eigenständige Anwendung für den
> Endbenutzer überführen.
> Als jemand der von GUI- / Windows-Programmierung keine Ahnung hat denke
> ich, dass ich das mit VisualStudio 2010 Express in C# am schnellsten
> hinbekomme.

Ich weiß nicht, ob C# da wirklich zielführend ist.

> Benötigt werden folgende Schritte:
> - JPEG öffnen
> - Histogramm erstellen
> - Tonwertkorrektur
> - Schwarz / Weiß Umwandlung
> - Zugriff auf jedes Pixel in Matrixform
> - Rechenoperationen auf Matrix oder Bereiche der Matrix
> - Schneiden
> - Exif / IPTC Daten bearbeiten
> - JPEG speichern

Schau Dir mal OpenCV an.

> Welche Bibliothek nimmt man da?
> Am liebsten währe es mir, wenn die sich möglichst Matlab-ähnlich
> bedienen lässt.
> Gibt es Tutorials / Beispiele?

OpenCV.

Beim Thema GUI würde ich an Deiner Stelle anfangs lieber etwas mehr Zeit 
investieren und nicht schnell irgendwas mit .NET zusammenfrickeln, auch 
wenn das einfach erscheint. Meine Empfehlung ist wxWidgets, mit dem man 
sehr schlank Plattformunabhängigkeit geschenkt bekommt oder auch QT.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow, danke für die vielen tollen Tipps.
Besonders OpenCV und FreeImage scheinen mir interessant.
Für letzteres gibt es sogar eine C# Anbindung.
Aber im Moment neige ich mehr zu OpenCV + Python + PyQt.

Also, ich habe erstmal einiges zu evaluieren...

Autor: Mario Grafe (mario)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Gastino G.:

wxWidgets ist nicht wirklich schlank. Schau dir mal FLTK 
an...platformunabhängig und extrem schlank. guck dir mal das 
video-tutorial (link oben), ich kanns nur jedem empfehlen der einfach in 
GUI-Programmierung einsteigen möchte...

gruß
Mario

Autor: Gastino G. (gastino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mario Grafe schrieb:
> wxWidgets ist nicht wirklich schlank.

Doch. Viel schlanker geht es kaum, wenn es plattformunabhängig sein 
soll. Es ist nämlich nur eine Art Wrapper und nutzt die nativen 
Umgebungen der jeweiligen Betriebssysteme. So wird zum Beispiel unter 
Windows eine normale Windows-Oberfläche draus (Win32) und unter Linux 
nutzt wxWidgets GTK. Das ist der riesige Vorteil von wxWidgets!

FLTK bringt hingegen wieder seine eigenen Oberflächenelemente mit und 
die Programme sehen wie Fremdkörper aus (und die Widgets sind in ihrem 
Funktionsumfang wahrscheinlich auch kaum mit den betriebssystemeigenen 
Bibliotheken zu vergleichen).
Bei wxWidgets siehst Du keinen Unterschied zu den mit originären Mitteln 
programmierten GUIs (wenn man nicht gerade Spezialsachen wie zum 
Beispiel wxAui benutzt).

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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