Bacterial colony counting

Hi All,

We are running two bacterial killing assays in our lab, both require colony counting. One of those assays requires counting colonies of Streptococcus pneumoniae (pneumococcus) grown on a Todd Hewitt agar. The pneumococcal colonies are a reddish brown (after TTC staining) and the agar is a wheat colored light agar. Tif grayscale images of the plate are captured on an Alpha Innotech FluorChem using white light to illuminate the plate. Colonies are easily counted using colony counting software called NICE developed at the National Institute of Standards and Technology. This works OK.

The second assay is the reason I have been interested in using CellProfiler. The assay seeks to measure the ability of a patient’s serum (antibody) to kill Haemophilus influenzae (H. flu). The readout is, again, tons of colony counts on serially diluted serum samples to which H. flu has been added. The problem here however is that the agar used to cultivate H. flu is chocolate agar (named for the fact that it looks like chocolate, that is, it is brown and opaque). The colonies of H. flu are off-white; I have attached a typical image named 1-1.tif. NICE is unable to “see” these colonies.

I’ve been through the Current Protocols article by Vokes and Carpenter that describes a pipeline designed for yeast colony. That pipeline is not designed to begin with grayscale images and so I have tried to modify (also attached) it with mixed results.

So finally a question or two.

First, do you think a pipeline can be constructed that will enable CellProfiler to count these H. flu colonies on chocolate agar and still discriminate colonies that are touching one another?

Second, The 1-1.tif image shows a single plate with 8 different samples. Is there a way to partition the plate into separate regions that could be counted independently.

Each plate can be counted manually using the FlurChem but I have ~300 of these plate images that need processing. I’m hoping that CellProfiler can come to the rescue.

Bob Wilkinson
Infectious Disease Unit
Bob’s pipeline 21 Apr.cp (11.2 KB)

Hi Bob,

I’ve created a couple of pipelines to take care of both of your questions. A few notes:

  • Both of these issues are dealt with by creating a binary image mask, one for the plate itself, and the other for the regions of interest (ROI). I created the plate mask in Photoshop, making sure to reduce the diameterso as to exclude the reflected areas which can confound colony detection. The CreateMask pipeline uses IdentifyObjectsManually module to hand-draw the ROI then save them, but this is just an example; I suggest that you do the same but using Photoshop (or whatever software you prefer) to draw them the way you want.

  • While I’ve created example masks, you will want to create your own so that they work for all images you intend to use, not just this one.

  • The working of the Analysis pipeline is not too much different than the Curr Protocols article. I’ve annotated both pipelines in the module notes so you can see my thought process.

Hope this helps!
2011_04_21_CreateMask.cp (3.1 KB)
2011_04_21_Analysis.cp (12.1 KB)

Hi Mark,

Thanks for your hard work preparing the pipelines.

I prepared my own regions mask and plate mask and ran your pipeline but unfortunately got all zeros for the number of colonies in each of the 8 ROIs. I repeated after setting the threshold in the Apply Threshold module to 0.001 and still got all zeros.

I’m guessing that the same concerns raised by the NICE developers are at issue here as well, too little signal and too much noise!

If you have any more rabbits in your hat I’m all ears, if not, thanks again.


Hi Bob,

Could you post your pipeline thus far, plus an example image and the masks you used, so I can take a look?

Hi Mark,

I was not able to see the colonies well enough to draw regions using the 1-1.tif plate so ROI mask was prepared from a reversed image so I could see the colonies better and is therefore labeled 1-1revROI. Since the ROI mask is all about delineating the regions I felt that using the reversed image would be OK.

Two different plate masks were made, one from an image of a blank chocolate agar plate (the attached file is of this mask) and a second from the original 1-1.tif plate which I recycled so it is not attached. When the plate mask prepared from the 1-1.tif plate did not result in colony detection I decided to use an image of a blank plate as the mask thinking that the colonies on the mask may have had something to do with the negative result (subtracting signal). I used your create mask pipeline to make both masks and I have been able to load the plate mask pipeline but the ROI mask pipeline seems not to want to upload, perhaps there is a limit to the number of attachments allowed. One thing that might be worth mentioning… in the ROI mask pipeline I noticed you had the “Select the color type” in the Converts Objects To Image module set to grayscale. I left that at grayscale but for my plate masks I also tried setting that to binary as I recalled you commenting that these are actually binary masks. In any case I don’t think it mattered.

Thanks for taking another look.

2011_04_21_Create Plate Mask.cp (3.14 KB)

2011_04_21_1-1 pipeline from MBray.cp (12.1 KB)

Hi Bob,

One item which I mentioned but probably should have emphasized in my initial post was that the mask for the plate needs to be created with certain criteria in mind. Your ROI doesn’t fit the bill and seems to extend outside the plate itself. Unfortunately, this is the reason why it’s failing.

Take a look at the mask which I uploaded earlier and compare it to the plate image itself, as an example. The mask must (a) fit within the plate, and (b) exclude the bright reflections at the plate’s edge. If you want a more automated approach to creating this, you could invert the plate image, do a simple threshold and use Morph to contract the plate object by a specified number of pixels and save the result. I’m attaching a pipeline which does this.

Also, in the Align module, you may want to change the Crop mode to “Keep size”; the original setting seems to produce an error for some reason.

2011_04_26_CreatePlateMask.cp (5.48 KB)