f.r.e.e. - Flexible Registration and Evaluation Engine


F.r.e.e. is an open-source software toolkit that allows the composition, evaluation and optimization of (registration) algorithms. Registration is the task of aligning or developing correspondences between data. For example, in the medical environment, a CT scan may be aligned with a MRI scan in order to combine the information contained in both. Registration is, together with segmentation, a fundamental processing step in many clinical image processing applications. F.r.e.e. should help to accelerate the development of clinical solutions. Also it should help to improve the quality of the solutions by allowing the evaluation and comparison of registration approaches with arbitrarily test case sets.

F.r.e.e. is implemented in C++. F.r.e.e. is designed to be cross-platform, using the CMake build environment to manage the compilation process. F.r.e.e.'s C++ implementation style is referred to as generic programming (i.e. using templated code).

Because f.r.e.e. is an open-source project, developers from around the world can use, debug, maintain, and extend the software. They are explicitly invited to incorporate their experience into this project.

F.r.e.e. extensively uses the Insight Toolkit (itk) for basic image processing/registration tasks, IO and several useful implementations (e.g. smart pointer, threading class).

What are f.r.e.e.'s origins?

The idea of f.r.e.e. originates from a master thesis by Ralf Floca done at the University of Heidelberg (Germany) in 2003. The project in its current design was started in the scope of the PhD thesis of Ralf Floca in 2004. The topic of the PhD thesis is ?Development and evaluation of registration approaches for clinical applications?. F.r.e.e. is developed at the department of Medical Informatics of the University of Heidelberg (Germany). The original motivations for this work were, amongst others, the sound separation of approaches and data, thereby the establishment of an evaluation framework that helps to find the most suitable registration algorithm for specific problems. An additional motivation was to establish a system that is implemented in C++ but remains dynamic at runtime and allows the composition of registration approaches like Lego bricks. The system should also have the potential to define the ontology of components and therefore should be able to offer assistance in compiling sensible approaches, unlike a pure scripting language. More information about design considerations and main concepts can be found in the documentation.

Who are the developers?

The design was done and the development of the framework is done by Ralf Floca. However, hopefully many developers beyond the mentioned one will participate in the future development of f.r.e.e. as the code grows and becomes publicly accessible.

How do I participate?

As f.r.e.e. is an open-source system, you can participate. It is planned to establish a communication platform (mailinglist, wiki, bugtracker) for everyone interested. Meanwhile you can contact the developers, if you have questions, proposals or additions for f.r.e.e.

Further it would be very nice and would support the doctoral thesis (within its scope f.r.e.e. was developed), if you could just email a short note to Ralf Floca or participate in a small survey that can soon be found on the project homepage. It would be of great interest with regard to the finalization of the thesis to know whether and how often f.r.e.e. is used.

What are the terms of use?

F.r.e.e. carries a copyright by Ralf Floca (Department of Medical Informatics, Institute for Medical Biometry and Informatics, University of Heidelberg, Germany). It is published under the GNU public license.


The following sections summarize the technical features of f.r.e.e..

Design Philosophy

For design considerations and features of f.r.e.e. please visit the according sections in the documentation.


For the main concepts of f.r.e.e.?s architecture please visit the according sections in the documentation or see publications[LINKS].

Implementation Philosophy

The following are key features of the project implementation philosophy.

  • The toolkit is implemented using generic programming principles. Such heavily templated C++ code challenges many compilers; hence development was carried out with the latest versions of the MSVC, Sun, gcc, Intel, and SGI compilers.
  • The toolkit is designed to be cross-platform (Unix, Windows and MacOSX).
  • The memory model depends on "smart pointers" that maintain a reference count to objects. Smart pointers can be allocated on the stack, and when scope is exited, the smart pointers disappear and decrement their reference count to the object that they refer to.

In large parts f.r.e.e. adopts the implementation and coding philosophy of itk. Therefore and for the fact that f.r.e.e. heavily incorporates itk, it is recommended to get to know the itk design philosophy.

Build Environment>

F.r.e.e. uses the CMake (cross-platform make) build environment. CMake is an operating system and compiler independent build process that produces native build files appropriate to the OS and compiler that it is run with. On Unix, CMake produces makefiles and on Windows, CMake generates projects and workspaces.

Background References

C++ Patterns and Generics

F.r.e.e. uses many advanced design patterns and generic programming. You may find these references useful in understanding the design and syntax.

  • Design Patterns. by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Grady Booch
  • Generic Programming and the Stl : Using and Extending the C++ Standard Template Library (Addison-Wesley Professional Computing Series) by Matthew H. Austern
  • Advanced C++ Programming Styles and Idioms by James O. Coplien
  • C/C++ Users Journal
  • C++ Report


Thanks go to:

  • Margarethe Paul for constantly working through my words in order to get them straight and thereby ensuring that the world has a better chance to understand me. And for not becoming desperate even though there is a lot of documentation left to do right now.
  • My colleagues at the department (especially Markus Erbacher, Florian Hartge) for all discussions and ideas with which they contributed to the development.
  • My colleague Roland Metzner for constantly providing the clinical data, background and ?grounding? for my work.
  • My doctoral thesis supervisor Prof. Dr. Hartmut Dickhaus for making this project and my work possible.
  • Everyone who realized and developed itk. Without their efforts, my work surely wouldn?t have been possible the way it is now.
  • Ingo Berg for developing muParser that is used for expression parsing in the setup optimization concept.
  • The developers of FLTK for providing me with a GUI framework for the tools of f.r.e.e.
  • Everyone who made this work possible and whom I have shamefully forgotten.




:: last update 07/14/2008 :: (c) 2007 by Ralf o Floca