The latest release of Bio Image Operation (BIO) is available here.

Download BIO (latest version using Qt/console)

Download BIO 1.5.440.1 (older version using Windows Forms)

Download user manual

Download script manual


Version 1.7.2

- Added dual script format support: Java and Python style now accepted

- Added new Source operation: GetSeriesMean (added example script)

- Added more image series operations

- Reworked tracking, handling merging better and using mean area and major length for ID

- Fixed bug and improved support for video capture (using OpenCapture)

- Added feature to tracking output: projection

- Improved cross-platform compatibility

- Added Hungarian algorithm (work in progress) separating tracking algorithm into separate class

- Added UI overlay to enable progress, syntax highlighting, and integrated benchmarking

- Fixed bug pause skipping remaining operations in loop

- Bug fix / improved error handling including messages shown in console mode


Version 1.7.1

- Simplified versioning

- Improved tracking using better ID information

- Added Pause operation

- Added basic script generation

- Reintroduced Totals option for sources

- Improved background subtraction and added min/max image buffer functions

- Renamed weighting function

- Larger points in cluster/track drawing functions

- Make labeling colors better distinguishable

- Redid color tables

- Redid cluster/track output information, added features and advanced features

- Redid log files to handle writing to many files efficiently

- Work-around for reading GoPro videos (known OpenCV issue)

- Bug fix: correctly closing output csv files

- Bug fix: set source sizes after scale/crop

- Bug fix: memory leak in tracking

- Improved error handling, including closing while in operation


Version 1.6.440.6

- Converted script help from RTF to MD, also shown in UI


Version 1.6.440.5

- Bug fix: correct paths in export

- Bug fix: booleans without value allowed

- Bug fix: correct split export cluster/tracks

- Bug fix: correct visibility order of cluster drawing


Version 1.6.440.3

- Bug fix: wildcard file patterns

- Bug fix: display grayscale images

- Bug fix: fixed printing cluster labels

- Bug fix: correct display numbers in window titles

- Handle redraw multiple text/image windows,

- Added dynamic resizing to image windows

- Added fixed size font


Version 1.6.440.2:

- Added command-line functionality, running scripts and operation help

- Added functionality providing corresponding text output in console


Version 1.6.440.1:

- Major re-release: Now using pure std/C++ and Qt (Qt5) as main gui, enabling potentially cross-platform

- Operation arguments checking is improved, consistently with operation syntax check now also occurring before execution starts

- Improved script instructions / generated manual

- Known issues: SSL not working (used in checking for updates)


Version 1.5.440.1:

- Improved tracking: now uses more accurate id information

- Fixed bug in cluster images

- Support OpenCV 4.4.0


Version 1.4.420.22:

- Save clusters/tracks: now uses frames and time as well as saving contours, added different output formats

- Fixed various small bugs

- Support OpenCV 4.2.0 (and correct version of openh264)


Version 1.4.410.21:

- Fixed memory leak in showing images with stride

- Use time when saving tracks etc

- Proper file modified detection including auto save on run


Version 1.4.410.20:

- Fixed bug in videos without length/frames property

- Fixed bug showing images with stride/padding

- Fixed bug not showing images after error occurs

- Minor fixes for video progress

- Support OpenCV 4.1.0


Version 1.4.400.10:

- Added saving clusters and tracks by label


Version 1.4.400.9: 

- Exposed video API selection


Version 1.4.400.8:

- Fixed bugs in image series and cluster drawing

- Simplified stats calculations improving automatic tracking parameter calculation

- Supports OpenCV 4.0.0


Version 1.4.341.7:

- Added GPL license information


Version 1.4.341.6:

- Further improved automatically finding optimal tracking parameters

- Added 'Check for updates' functionality

- Minor bug fixes


Version 1.4.341.5:

- Significantly improved automatically finding optimal tracking parameters

- Draw logarithmic color legend based on input parameters

- Many improvements and bug fixes and updates to the help/manual


