MIN-Faculty
Department of Informatics
Scene analysis and visualization (SAV)

Homepage of the Master project Image Processing (Mi 14-18) summer 2015 part 1

Project aim

Despite the description in Stine, we will focus on the exciting research field of Manucript Cultures in this course. From an Image Processing point of view, there are a lot of possible interactions and algorithms, like: layout analysis, write detection/determination of ancient manuscripts of different cultures.

Project execution

The different topics of the projects will be presented in the first weeks. The students form groups of two and decide for a certain kind of application within the research/project aim. Afterwards, there will be an introduction into the C++ programming language for about 6 weeks. Concurrently we will learn efficient image processing in C++ using the VIGRA library as well as modern language features (like C++11). After the introduction phase, we will start with free (but supported) work on the topics chosen by each team.

Important Dates

Please note the following important dates, where you may need to prepare something for presentation to the audience.

  • 1. April: Welcoming the students, introduction into the project.
  • 22. April: The groups start preparation of the selected topics.
  • 6. Mai: Group-wise presentation of the selected topics.
  • 20. Mai: Start of the free work within the groups.
  • 8. Juli: Intermediate presentation at the end of the first part of the project.

Material

Introduction into Manuscript Cultures:

Selected articles for layout analysis and writer detection:

Introduction into C++, slightly revised German slides (according to U. Schroeder, RWTH Aachen):

  1. Part: Von Java zu C++
  2. Part: Datentypen, Pointer, Referenzen und 1D-Arrays
  3. Part: Funktionspointer, ADTs und nD-Arrays
  4. Part: Klassendefinitionen
  5. Part: Die STL
    Außerdem hilfreich: Dokumentation zu Boost 1.58.0
  6. Part: Introduction to Modern C++ (English slides of Olve Maudal)
    Weitere Literatur: Top 11 Features von C++11 (Heise Developer)

For Image Processing, we will use the generic VIGRA library. In the first weeks, we will go through the Tutorial following this scheme:

  1. Part: MultiDimensionalArrayTutorial, up to "One-dimensional Indexing and Scan-Order Iterator",
            and: Image Input/Output
  2. Part: MultiDimensionalArrayTutorial, from "Important MultiArray Methods"
  3. Part: Mathematics with Multi-Dimensional Arrays, up to "STL-style transformation algorithms"
  4. Part: Mathematics with Multi-Dimensional Arrays, from "Feature Accumulators"
  5. Part: Image Processing
  6. Part: Writing your own functions,
            and: VIGRA Python Bindings

You may download an intermediate version of the VIGRA SIGFT implementation here: SIFT-example.zip

The SIFT presentation of Linda Shapiro may be downloaded from here University's homepage!

Here is a piece of code for parabola fitting given 3 points P1=(x1,y1), P2=(x2,y2) and P3=(x3,y3). This codes estimated the parameters of the parabola y= A+x^2 + B*x + C and return the apex of the resulting parabola S=(xv,yv) afterwards.

inline void calcParabolaVertex(int x1, int y1, int x2, int y2, int x3, int y3, double& xv, double& yv)
{
	double denom = (x1 - x2) * (x1 - x3) * (x2 - x3);
	double A     = (x3 * (y2 - y1) + x2 * (y1 - y3) + x1 * (y3 - y2)) / denom;
	double B     = (x3*x3 * (y1 - y2) + x2*x2 * (y3 - y1) + x1*x1 * (y2 - y3)) / denom;
	double C     = (x2 * x3 * (x2 - x3) * y1 + x3 * x1 * (x3 - x1) * y2 + x1 * x2 * (x1 - x2) * y3) / denom;

	xv = -B / (2*A);
	yv = C - B*B / (4*A);
}

Software

We work with the language C++ and the VIGRA library. Both generally run under all big operating systems. We recommend the following development environments:

  • Under Windows:
    Use MS Visual Studio 2012 Ultimate (UHH Dreamspark) and install the dependencies like described on this page.
  • Under Linux:
    Follow the installation instructions at th VIGRA-Homepage
  • Under Mac OS X:
    Install the MacPorts package manager and than install the vigra Port by opening a terminal and typing:
    sudo port install vigra

To simplyfy the work with the C++ compiler, you may download a sample project containing a Makefile accordingly for the Pool-iMacs here. The exection of the "make" command generates a binary, which is linked against the VIGRA libary.

Things are getting easier, if you select a build system instead of the compiler and Makefiles. We recommend the use of CMake as such a system. CMake needs a project description in a certain format. Using this description it is able to generate Makefiles as well as Visual Studio, XCode, or other project files. Here, you find a sample project for the use with CMake. To generate a binary, this may be used as follows:

cd TUTORIAL_DIR
mkdir build
cd build
cmake ..
make

You may also let CMake generate XCode-Project files for you:

cd TUTORIAL_DIR
cmake -G Xcode .

CMake also provides a generator for MS Visual Studio project files. To generate a project file for 64 bit compilation of the tutorial, you may just type:

cd TUTORIAL_DIR
cmake -G "Visual Studio 11 2012 Win64" .

Distinguish between 32/64 bit: For 32 bit compilation, just omit the "Win64" suffix.

ATETENTION The System's PATH variable (%PATH%) has to contain the directory of the currently used binaries (32 or 64 bit DLLs) - CMake does not check for this. My recommendation: Just use 64 bit compilation for modern Windows versions on current processor architectures.

Here we provide you a sample MS Visual Studio 2012 project. You find more information on this example in the VIGRA under "Converter". The project file assumes, that you have base paths in your system set to:

C:\local\Win32
for 32 bit compilation and
C:\local\x64
for 64 bit compilation.

References:

  • Richard Szeliski (2010): Computer Vision: Algorithms and Applications (Homepage and eBook download)
  • Sonka, Hlaváč und Boyle (3. Auflage 2008): Image Processing, Analysis and Machine Vision, Thomson
  • D.A. Forsyth, J. Ponce: Computer Vision, A Modern Approach, Prentice-Hall 2003
  • R.C. Gonzalez, R.E. Woods: Digital Image Processing, Prentice-Hall 2001
  • B. Jähne (1997): Digitale Bildverarbeitung (4. Auflage), Springer-Verlag
  • R. Klette, A. Koschan, K. Schluns (1996): Computer Vision, Vieweg
  • R.M. Haralick, L.G. Shapiro (1993): Computer and Robot Vision, Vol. I & II, Addison-Wesley