Article on image processing and recognition in German "Technology Review" magazine

Written 2009-12-30 by Timo Dickscheid, tagged as industry, research

The German edition of the Technology Review magazine has published an article covering industrial applications and potential of image processing and recognition systems, with many comments from Joachim Denzler who leads the research group in Jena. It is a short but interesting insight for interested non-specialists, focussing on the German market. Read article

Debugging and profiling C++ under Linux

Written 2009-12-07 by Timo Dickscheid, tagged as programming

Debugging and Profiling C++-Code with the standard GNU tools under Linux may not be as intuitive too many people as it is with bigger IDE's like Visual Studio, XCode or Eclipse. Although I still think that using the GNU debugger gdb and profiler gprof on the command line is feasible, there are more userfriendly choices available:

Nemiver Screenshot
  • Nemiver is a stand-alone graphical debugger for Gnome that can use gdb as a backend. I found it intuitive, well-designed and stable. I features easy browsing of sourcecode, setting breakpoints, and especially save and resume for sessions.
  • cgdb is a curses frontend to gdb, that is, a graphical user interface on the command line. It is also intuitive, although tuned for vim-experienced users.
  • A comfortable way of profiling your code is to use the KDE call-graph viewer kcachegrind with the callgrind tool of the valgrind suite. Other than using gprof, it does not require compiling your code with special flags. It requires no more than two steps: (1) Calling your binary within the valgrind framework: valgrind --tool=callgrind [program] [arguments]. (2) Running kcachegrind on the output file kcachegrind callgrind.out.[pid]

Note that what you get with callgrind is not an exact analysis of the time your program consumed in every function and line, but rather an analysis of the cache accesses and processor instructions. This is of similar importance for many profiling purposes, but one should be aware of the differences, and read the manuals carefully for more exact usage of profilers.

On ubuntu, you get the whole setup via aptitude install valgrind-callgrind kcachegrind nemiver cgdb.

Aicon 3D introduces MoveInspect technology

Written 2009-12-04 by Timo Dickscheid, tagged as industry, research

Aicon 3D systems introduces MoveInspect, a modular and flexible photogrammetry-based 3D coordinate measurement system for 3D inspection. Just before the introduction, our students Miriam and Birgit investigated the reliability and accuracy of such systems in a joint work with aicon. The work was part of their diploma thesis, which I supervised.

A good resource for learning about espresso coffee

Written 2009-12-03 by Timo Dickscheid, tagged as coffee, web

I recently discovered home-barista.com, a website full of information on coffee machines, coffee history, coffee making and - last but not least - coffee beans. It is a good resource if you want to find out why coffee at home is not as good as in your favourite cafe. I recommend reading through the Home Barista's Guide to Espresso if you're starting to make good espresso at home - it starts right by explaining where the word "espresso coffee" comes from.

British Machine Vision Conference available on Video

Written 2009-12-02 by Timo Dickscheid, tagged as publications, research
BMVC Talk

My oral presentation about the "Completeness of Coding with Image Features" at the British Machine Vision Conference 2009 in London has been recorded on video. It is now available at videolectures.net. If you're interested in the work, read the full paper.

I highly recommend listening to Alyosha Efros's invited talk, "What can the world tell us about an image?", and Andrew Fitzgibbon's motivating two-hour Tutorial on continuous optimization, covering parts of Triggs' excellent survey of bundle adjustment techniques.

What if your STL containers get too large?

Written 2009-11-14 by Timo Dickscheid, tagged as programming

I recently encountered a problem with a std::vector of objects needing more memory than available on the system. This occurs easily when using the standard allocation procedure, which re-allocates the vector to double size once it needs more memory, and hence suddenly needs triple the amount of memory. On a 32 bit system the limit is at 2GB, so a 600+MB vector is probably too big already.

What is the solution to this problem? First of all, you should pre-allocate the vector and check max_size(), and also catch the allocation exception that vector throws. You may also consider using more memory-efficient datatypes for your problem: Have a look at the boost flyweight library, if you have many items taking on the same values, for example. Second, rethink your algorithm - that's what I did. In most cases there is no need to hold such massive data in memory.

However you might end up searching for a way to stream objects to disk seamlessly "in the background" while still using the familiar STL-like syntax. In such a case have a look at the STXXL library (the "Standard Template Library for Extra Large Data Sets") - it's just that.

Matlab Code for SFOP Scale Invariant Junction features

Written 2009-09-27 by Timo Dickscheid, tagged as research, software

We have set up a website for the SFOP keypoint detector that we presented on ICCV in Kyoto this year. The website includes a very slow implementation of the original algorithm. We are now working on a fast parallel implementation on the GPU.

You find the paper describing the detector here.

Creating high-quality graphics in LaTeX

Written 2009-08-22 by Timo Dickscheid, tagged as latex, programming
Hellinger Distance

TikZ

Almost every LaTeX user loves and hates the good old xfig vector graphics editor. I sticked quite long to it, but converted to the incredibly powerful TikZ package of Till Tantau from Lübeck. It enables you to create high-quality vector graphics, node-based diagrams and much more directly from your LaTeX document. You should check the immense amount of examples in the Manual. Great German tutorials for TikZ can be found on www.statistiker-wg.de.

Sketch 3D

If you want to create high-quality sketches in 3D, and not use google's SketchUp for whatever reason, you should have a look Sketch 3D and the very good tutorials on fauskes.net. The idea of Sketch 3D is simple:

  • You describe a simple 3D scene sketch in a separate textfile
  • Sketch creates a plain LaTeX file by applying an orthographic projection of the 3D sketch, which is defined by camera viewpoint and orientation.
  • The LaTeX file is then included directly in your document.

Highlights of the package are the "sweep"-commands, which repeat a 3D drawing under a spatial motion and connect the resulting objects into a closed solid, and the "fspecial" function allowing to insert pstricks or TikZ commands at projections of 3D positions, taking proper care of the z-Buffer. This allows for example to insert LaTeX formulas right into your figures in proper size and rendering without using good old pstricks.

Tikz example

For a first impression have a look at this slide from my talk at ICVS'09 in Liege, Belgium, where I modelled a camera at different 3D positions, projecting a 3D object. Such an image would be immense work in xfig, not to mention what happens if you want to change the viewpoint later on.

Include files missing with gcc 4.4

Written 2009-03-21 by Timo Dickscheid, tagged as programming

Switching from gcc 4.3 to 4.3 brought lots of missing include files for standard c functions. Martin Michlmayr has a good list of the necessary #include's here.