Version 1.4.341.4:

- Implemented directly writing to video file using H264 encoding


Version 1.4.341.3:

- Significant improvement in overall performance


Version 1.4.341.2 (OpenCV 3.4.1):

- Implemented all track draw functions including many options

- Improved script argument checking and help

- Uses OpenCV 3.4.1


Version (OpenCV 3.4) - This is a major rewrite from C#/Emgu to C++/OpenCV. These are the key points:

- Using OpenCV directly - with full library support and using the latest version

- Real-time processing of HD video source (on standard consumer hardware) due to significant performance improvements

- Direct memory management with superior memory footprint

- Improved error handling and argument checking

- Built-in dynamically-generated script help

- Improved cluster detection: using connected components for accurate cluster sizes

- Very efficient custom image display, for minimal impact on main image processing loop

- Improved installer with pre-requisites detection and download (using WiX)

- Re-branded artwork


Good news, Bio Image Operation is now available as Open Source on GitHub

Major re-release: BIO is now pure C++ with Qt, and command-line

BioImageOperation (BIO) - Tracking step by step guide

Here is a step by step example of image tracking, using the BioImageOperation software including BIO script (see below). This software allows real-time processing (on standard consumer hardware) directly from HD video source or video files. For this example we use a public source: ants walking on concrete with varying lighting (video used from this public source - full video available here).

This is what the source video looks like



First, detection is applied on each raw video image, to determine the objects of interest



Next, we use contour detection to determine clusters (from OpenCV), then apply a custom high performance tracking algorithm (including direction & 'collision' detection)



An alternative way of visualising the tracking shows the history for each ant



Additionally, we can analyse common paths over time



The basic script used for basic tracking (using default / automatic parameter values):





  5:background = UpdateBackground()











Flexible Script-based Image Operation

Bio Image Operation or 'BIO', is a next generation Image processing tool focussing on biological applications, balancing ease of use with desired flexibility required for research.

This tool has been developed in collaboration with biologists, using extensive captured images.

The solution balancing both the need for research purposes and flexibility required for this, and desired ease of use is realised in a script based user interface.

The tool uses the widely used OpenCV for many of it's image operations, with an efficient tracking algorithm allowing real time processing (upto HD @ 50 fps).


Automated tracking example: Tracking from public source: ants walking on concrete with varying lighting (video used from this public source):

tracking detail

(View full video here)


User Interface



Visualisation example

Visualising tracks simply using image combination (Source material from Tom Wenseleers and colleagues - University of Leuven)

combine short



The initial idea was to create a simple agent based model, using very naive agents. Many models appear to invest on agents with considerable intelligence and abbilities. My goal was to make a model to reproduce agents that are very naive and even error prone, where the model strength results from the collective rather than the individuals. The first step of building an agent based model was to identify key model parameters. However, after realising the basic paramaters for common ants were not published at all, an initial step would be to determine these parameters from existing source material.

This led to image processing for agent tracking. The first step was producing image recognition from scratch - none of the existing tools available appeared to be able to reasonably import video formats of my source material. The source material was generously provided by expert biologists.

Image: low resolution source capture


Dynamic median background subtraction & normalised


 The main features of the first implementation:

- Class implementation allows image type operations: 'Image = Original - Background'

- Advanced operations such as normalisation

- Export as floating point RGB or grayscale image with optimised lossless compression (FTF format)

- Parallel processing to improve performance


Image tracking

 The image tracking was also developed from scratch.


The resulting software was able to perform tracking based on very low resolution and frequency source material (i.e. less than 10 pixels per subject)

- Using variable intensity level (as opposed to simple binary detection commonly used in tracking)

- Accurate and sensitive feature identification

- Tracking with velocity prediction

- Detecting and accumulating common paths (age / usage) using logarithmic colour scale

- Visualisation of features, tracking, common paths

- Export as floating point RGB or grayscale image with optimised lossless compression (FTF format)

- Parallel processing to improve performance