Symmetry Detection with the Gradient Product Transform: Source Code and Test Data Set
Here we provide additional material to the following publications:
- C. Dalitz, R. Pohle-Fröhlich, F. Schmitt, M. Jeltsch: The Gradient Product Transform for Symmetry Detection and Blood Vessel Extraction. International Conference on Computer Vision Theory and Applications (VISAPP), pp. 177-584 (2015)
- C. Dalitz, R. Pohle-Fröhlich, T. Bolten: Detection of Symmetry Points in Images. International Conference on Computer Vision Theory and Applications (VISAPP), pp. 577-585 (2013)
Please note that the results of both conference papers have been further developed and consolidated in the following later article, which has been published with a reference implementation:
- C. Dalitz, J. Wilberg, M. Jeltsch: The Gradient Product Transform: An Image Filter for Symmetry Detection. Image Processing On Line 9, pp. 413-431 (2019)
Rotational symmetry can be a useful feature for the identification both of natural objects, as well as man-made objects. Moreover, it can be used for medial axis extraction from greyscale images. This source code implements the Gradient Product Transform defined in the above IPOL paper. It assigns a symmetry score to each image pixel that is high for reflection symmetry center points and determines the point with the highest rotational symmetry score.
The test data set can be used for evaluating different rotational symmetry detection algorithms. It consists of 159 images of size 600×400, containing 27 different subjects. Each subject is shown in different perspectives and both in context and in detail.
To compile the C++ source code, you will need g++ and the external library OpenCV. See the file README in the source package for details and usage instructions. Here is a sample usage that writes the symmetry transform (scaled to greyscale) to "trace-symmetry.png" and prints the detected highest rotational symmetry to stdout:
symmetry -r 30 -trace image.png
Note that the maximum radius r must be provided as a command line argument. With a value of alpha=0.5 (default), the radius should be selected reasonably automatically even when the given radius is larger. If you are looking for small structures like blood vessels, you should however choose an appropriately small value for r.
- gptsymmetry-1.1.tgz (2019/10/29) implementing the further improved version from the IPOL paper
- symmetry-2.0.tgz (2015/03/16) implementing the improved version from the VISAPP'15 paper
- symmetry-1.0.tgz (2013/01/03) implementing the first version from the VISAPP'13 paper
Test data set with ground truth (63MB):
- symmetry-dataset.tgz (version 1.1 from 2013/05/03)
Authors and license
The source code is copyrighted by Christoph Dalitz and Regina Pohle-Fröhlich, Institute for Pattern Recognition, Niederrhein University of Applied Sciences, Krefeld, Germany. It may be used freely under the terms of the GNU General Public License. Please cite the IPOL paper listed at the top of this page as a reference when building upon this code.
The images in the data set are copyrighted by Tobias Bolten. Permission is granted to use them freely for research purposes and to include individual images into publicatons, provided you give reference to the VISAPP'13 paper listed at the top of this page.