Projekt Bildverarbeitung

Inhalt:

Diese Seite ist entstanden für die Teilnehmer unseres Bilverarbeitungs-Projektes, das als regelmäßige KOGS-Lehrveranstaltung Mittwoch nachmittags stattfindet.

C++ Literatur / Dokumentation

Die Links, die ich am häufigsten zum Nachschlagen verwende, sind:

Außerdem verwende ich ggf. Ullis Software Engineering Hotlist, eine umfangreiche, aber knapp kommentierte Linkliste. Um Eure Java-Vorkenntnisse zu nutzen, wäre es hilfreich, wenn ich mehr Seiten wie Cay Horstmann's C++ vs. Java-Seite finden würde (gerade den Pointer-Teil finde ich nicht 100%ig zustimmungswürdig, und er behandelt nicht die auch in C++ vorkommenden Referenzen). Es gibt sogar ein Addison-Wesley Buch 'C++ For Java Programmers', dessen Inhaltsangabe vielversprechend scheint. Auch Ross Paterson's 'Object Oriented Programming in C++' Slides könnten hilfreich sein.

Ich selber kenne nur wenig C++ Bücher, daher erstmal nur zwei Tips:

  1. Es gibt das Buch 'Thinking in C++' von Bruce Eckel kostenlos zum Download im Netz (hier ist auch eine längere Erklärung zu finden, warum sich das für den Autor/Verlag lohnt - auf jeden Fall kann das Buch nicht so schlecht sein, sonst würde es sich ja nicht mehr verkaufen lassen).
  2. Jan hat auch das Buch 'Intensivkurs C++' von Andrew König empfohlen (buch.de, Amazon).

Weitere Tipps

Ich kann einige gute Links zum Thema API-Design empfehlen; das ist ein sehr wichtiges Thema! Meiner Meinung nach sollte man immer so programmieren, als ob man eine API für jemanden anders schreibt, d.h. z.B. folgende Punkte zu beachten:

Ein sehr guter Artikel zum Thema API-Design orientiert sich an der von mir sehr geschätzten Qt-Bibliothek, ist aber für jeden verständlich zu lesen, auch wenn man noch nie von Qt gehört hat: Designing Qt-Style C++ APIs.

Software

Auf der Homepage von Ullrich Köthe findet Ihr die VIGRA zum Download, bzw. die VIGRA Dokumentation.

Für Windows soll Dev-C++ eine gute (und kostenlose) IDE sein; auf der Download-Seite findet Ihr jeweils eine Version mit und eine ohne den GNU Compiler. Außerdem ist Microsoft sehr daran interessiert, daß Ihr Euch an deren Produkte gewöhnt (und später viel Geld dafür bezahlt), daher bekommt Ihr im Rahmen des MSDN Academic Alliance Programms in Haus D gegen Vorlage Eures Studi-Ausweises auch aktuelle Versionen des MS Developer Studio.

KOGS - Module Konzept

Wie schon erwähnt, muß man sich, wenn man einen Account bei KOGS bekommt, zuerst daran gewöhnen, daß man Software in der Regel nur über die module-Umgebung erreichen kann.

Caution!

Wenn man die entsprechenden (Software-)Module nicht lädt, hat man die meiste Software entweder gar nicht, oder nur in älterer (bis uralter!) Version zur Verfügung. Gerade in letzterem Fall fällt einem als Neuling nicht so schnell auf, daß man ein Modul laden sollte.

Die wichtigsten Befehle sind:

module avail
zeigt die verfügbaren Module an
module add foo [bar baz ...]
lädt das Modul foo (ggf. auch bar und baz im gleichen Durchlauf) (analog module remove foo)
module help foo
zeigt Informationen zum Modul foo an
module list
zeigt die Liste der geladenen (aktiven) Module

Meine Standard-Umgebung unter Solaris enthält 77 Module, sowas schreibt man sich aber dann natürlich dann in die .bashrc bzw. .login (s.u.). Am wichtigsten ist sicherlich "module add vigra", aber unter Solaris finde ich auch ein module add gnu-utils bzip2 gcc unausweichlich.

Die offizielle Methode, um sich Module per Default zu laden (wenn man die voreingestellte tcsh verwendet), ist in etwa so ein ~/.login:

if ( ! $?DOT_LOGIN_READ ) then
  setenv DOT_LOGIN_READ 1
  module add ...
  ...
endif

und im ~/.cshrc sollte es einen solchen Block geben:

if ( ! $?DOT_LOGIN_READ ) then
  source $HOME/.login
endif

Übersetzen mit der VIGRA

Nach dem module add vigra (s.o.) steht einem das Kommando vigra-config zur Verfügung. Mit vigra-config --cppflags --impex-lib werden die nötigen Flags für den Compiler/Preprocessor und den Linker ausgegeben, sodaß z.B. die Beispiel-Programme der VIGRA mit Kommandos wie

g++ `vigra-config --cppflags --impex-lib` invert.cxx -o invert

übersetzt werden können. Ohne die zusätzlichen Parameter würde der Compiler die VIGRA-Headerdateien bzw. die Laufzeitbibliothek (libvigraimpex, wg. imp-ort/ex-port) nicht finden.

