|
IRIS-XT
What is IRIS-XT?
IRIS-XT is the component of the IRIS vision system which is responsible for basic image
processing tasks as well as 2D machine vision functions like line following and object
detection, IRIS-XT uses the classes defined by
IRIS Foundation and also defines some data structures of its own. IRIS-XT is the second
oldest component of the entire system and thus is reliable and easy to use.
Detailed documentation is not the aim of this section, which provides a general overview
of IRIS-XT's structure, so as to give the potential reuser a better inital understanding
of the system architecture.
A rough structural description
IRIS-XT resides in the namespace Comrade::IrisXT,
so to use it, you'll either have to refer to its data types and functions in a fully qualified
fashion, or bring in the whole thing with the using directive.
The classes currently implemented in the IRIS-XT are as follows:
KernelMatrix: This structure holds the values of the kernel during the
convolution of an image with a mask. It can be of any size, and can be generated
automatically in some situations like edge detection and Gaussian masking by setting
appropriate parameters to desired values.
KernelOperator: This class is responsible for the actual convolution
process between a HSL image and a KernelMatrix mask. It
also perform greyscale convolution of a RGB image.
KernelGenerator: This class can generate special standard masks which
are used frequently enough to warrant automated generation. Most of these masks are
used different edge detectors. They are:
- Roberts' cross operator
- Sobel's operator
- Prewitt's operator
- Isotropic operator
- Laplacian operator (zero crossing operator)
Other than that, there is the Gaussian kernel which is used for the Canny edge detector.
EdgeDetectorManager: So as to ease programming, this class shields the
programmer from explicitly defining kernels for edge detection. The kernels are generated
internally by calling the appropriate function and passing the specified arguments.
CA_EdgeDetector: This class implements a very simple, but useful edge detector
of my own design. It is based on the principles of Cellular Automata, and it is certainly faster
than convolution, though the results show some noise. But it may be adequate for most purposes.
See the Discussions section for more
details.
AlgorithmManager: This class encapsulates all functions which cannot be achieved
using kernel convolution. There are several functions defined here, and all are useful in
their own right. They are:
- Dilation
- Erosion
- Conversion to greyscale image
- Conversion to negative image
- Independent RGB channel adjustment
- Unsharp masking
- Range compression
- Contrast stretching
- Histogram equalisation
In addition, there are some internal functions which perform calculations on images, but
these are not meant to be accessed by the programmer.
StraightLineDetector: This class performs the Hough Transform on an image
already processed by an edge detector and determines possible straight lines. The result
is an angle with respect to some reference axis. This is currently under development,
i.e., not tested thoroughly as yet. Actually, another function
regression() is also capable of finding straight lines but is more susceptible
to noise, though faster.
BasicShapeDetector: This class, together with the
StraightLineDetector class, forms the Hough Transform Engine. This class
performs the Generalised Hough Transform on an image, and will detect arbitrary
shapes even in the presence of noise and/or occlusions.
ShapeSampler: This class is used to sample edge-detected shapes,
i.e., build a table of distances between some point and the (potential) perimeter
of a shape in increments specified by the programmer. This gives a shape table which
may be correlated with some stored shape table or may be used as a prototype shape
table for future matching by direct comparison. This class is also used by the
Hough Transform Engine.
SequenceAnalyser: This class is used to correlate shape tables to provide
a measure of the degree of correlation between them. The presence of noise and false
terminations is accomodated for by providing a cumulative error tolerance model.
This provides an alternative to the Hough Transform Engine, but more work is required to
increase the robustness of the method used.
Besides these, there is an experimental skeletoniser algorithm which awaits further
development. Also note that most of the functions implemented in IRIS-XT can be applied
to any rectangular region within an image, instead of the entire image. This provides
opportunities for optimisation.
Known issues
Canny edge detector does not detect edges in the expected manner for different values
of the smoothing constant sigma.
Have not decided a proper normalisation method for a shape table in the presence of noise,
Need to decide upon a proper scale-independent correlation function.
In the sampling algorithm, it may be possible for the radial line to 'miss' a
perimeter pixel and continue increasing falsely. Must either dilate before sampling, or
incorporate Bresenham's algorithm.
Copyright (c) 2004 Avishek Sen Gupta
|