I have been involved with developing Machine Vision applications since the 90’s and these days I help companies implement their own Machine Vision applications from high-speed image acquisition from multiple cameras through to Machine Vision system development.

We help our clients with the following:

Lighting Control – The lights are normally Synchronised with cameras in real-time, a microcontroller can be used to create very rich lighting schemes with frame-accurate timing, see Embedded Software Engineering

Image Acquisition  – Reliably acquiring images from multiple synchronised cameras at high speed and making them available to the machine vision code, this is often the foundation on which a machine vision application is built and often takes a bit of experience to get working just right.  Often, an important aspect of image acquisition is to properly decouple it from the rest of the machine vision code so that synchronisation is not lost if processing occasionally takes longer than expected etc.

Image processing – We sometimes have to very quickly  process the acquired images before we apply vision algorithms (for example colour space conversions or bit-depth manipulation)  We use libraries like OpenCV to hep with this, but sometimes their algorithms aren’t as tuned or as efficient as required so  we often employ hand-crafted SIMD based processing algorithms to speed things up.

Computer Vision Algorithms – Next we apply some computer vision algorithms to gain information from the images, this is the bit that does the important work and is generally application specific.

Overall Control & Results Management – Often there is a requirement for an application to wrap everything up, control inspection and manage, store and communicate the results.  Sometimes this is a bespoke application that we design and write from scratch using the appropriate libraries, while other times we will work with existing frameworks.

Most of our Machine Vision work is carried out in C++, C# and Python using some libraries like OpenCV, Basler Pylon, XIMEA xiAPIMatrox MIL, Halcon as may be required by the application or imaging hardware used.