【Pipeline】细菌计数自动化

有段时间在实验室打杂,每天做的最多的就是细菌计数。拍照、计数,每天需要大量的时间和精力,尤其是做的板子多的时候。因为生性懒,而且最讨厌机械化重复劳动,所以琢磨出了一套自动化的简化流程。

1.拍照

拍照有几个要点,一是降低反光和背景的噪音,二是每张照片能够相似的参数。

为了降低反光,最好能放在背景是黑色的桌面上拍摄,光源最好是平行光,亮度不要过亮。摄像机需要调节的最重要的参数是曝光补偿(EV值),即起到控制进光量的作用。一般都需要降低曝光补偿,这样背景的反光就大大可以降低。

如何使照片的参数保持一致呢,这就要使相机的机位尽可能的保持相同。一般相机都会采取4:3或者16:9的比例,而培养皿是圆形的,所以一般在拍完照后需要裁剪成正方形显得美观。但这时候可以用一个小技巧来大大减小这些工作量,这就是在拍摄的时候预先采用1:1的比例来拍照。拍摄的时候使相机正对培养皿的上方,让培养皿的边和相机的边框对齐,这样拍摄出来既可以让相机机位固定,又可以避免后期的裁剪。

拍摄的效果

2.Image J 自动计数

Image J 是一个基于Java的开源的图像处理软件,在实验室图像处理中非常流行。

网上有非常多的自动计数的教程,可以参考:

ImageJ实用技巧——自动细胞计数(解放双手篇)

ImageJ 中文教程(细胞计数)

总的流程可以参考下面这张图(源自知乎):

因为培养皿有边缘,所以在这些步骤前最好先把图片裁成圆形,以降低培养皿边缘造成的干扰。

具体参数可以自己调整,经过阈值调整的图参见下图

最后进行计数,需要调整的参数有计数粒子的半径和曲率,我设置的参数分别是10-∞,0.4-1。

总计数是679,人工计数的结果是656,误差率是3.5%,对于计数精确度要求不高的统计来说,在接受的范围。

3. Image j 实现批处理

上述步骤可能显得繁琐,甚至可能没有人工计数快,但是计算机技术的一个特点就是批处理,即可以用一个算法快速处理大量的数据。幸运的是,ImageJ可以提供这个功能。

ImageJ有一个macro版块,提供了批处理的功能,只要将算法输入macro中,就可以用这个算法处理大量的数据。

但是对于不熟悉ImageJ程序语言的人来说,如何获得算法呢?

这个时候,就可以用plugins-macro-record的功能,将你处理数据的步骤记录下来,通过记录,你的算法将转化成程序语言。然后将这个记录下来的数据复制到macro中就可以了。

makeOval(460, 440, 2160, 2120);
run("Clear Outside");
run("8-bit");
run("Invert");
setThreshold(0, 164);
run("Threshold...");
run("Convert to Mask");
run("Watershed");
run("Analyze Particles...", "size=10-1000 circularity=0.40-1.00 show=Outlines summarize");

结果如下图所示

再导出成csv文件技术步骤就完成了。

4.总结

自动计数的方法应该有很多,可以通过python语言实现,甚至可以通过机器学习来训练计数模型。不过ImageJ对于不是这么熟悉编程语言的人来说,比较易于使用。不过缺点也是显而易见的,这个结果的精确度无法做到很高,拍摄条件、以及设置的参数都对最后的结果影响很大。为了避免可能产生的大的误差,在样本中抽样进行检验是一个防止错误的办法。

2 Replies to “【Pipeline】细菌计数自动化”

Leave a Reply

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