Forum: PC-Programmierung Bildverarbeitung mit .NET


von Thomas (Gast)


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

von TestX .. (xaos)


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..

von Thomas (Gast)


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.

von Arc N. (arc)


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

von Zwie B. (zwieblum)


Lesenswert?

Nimm OpenCV, da kommt auch eine einfache GUI mit.

von Mars (Gast)


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.

von Sven H. (dsb_sven)


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.

von Thomas B. (escamoteur)


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

von Mario G. (mario)


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

von Johnny B. (johnnyb)


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. ;-)

von PI314 (Gast)


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.

von Gastino G. (gastino)


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.

von Thomas (Gast)


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...

von Mario G. (mario)


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

von Gastino G. (gastino)


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).

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.