Datei: Makefile( Bytes; Thu, 01. Jan. 1970) 'Makefile' lokal speichern

Anbei findet Ihr ein Beispiel-Makefile, das Ihr an Eure persönlichen Bedürfnisse anpassen könnt.

Wenn Ihr die VIGRA auf Eurem persönlichen Rechner installiert, ist es also wichtig, daß vigra-config im Pfad ist. Außerdem muß ggf. die libvigraimpex im Library-Path sein, damit man anschließend die Programme starten kann:

export PATH=<VIGRA-Prefix>/bin:$PATH
export LD_LIBRARY_PATH=<VIGRA-Prefix>/lib:$LD_LIBRARY_PATH

Hierbei bezeichnet "VIGRA-Prefix" den Pfad, in den man die VIGRA installiert hat (mit make install). Dieses ist standardmäßig das Verzeichnis, in dem auch die Quellen liegen, man kann es aber ggf. bei configure angeben:

./configure --prefix=/usr/local

(/usr/local/ ist z.B. ein nur vom Superuser beschreibbarer Standardpfad unter Linux für selbstkompilierte Programme, der oft schon in PATH und LD_LIBRARY_PATH enthalten ist.)

Kompilieren in (X)Emacs

Folgende Zeilen in der ~/.emacs sind sehr praktisch, damit man mit [F9] einen Kompilationsvorgang anstossen kann, aber vor allem, damit man mit [F10] zu den Codestellen springen kann, die der Kompiler anmeckert:

; den Kompilationsvorgang nicht riesig gross darstellen:
(set-variable 'compilation-window-height 9)
; TERM=dumb setzen, damit GCC keinen farbigen Output erzeugt:
; (verwirrt nur / macht alles unlesbar, Emacs macht selber farbig)
(set-variable 'compile-command "TERM=dumb make -k")
; nicht jedesmal nachfragen:
(set-variable 'compilation-read-command nil)
; Tastenbelegungen:
(global-set-key '[f9] 'compile)
(global-set-key '[f10] 'next-error)

VIGRA selbst aus dem CVS holen

Mit module add vigra bekommt Ihr die Pfade passend gesetzt für eine von uns übersetzte VIGRA Version aus dem CVS. Wenn Ihr die VIGRA selber übersetzen wollt, um sie auf Eurem Rechner zu installieren, könnt Ihr die neueste Version von der VIGRA-Homepage herunterladen.

Wenn Ihr die tagesaktuelle Version aus dem CVS haben wollt, könnt Ihr sie Euch wie folgt besorgen:

# wegen des Module-Systems ist cvs normalerweise nicht im Pfad:
export CVS_SERVER="/software/cvs-1.11.14/SunOS-5.8/bin/cvs"
# cvs soll den ":ext:"-Zugriff nicht mit rsh, sondern mit ssh versuchen:
export CVS_RSH=ssh
cvs -d :ext:user@kogs1.informatik.uni-hamburg.de:/home/koethe/CVS co vigra/current

Die Python-Bindings sind noch nicht offiziell released worden; diese müßt Ihr Euch also aus dem CVS holen:

cvs -d :ext:user@kogs1.informatik.uni-hamburg.de:/home/koethe/CVS co vigra/interactive2

Ich habe ein kurzes Tutorial (auf Englisch) angefangen, in dem ein paar Basis-Befehle erläutert werden.

Header-Files

Hier will ich einige Headerdateien zur Verfügung stellen, die für Euch von Interesse sein könnten; zuallererst will ich quaternion.hxx anbieten, eine Quaternionen-Template-Klasse. Die ist noch ziemlich frisch und ich arbeite daran, also nehme ich gerne Kommentare/Verbesserungsvorschläge entgegen.

VigraCaster

Ihr könnt den VigraCaster wie folgt "aus dem CVS auschecken":

cvs -d /home/koethe/CVS co volrend/VigraCaster

Für den VigraCaster braucht Ihr außer der VIGRA auch VigraQt; beides findet Ihr bei KOGS als Module:

module add vigra vigraqt pkgconfig

Anschließend könnt Ihr das Programm wie folgt kompilieren und starten (UNIX):

cd volrend/VigraCaster/
qmake
make && ./qtgui

Wenn Ihr Eure ausgecheckte Version aktualisieren wollt, könnt Ihr dazu "cvs update" verwenden, Kurzform:

cd volrend/VigraCaster/
cvs up

Es ist auch möglich, von einem externen Rechner transparent über SSH auf das CVS zuzugreifen:

export CVS_SERVER="/software/cvs-1.11.14/SunOS-5.8/bin/cvs"
cvs -d :ext:user@kogs1.informatik.uni-hamburg.de:/home/koethe/CVS co volrend/VigraCaster

Ich habe weitere Seiten mit einer Beschreibung der Koordinatensysteme und mit einer TODO-Liste für den VigraCaster online gestellt (beides in englisch).


Valid XHTML 1.0! Valid CSS!
Letzte Änderung an dieser Seite: Donnerstag, 30. August 2007 hacker emblem