Software for Multiscale Image Segmention using Edgeflow-based Anisotropic diffusion.

DOWNLOAD:
- ImageMagick software (needed for image format support).
- Binary segmentation software (Version 1.1 - released on October 25, 2005).
- Source code for segmentation software (for Version 1.0)
(parts of the software, e.g. FFT, Poisson solver, etc are not available since I don't have access to these source code either. I use Intel MKL or IMSL libraries for these).

INSTALLATION:
- Install ImageMagick executable (if Imagemagick is not installed in your system yet).
- Unzip the binary distribution to a directory of your choice.

DOCUMENTATION:
See this Technical Report for most implementation details.

USAGE:
main.exe <image_name> <normalize> <initial_scale> <scale_jump> <end_scale> <angle_limit> <ratio_limit> <smoothing_weighting> <stopping_error> <accuracy> <post-process> <post-processing_stopping_error>

EXPLANATION OF ARGUMENTS

image_name:
(string) Name of the image. Most image formats are supported through ImageMagick.

normalize:
(integer, 0 or 1)This is a boolean argument (set to either 1 or 0). If set to 1, edges are enhanced and low contrast boundaries are also detected. For example, if there is a lighting change
over an object, at parts of the object, the edges may be lower contrast. With normalization set to 1, all edges would be more or less equally well detected. (This is a new feature that is
not described in the technical report. I haven't written its details down. If set to 0, it will behave similar to how it is described in the technical report.) In general, when
normalization is set to 1, more boundaries are detected.

initial scale:
(float) Starting scale to analyse the edges in the image. Units are in terms of (length_of_image_diagonal/1000) pixels. A good suggestion would be between 3 to 8.

scale_jump:
(float) jumps in scale when scanning multiple scales. Good suggestions are between 1 to 3.

end_scale:
(float) End scale to analyze edges. Image will be analyzed between initial_scale to end_scale with increments of scale_jump. Running time is proportional to the number of scales the image
is analyzed.

angle_limit:
(float) In degrees. This specifies the threshold a vector direction is allowed to change from one scale to the next. See the technical report for more details. Good suggestions are between
60 to 150. 90 is a safe choice. The larger this value, the larger scales may be favored slightly more.

ratio_limit:
(float) This is the threshold (in terms of multiples) for the magnitude change of the vectors from one scale to the next. Good choices are between 10 to 30. The larger this value,
potentially the smaller scales are favored more. See the technical report for more details.


smoothing_weighting:
(float) This specifies the weighting of the mean curvature flow (boundary smoothing). Good suggestions are 1 to 4. The larger this value, edges are smoothed more and potentially less number
of regions are detected. Corresponds to 1/gamma in the technical report.

stopping_error:
(float) This is a stopping criteria. Specified how much average change after 200 iterations is small enough. Good choices are between 0.1 to 1.0. 0.2 or 0.3 are safe choices. Increase this to speed up segmentation process. The larger this value, the sooner diffusion will stop.

accuracy:
(integer, 1, 2, 3, or 5) Specifies the gradient estimation accuracy in level set methods. First, second, third or fifth order accurate Essentially Non-Oscilatory (ENO) schemes are used.
Allowed selections are 1, 2, 3, 5. The higher the accuracy the slower diffusion becomes. 2 is a safe choice.

post-process:
(integer, 0 or 1)This is a boolean argument (set to either 1 or 0). If set to 1, diffusion result is post-processed for more cleaning (e.g. it will have a similar effect of region merging). To clean up the diffused image Perona-Malik flow with a very small K (set to 1) is used. I suggest enabling post-processing to obtain a cleaner segmentation result. In general, when post-processing is set to 1, less boundaries are detected.

post-processing stopping_error:
(float) This is a stopping criteria for post processing. This is only effective if post-processing is set to 1. Specifies how much average change after 200 iterations is small enough. Good choices are between 0.1 to 1.0. 0.2 is a safe choice. The larger this value, the sooner diffusion will stop.