You are here: Start » Introduction » Overview

Overview

Introduction

FabImage Library is a machine vision library for C++ and .NET programmers. It provides a comprehensive set of functions for creating industrial image analysis applications – from standard-based image acquisition interfaces, through low-level image processing routines, to ready-made tools such as template matching, measurements or barcode readers. The main strengths of the product include the highest performance, modern design and simple structure making it easy to integrate with the rest of your code.

The scope of the library encompasses:

  • Image Processing
    High performance, any-shape ROI operations for unary and binary image arithmetics, refinement, morphology, smoothing, spatial transforms, gradients, thresholding and color analysis.
  • Region Analysis
    Robust processing of pixel sets that correspond to foreground objects: extraction, set arithmetics, refinement, morphology, skeletonization, spatial transformations, feature extraction and measurements.
  • Path Analysis
    Subpixel-precise alternative to region analysis, particularly suitable for shape analysis. Provides methods for contour extraction, refinement, segmentation, smoothing, classification, global transformations, feature extraction and more.
  • Profiles
    Auxiliary toolset for analysis of one-dimensional sequences of values, e.g. image sections or path-related distances.
  • Histograms
    Auxiliary toolset for value distribution analysis.
  • Geometry 2D
    Exhaustive toolset of geometric operations compatible with other parts of the library. Provides operations for measuring distances and angles, determining intersections, tangents and feature.
  • 1D Edge Detection
    Detection of edges, ridges and stripes (paired edges) by the means of 1D edge scanning, i.e. by extracting and analysing a profile along a specified path.
  • 2D Edge Detection
    Detection of edges by the means of 2D edge tracing, i.e. by extracting and refining locally maximal image gradients.
  • Fourier Analysis
    Suitable both for educational experimentation and industrial application, this toolset provides methods for Fourier transform and image processing in the frequency domain.
  • Template Matching
    Efficient, robust and easy to use methods for localizing objects using a gray-based or an edge-based model.
  • Barcodes
    Detection and recognition of many types of 1D codes.
  • Datacodes
    Detection and recognition of QR codes and DataMatrix codes.
  • Hough Transform
    Detection of analytical shapes using the Hough transform.
  • Image Segmentation
    Automated extraction of object regions using gray or edge information.
  • Multilayer Perceptron
    Artificial neural networks.
  • Optical Character Recognition
    Text recognition or validation, including dot print.
  • Shape Fitting
    Subpixel-precise detection of analytical shapes, whose rough locations are known.

Relation between FabImage Library and FabImage Studio

Each function of the FabImage Library is the basis for the corresponding filter available in FabImage Studio. Therefore, it is possible (and advisable) to use the FabImage Studio as a convenient, drag & drop prototyping tool, even if one intends to develop the final solution in C++ using FabImage Library. Moreover, for extended information about how to use advanced image analysis techniques, one can refer to Machine Vision Guide from the documentation of FabImage Studio.

In the table below we compare the ThresholdImage function with the ThresholdImage filter:

FabImage Library: FabImage Studio:
void ThresholdImage
(
	const Image&			inImage,
	Optional<const Region&>	inRoi,
	Optional<real>			inMinValue,
	Optional<real>			inMaxValue,
	real					inFuzziness,
	Image&					outMonoImage
);
ThresholdImage

Key Features

Performance

In FabImage Library careful design of algorithms goes hand in hand with extensive hardware optimizations, resulting in performance that puts the library among the fastest in the world. Our implementations make use of SSE instructions and parallel computations on multicore processors.

Modern Design

All types of data feature automatic memory management, errors are handled explicitly with exceptions and optional types are used for type-safe special values. All functions are thread-safe and use data parallelism internally, when possible.

Consistency

The library is a simple collection of types and functions, provided as a single DLL file with appropriate headers. For maximum readability function follow consistent naming convention (e.g. the VERB + NOUN form as in: ErodeImage, RotateVector). All results are returned via reference output parameters, so that many outputs are always possible.

Example Program

A simple program based on the FabImage Library may look as follows:

#include <FIL.h>

using namespace ftl;
using namespace fil;

int main()
{
	try
	{
		InitLibrary();
		Image input, output;
		LoadImage("input.bmp", false, input);
		ThresholdImage(input, NIL, 128, NIL, 0, output);
		SaveImage(output, NIL, "output.bmp", false);
		return 0;
	}
	catch (const ftl::Error&)
	{
		return -1;
	}
}

Please note that FabImage Library is distributed with a set of example programs, which are available after installation.

Previous: Introduction Next: Programming Conventions