DTC Programming Module Project: Identification of antibiotic resistance

Posted on

The inevitable and relentless growth of antibiotic resistance threatens much of the progress made by modern medicine in the last seventy years. Tuberculosis (TB) is an infectious disease caused by the bacterium M. tuberculosis. In a high-income country, such as the UK, it is often thought to be a disease of the past and of the poor. TB is, however, now responsible for more deaths globally annually than any other infectious disease (including HIV/AIDS) according to the World Health Organisation.


Over the next five years we are collecting samples from 100,000 patients infected with TB from a wide range of countries. The genome of the TB in each sample will be sequenced and the susceptibility of each infection to a panel of 15 different antibiotics will be determined. This is being done using 96 well plates (see below). Each well contains an antibiotic at a pre-determined concentration. By examining each well for growth we can infer which antibiotics that particular TB infection is resistant to and relate that to the mutations we observe in bacterial genome. In this way we will build up a comprehensive catalogue of which chromosomal TB mutations cause resistance to antibiotics (and equally importantly, which do not).

A 96 well plate showing different amounts of bacterial growth in each well.

The Problem

The challenge is to analyse each image of a 96 well plate (see the 3 examples below) and determine whether there is growth in each well (or not). A better question to answer is “how much growth is there in each well?” since there is often a small dot at the centre of the well which may be dead bacteria left over from when the well was (robotically) inoculated. Then one could set a threshold below which they would be classified as “no growth” and above which would be classified as “growth”. This reduces down to two image processing problems

  1. Can you identify each well? Since the relative position of each well on the plate determines which antibiotic is in it and at what concentration, you’ll need to be able to isolate “the 3rd well along and 2 rows down”.
  2. Once you can identify each well, how much growth is in it?

Notice that these are dependent, i.e. you have to solve 1. before you can solve 2.

This is a live research problem which means (a) we don’t know how to do it and (b) if you come up with a solution that works well and we end up using it you could end up as an author on a peer-reviewed paper a year or so down the road.

Possible Hints

Remember this is live research question so we don’t know how to do it!

  • Since each well is inoculated in the centre by the robot, it is reasonable to assume that any growth will be roughly radial and therefore one could probably ignore the very edge of each well. In other words, I’d expect it to be ok if you only analysed the middle 50% of each well, by area.
  • It might be worth pre-processing the images to enhance the contrast between growth and the background. If you do this, notice that the illumination is not constant over the plate, which makes this difficult. You could segment the plate into individual wells, or groups of wells, and then e.g. perform histogram equalisation to get round this.
  • The operator of the machine calibrates each run, which means in practice that each image has a similar-but-not-quite-the-same numbers of x and y pixels.

Language and Possible Libraries and Modules

I would recommend you build off an existing Python module or C library! OpenCV is a very extensive computer vision C library which also has a Python interface. Alternatively, scikit-image is a “from scratch” Python module for image processing and represents the images as numpy multi-dimensional arrays, and is therefore not much slower than C. Given the well-defined nature of the problem, it may be possible to write your own “vanilla” C or Python code…

Additional help / problems.

Email Philip Fowler.

Examples Images

A completely successful project would be able to read each of these three images and return the amount of growth for each well. You don’t have to get this far to pass! This is a challenging problem, so effort and innovation will be rewarded! Good Luck. To download the images, right-click on each of them and choose “Download”.

Very advanced/stretch problems: Can you characterise the “blobbiness” of the growth? Or the “darkness” relative to the background.

image-3 image-2 image-1



Leave a Reply

Your email address will not be published. Required fields are marked *