Bildverarbeitung mit .NET

Gast #1765280
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
Gast #1765349
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.
#1765434
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.windows.media.imaging.bitmapimage.aspx
http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.aspx

> - 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.windows.media.imaging.bitmapmetadata.aspx

> - 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
Gast #1765772
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.
#1765856
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.
#1765960
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
Gast #1766984
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.
#1768177
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.
Gast #1771419
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...
#1772413
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

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