发明内容
本发明的目的在于提出一种基于显微镜图像的鱼腥藻类细胞统计方法,实现了鱼腥藻类细胞的准确统计。
为实现上述目的,本发明提供了一种基于显微镜图像的鱼腥藻类细胞统计方法,包括:
步骤⑴图像预处理:增强图像的对比度;
步骤⑵图像二值化:找出图像中鱼腥藻类区域;
步骤⑶计算鱼腥藻类最小外接矩形:计算二值图像的外轮廓,并找到这些轮廓的最小外接矩形;
步骤⑷检测鱼腥藻类二值图像:根据鱼腥藻类最小外接矩形,生成用于细胞统计的鱼腥藻类二值图像;
步骤⑸计算鱼腥藻类细胞个数:通过步骤⑷计算的二值图像来统计鱼腥藻类细胞个数。
可选的,步骤⑶中计算鱼腥藻类最小外接矩形包括:首先基于二值图像计算外轮廓,设定阈值的外轮廓,其次对满足设定阈值的外轮廓,计算外轮廓的最小外接矩形,根据最小外接矩形计算最小外接矩形结构体,最后对最小外接矩形结构体进行删除误检测最小外接矩形。
可选的,步骤⑶计算最小外接矩形结构体包括以下几个步骤:
⑴通过最小外接矩形的宽、高和旋转角度等参数,计算4个顶点的坐标,顶点坐标按顺时针方向存放,分别存放在pts[0]、pts[1]、pts[2]和pts[3]中;
⑵找出最小外接矩形的长边和短边,将它长边的长度保存在data结构体的width变量里,短边的长度保存在data结构体的height变量里;
⑶计算最小外接矩形长边和短边的比值,按比值来计算它的形状属性,本发明中最小外接矩形的形状属性分为一般形状、长条形和正方形三种形态,对应shape变量的值为0、1和2;
⑷将pts[0]和pts[1]组成一个线段line1,将pts[1]和pts[2]组成另一个线段line2,通过判断两个线段的长度,来找到长边对应的线段;
⑸计算任意长边线段两个顶点坐标x方向的距离和y方向的距离,判断它的方向属性,方向属性只有水平状态和垂直状态两种,存放在direction变量中;
⑹根据方向特征,比较长边线段x轴或y轴的坐标值,将数值较小的长边线段保存在lineL变量中,将数值较大的长边线段保存在lineR变量中;
⑺lineL和lineR也是一个结构体,它有两个参数分别是斜率k和y轴上的截距b,通过线段上的两个顶点坐标,分别计算data结构体中lineL和lineR直线方程的参数k和b。
可选的,步骤⑷删除误检测最小外接矩形包括:
⑴查找最小外接矩形结构体的shape数值,找出shape=1的结构体;
⑵进一步分析shape=1的结构体,根据它的direction数值,计算width变量数值与图像长度的比值,如果比值大于设置的阈值(0.75),则将该结构体作为参考结构体;
⑶以参考结构体为基础,分析其他结构体顶点坐标与参考结构体lineL和lineR的位置关系;
⑷在计算点到线段的投影时,如果参考结构体中direction=0,首先找到将y轴最大的顶点和y轴最小的顶点,将y轴最大顶点的x坐标的值代入lineL的直线方程中,计算点投影到lineL上对应y方向的坐标值;
⑸在计算点到线段的投影时,如果参考结构体中direction=1,首先找到将x轴最大的顶点和x轴最小的顶点,将x轴最大顶点的y坐标的值代入lineL的直线方程中,计算该点投影到lineL上对应x方向的坐标值;
⑹当参考结构体direction=0时,删除lineL上方或者lineR下方的其他结构体;当参考结构体direction=1时,删除lineL左边或者lineR右边的其他结构体。
可选的,步骤⑷检测鱼腥藻类二值图像包括:
⑴结合最小外接矩形结构体来更新原来的二值图像,形成一个更干净的二值图像;
⑵首先生成一个与原二值图像分辨率相同的二值图像,默认以0来填充该图像;
⑶将步骤⑵生成的Mask掩模图像和原二值图像做与操作,得到过滤掉误检测数据后的二值图像;
⑷计算步骤⑶中二值图像的contour轮廓和它的层级关系;
⑸根据检测的轮廓数据,生成鱼腥藻类二值图像。
可选的,步骤⑹根据轮廓数据,生成鱼腥藻类二值图像包括:
⑴首先从轮廓的hierarchy中找到Parent=-1的数据,这些数据都是外轮廓,计算他们的最小外接矩形,然后再和data结构体里的width和height进行匹配,找到对应的外轮廓contour点集;
⑵生成一个新的二值图像,二值图像的分辨率与原始图像分辨率一致,二值图像各像素的初始值为0,填充步骤⑴中找到的外轮廓contour点集包围的区域,填充值为255,生成鱼腥藻类二值图像;
⑶在使用OTSU二值化分割图像时,不可避免地会出现细胞区域(白色)内部存在空洞(黑色)的现象,它会导致计算出来的鱼腥藻类细胞像素面积偏小;
⑷如果data结构体中shape=2,说明鱼腥藻类细胞很可能是闭合或环绕卷曲的形态,首先按照步骤⑵的方式填充外轮廓,得到一个二值图像contourImg1;
⑸从轮廓的hierarchy中找到Parent不等于-1的数据,这些数据都是内轮廓,计算他们的像素面积,如果面积大于设定的阈值,则将它们对应的contour点集保存下来;
⑹生成一个新的二值图像,二值图像的分辨率与原始图像分辨率一致,二值图像各像素的初始值为0,填充步骤⑸中所有内轮廓contour点集包围的区域,填充值为255,得到一个二值图像contourImg2;
⑺用contourImg1减去contourImg2,得到鱼腥藻类二值图像;
⑻如果正方形鱼腥藻类是闭合的,那么contourImg2是存在白色区域,通过步骤⑺可以得到图像中实际鱼腥藻类细胞区域的二值图像;如果正方形鱼腥藻类是非闭合的,那么contourImg2是不存在白色区域的,步骤⑺得到的鱼腥藻类二值图像实际上就是contourImg1。
可选的,步骤⑸计算鱼腥藻类细胞个数包括以下几个步骤:
⑴在鱼腥藻类二值图像上,重新计算图像中的外轮廓,并计算它的外接矩形;
⑵将外接矩形长边除以短边,计算它的长短边比值,如果比值大于设定的阈值(4.0),则认为图像上鱼腥藻类的形态是长条形;
⑶如果鱼腥藻类的形态为长条形,找到外接矩形的短边,以短边来修正鱼腥藻类单位细胞的像素尺寸;
⑷计算二值图像的像素面积,用它除以修正后的单位细胞像素尺寸,得到鱼腥藻类的细胞个数;
⑸如果鱼腥藻类的形态不是长条形,那么,先采用斑点检测方法从灰度图像中检测鱼腥藻类细胞;
⑹如果步骤⑸中检测到多个大小相似的鱼腥藻类细胞,则以它们的均值来修正单位细胞像素尺寸;
⑺执行步骤⑷,计算鱼腥藻类的细胞个数;
⑻如果步骤⑸中未能检测到多个大小相似的鱼腥藻类细胞,则不修正单位细胞像素尺寸,直接将二值图像的像素面积除以默认的细胞像素尺寸,得到鱼腥藻类的细胞个数。
可选的,通过二值图像进行细胞个数统计时,首先根据图像上鱼腥藻类的形态,对单位细胞的像素尺寸进行了修正,再计算二值图像中白色区域的像素面积,用它除以修正后的单位细胞像素尺寸,计算出细胞个数。
本发明技术效果:本发明公开了一种基于显微镜图像的鱼腥藻类细胞统计方法,不需要在深度学习模型中检测鱼腥藻类的细胞,减少了数据标注工作,提高了模型训练和模型优化的效率;针对闭合环绕卷曲的鱼腥藻类,本发明设计了有效的二值图像计算方法,能够较好地提取出它的实际二值图像,提高了细胞像素面积计算的精度;相同分辨率下,鱼腥藻类细胞的大小也会存在一定的差距,本发明能够根据鱼腥藻类图像上的形态特征,有针对性地对它的单位细胞像素尺寸进行修正,不仅提高了细胞统计的精度,也提升了它的适用范围;鱼腥藻类细胞统计方法为独立的模块,便于算法后期的优化和维护。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
如图1所示,本实施例中提供一种基于显微镜图像的鱼腥藻类细胞统计方法,包括以下步骤:
⑴图像预处理:增强图像的对比度;
⑵图像二值化:找出图像中鱼腥藻类区域;
⑶计算鱼腥藻类最小外接矩形:计算二值图像的外轮廓,并找到这些轮廓的最小外接矩形;
⑷检测鱼腥藻类二值图像:根据鱼腥藻类最小外接矩形,生成用于细胞统计的鱼腥藻类二值图像;
⑸计算鱼腥藻类细胞个数:通过步骤⑷计算的二值图像来统计鱼腥藻类细胞个数。
如图2所示,所述图像预处理模块包括以下内容:
⑴首先对图像进行缩放处理,提高整体运行效率;
⑵将缩放后的彩色图像数据转换成灰度图像;
⑶对灰度图像进行中值滤波去噪;
⑷采用CLAHE(对比度受限的自适应直方图均衡化)算法对图像进行对比度拉伸操作;
⑸由于CLAHE算法拉伸后的图像数据会存在较多噪点,需要通过高斯模糊化算法来进一步降噪。
采用OTSU(大律)法对图像进行二值化处理,二值化后,图像上鱼腥藻类细胞区域为白色(255),其余像素值为0。
然后对二值图像进行形态学Dilate(膨胀)处理,连接图像中断开的白色区域。
如图3所示,所述计算鱼腥藻类最小外接矩形包括以下内容:
⑴在二值图像上计算外轮廓;
⑵对像素面积满足设定阈值的轮廓,计算它们的最小外接矩形;
⑶对每个最小外接矩形计算它的参数,并构建一个data结构体(struct)数据,结构体中包含pts变量、width变量、height变量、shape变量、angle变量、direction变量、lineL变量和lineR变量。分别表示最小外接矩形的4个顶点坐标,最小外接矩形的长边、最小外接矩形的短边、最小外接矩形的形状属性(0表示一般形状,1表示为长条形,2表示为正方形)、最小外接矩形的旋转角度、最小外接矩形的方向属性(0表示水平方向,1表示垂直方向)、最小外接矩形的左长边线段和最小外接矩形的右长边线段;
⑷通过观察,我们发现:当图像中的鱼腥藻类形状为长条形时,部分藻类细胞之间的间隙会比较大,二值图像中代表藻类细胞的白色区域会断开。因此,在删除误检测最小外接矩形时,为了避免删除掉二值图像中断开的鱼腥藻细胞,我们通过计算其他外接矩形顶点到参考外接矩形长边的投影来过滤误检测数据。
如图4所示,所述计算最小外接矩形结构体包括以下内容:
⑴通过最小外接矩形的旋转角度、宽和高数据,计算它的4个顶点坐标,并存放到data结构体的pts变量中。pts顶点坐标是按照最小外接矩形的顺时针方向进行存储,分别是pts[0]、pts[1]、pts[2]和pts[3];
⑵将最小外接矩形的长边保存在data结构体的width变量里,短边保存在data结构体的height变量里;
⑶data中shape变量默认设置为0,将data的width除以height,计算长短边之比,如果比值大于设定的阈值(4.0),那么它的形状就是长条形,data结构体shape变量设置为1。如果长短边比值小于设定的阈值(1.5),那么它的形状就是正方形,data结构体shape变量设置为2;
⑷将pts[0]和pts[1]组成line1,pts[1]和pts[2]组成line2,如果line1的长度(两个顶点之间的距离)大于line2的长度,那么line1为第一个长边lineTemp1,对应的pts[3]和pts[2]组成的线段为第二个长边lineTemp2。同理,如果line2的长度(两个顶点之间的距离)大于line1的长度,那么line2为第一个长边lineTemp1,对应的pts[0]和pts[3]组成的线段为第二个长边lineTemp2。计算lineTemp1对应两个顶点的X轴方向的距离dx和Y轴方向的距离dy,如果dx的绝对值大于dy的绝对值,那么将data中direction变量的值设置为0,反之设置为1。
⑸进一步分析步骤⑷中的lineTemp1和lineTemp2,如果data的direction变量的值为0,那么,判断lineTemp1和lineTemp2顶点的最小y坐标数值,如果lineTemp1顶点的最小y坐标值大于lineTemp2顶点的最小y坐标值,那么,将lineTemp2保存在data结构体的lineL变量中,将lineTemp1保存在data结构体的lineR变量中。如果data的direction变量的值为1,那么,判断lineTemp1和lineTemp2顶点的最小x坐标数值,如果lineTemp1顶点的最小x坐标值大于lineTemp2顶点的最小x坐标值,那么,将lineTemp2保存在data结构体的lineL变量中,将lineTemp1保存在data结构体的lineR变量中;
⑹data结构体中lineL和lineR也是一个结构体,它有两个参数分别是斜率k和y轴上的截距b(采用斜截式直线方程y=kx+b),通过线段上的两个顶点坐标,分别计算data结构体中lineL和lineR直线方程的参数k和b。
为了更好的说明删除误检测外接矩形结构体的具体方法,我们将结合示例图来讲解。如图5所示,它包括以下内容:
⑴数字1、2、3、4分别表示一个最小外接矩形结构体。其中,A、B、C、D为1号结构体的四个顶点(pts),结构体中direction变量的值为0(水平方向),shape变量的值为1(长条形),lineL对应的是BC组成的线段,lineR对应的是AD组成的线段;F为4号结构体y轴坐标最小的顶点;E为3号结构体y轴坐标最大的顶点;G为2号结构体y轴坐标最小的顶点,H为2号结构体y轴坐标最大的顶点。
⑵1号结构体是本示例中的参考结构体,将结合示意图说明它是如何删除误检测外接矩形结构体(3号和4号),保留2号结构体的过程;
⑶因为1号结构体的direction变量的值为0,所以,按y轴找到其他结构体(2、3和4)y轴坐标最小和最大对应的顶点;如果direction变量的值为1,那么,将按x轴找到其他结构体(2、3和4)x轴坐标最小和最大对应的顶点;
⑷以2号结构体为例,分别计算y轴坐标最大顶点H在1号结构体lineL(BC线段)上的投影dy1和y轴坐标最小顶点G在1号结构体lineR(AD线段)上的投影dy2。如果dy1的值大于0,则表示2号结构体在lineL的下方。反之,2号结构体在lineL的上方。如果dy2的值大于0,则表示2号结构体在lineR的下方。反之,2号结构体在lineR的上方;
⑸在计算点到线段的投影时,如果参考结构体中direction=0,那么将该点x坐标的值代入直线方程中,计算该点投影到直线上对应y方向的坐标值;同理,如果参考结构体中direction=1,那么将该点y坐标的值代入直线方程中,计算该点投影到直线上对应x方向的坐标值;
⑹在步骤⑷中,若dy1小于0(结构体在lineL上方)或dy2大于0(结构体在lineR下方),将删除掉对应的结构体数据。从图上可以清晰地观察到,2号结构体不满足以上这两个条件,所以2号结构体会保留下来。3号结构体满足dy1小于0的删除条件,4号结构体满足dy2大于0的删除条件,它们都将被删除掉。
⑺以上步骤简单来说就是:当参考结构体的方向是水平状态时,删除lineL上方或者lineR下方的其他结构体;当参考结构体的方向是垂直状态时,删除lineL左边或者lineR右边的其他结构体;
⑻必须满足结构体的shape属性为1(长条形),并且他的width长边的值大于图像长度的3/4才能成为参考结构体,本示例中只有1号结构体为参考结构体;
⑼步骤⑺中图像长度是根据data中direction变量的值来决定的,当direction=0时,图像长度就是图像的width;当direction=1时,图像长度就是图像的height;
⑽只有参考结构体才能对其他结构体进行误检测分析和删除操作。如果图像中未找到参考结构体,那么将不会进行删除误检测外接矩形结构体的操作。
如图6所示,所述检测鱼腥藻类二值图像包括以下内容:
⑴原来的二值图像中误检测的细胞区域也是白色,会影响后续的计算。因此,需要结合最小外接矩形结构体来更新原来的二值图像,形成一个更干净的二值图像;
⑵首先生成一个与原二值图像分辨率相同的二值图像,默认以0来填充该图像。然后通过最小外接矩形的4个顶点坐标来填充它覆盖的区域(以255值来进行填充),生成Mask掩模图像;
⑶将步骤⑵生成的Mask掩模图像和原二值图像做与操作,得到过滤掉误检测数据后的二值图像;
⑷计算步骤⑶中二值图像的contour轮廓(内、外轮廓)和它的层级关系(hierarchy);
⑸一个contour轮廓是由一系列点集(vector<point>contour)组成的,每个contour对应一个hierarchy(层级关系),它是一个结构体vec4i,由4个参数组成next、Previous、First_Child和Parent,分别表示同一层级下一个轮廓的ID,同一层级上一个轮廓的ID,第一个子轮廓ID和父轮廓ID,默认值为-1;
⑹根据检测的轮廓数据,生成鱼腥藻类二值图像。
如图7所示,所述根据检测的轮廓数据,生成鱼腥藻类二值图像包括以下内容:
⑴由于在前面已经计算过外轮廓的最小外接矩形结构体了,这里不用重复计算,直接判断data结构体中shape的值。如果shape的值不等于2,那么,说明它不是正方形鱼腥藻类。首先从轮廓的hierarchy中找到Parent=-1的数据,这些数据都是外轮廓,计算他们的最小外接矩形,然后再和data结构体里的width和height进行匹配,找到对应的外轮廓contour点集;
⑵生成一个新的二值图像,二值图像的分辨率与原始图像分辨率一致,二值图像各像素的初始值为0,填充步骤⑴中找到的外轮廓contour点集包围的区域,填充值为255,生成鱼腥藻类二值图像;
⑶在使用OTSU二值化分割图像时,不可避免地会出现细胞区域(白色)内部存在空洞(黑色)的现象,它会导致计算出来的鱼腥藻类细胞像素面积偏小。步骤⑵采用填充外轮廓的方式就可以避免这个问题;
⑷如果data结构体中shape=2,说明鱼腥藻类细胞很可能是闭合或环绕卷曲的形态。首先按照步骤⑵的方式填充外轮廓,得到一个二值图像contourImg1;
⑸从轮廓的hierarchy中找到Parent不等于-1的数据,这些数据都是内轮廓,计算他们的像素面积,如果面积大于设定的阈值,则将它们对应的contour点集保存下来;
⑹生成一个新的二值图像,二值图像的分辨率与原始图像分辨率一致,二值图像各像素的初始值为0,填充步骤⑸中所有内轮廓contour点集包围的区域,填充值为255,得到一个二值图像contourImg2;
⑺用contourImg1减去contourImg2,得到鱼腥藻类二值图像;
⑻如果正方形鱼腥藻类是闭合的,那么contourImg2是存在白色区域,通过步骤⑺可以得到图像中实际鱼腥藻类细胞区域的二值图像;如果正方形鱼腥藻类是非闭合的,那么contourImg2是不存在白色区域的,步骤⑺得到的鱼腥藻类二值图像实际上就是contourImg1。因此,该方法具有较好的适用性。
如图8所示,黑白图像即为本发明计算出的鱼腥藻类二值图像。对比原始图像,可以发现:无论是长条形还是环绕卷曲形的鱼腥藻类,本发明均可以获得较理想的效果。
如图9所示,所述计算鱼腥藻类细胞个数包括以下内容:
⑴在鱼腥藻类二值图像上,重新计算图像中的外轮廓,并计算它的外接矩形;
⑵将外接矩形长边除以短边,计算它的长短边比值,如果比值大于设定的阈值(4.0),则认为图像上鱼腥藻类的形态是长条形;
⑶如果鱼腥藻类的形态为长条形,找到外接矩形的短边,以短边来修正鱼腥藻类单位细胞的像素尺寸;
⑷计算二值图像的像素面积,用它除以修正后的单位细胞像素尺寸,得到鱼腥藻类的细胞个数;
⑸如果鱼腥藻类的形态不是长条形,那么,先采用斑点检测(SimpleBlobDetector)方法从灰度图像中检测鱼腥藻类细胞;
⑹如果步骤⑸中检测到多个大小相似的鱼腥藻类细胞,则以它们的均值来修正单位细胞像素尺寸;
⑺执行步骤⑷,计算鱼腥藻类的细胞个数;
⑻如果步骤⑸中未能检测到多个大小相似的鱼腥藻类细胞,则不修正单位细胞像素尺寸,直接将二值图像的像素面积除以默认的细胞像素尺寸,得到鱼腥藻类的细胞个数。
如图10所示,鱼腥藻类图像左上角深色数字为本发明统计的细胞个数,下方亮色的数字为人工统计的鱼腥藻类细胞个数。
以上所述,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。