一种智能菌落计数方法转让专利

申请号 : CN201610819425.4

文献号 : CN106447020B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘昱昊

申请人 : 上海海事大学

摘要 :

一种智能菌落计数方法,包括:图像采集模块,用于读入待计数菌落的图像;边缘滤除模块,用于划定计数菌落的分布区域,并将区域外的点设成背景;二值化处理模块,用于把计数区域内的图像转为二值图像;图像分割模块,用于把计数区域内的图像分割成若干个独立的图像块,每一块内只包含一个菌落;特征匹配模块,用于根据客户选定的菌落图像与分割得到的每一个图像块进行特征匹配,匹配成功的图像即为菌落图像;结果显示模块,用于对匹配的结果进行显示,并能根据使用者的选择来调整匹配结果;参数交互设置模块,用于与使用者交互,为使用者提示输入并接收使用者输入的结果。

权利要求 :

1.一种智能菌落计数系统,其特征在于包括:图像采集模块,边缘滤除模块,二值化处理模块,图像分割模块,特征匹配模块,结果显示模块,参数交互设置模块;

所述的边缘滤除模块,用于去除可能存在的边界信息;边缘滤除模块接收图像采集模块传递过来的图像M,其步骤为:第一步将图像M显示在屏幕上;第二步,由使用者划定合适的培养皿边界,对于不含边界的图像,使用者可以直接选择跳过该模块,直接将图像M传递给二值化处理模块;第三步,对于存在培养皿边界的图像,在图像M上浮动显示一个圆形区域,由使用者拖动培养皿进行移动、放大、缩小或调整为椭圆形以适应图像中的培养皿形状,从而使圆形区域或椭圆区域内包含图像中的全部菌落;第四步,将圆形区域外的图像的所有像素点设为NaN,即对于圆形区域外的任一点(a,b),M(a,b)=NaN;第五步,接收由参数交互设置模块传递来的菌落样本点灰度值Ms和背景点灰度值Mb;第六步,根据Ms和Mb对区域外的点进行填充数值,否则提示用户;最后,将填充后的图像传递给二值化处理模块;

s b

所述的根据M 和M 对区域外的点进行填充数值,其方法如下:对于图像M中的值为NaN的像素点进行赋值,由于值为NaN的点为背景点,所以,若Mb>Ms,则对于所有值为NaN,设值为

255;若Mb<Ms,则对于所有值为NaN,设值为0;

所述的二值化处理模块,其步骤为:该模块接收来自于边缘滤除模块所传递过来的去除边界的图像M,第一步,对图像M进行滤波,得到滤波后的图像M′;第二步,建立基于图像M′的灰度直方图,由于图像M′的每个点的取值范围为[0,255],所以对于i∈[0,255],计算其在图像M′中灰度点为i的个数ni,然后设图像M′为p行q列,对于每个ni,计算Pi=ni/(p×q);

第三步,判断以Pi组成的向量中存在峰值的个数,其中i∈[0,255],峰值的判断方法为,对于Pi,其中i∈[1,254],如果Pi-1<Pi并且Pi+1<Pi则此刻的i即为一个峰值,统计出在i∈[1,

254]中所有峰值的个数;第四步,若峰值个数为2,或者重复次数大于1000次,进入第五步,否则,则对Pi进行平滑,其中i∈[0,255],平滑的方法为:赋值P′1=(P1+P2)/2,p′i=(Pi-1+Pi+Pi+1)/3,P′255=(P254+P255)/2,计算结束后,Pi=P′i其中i∈[0,255],进入第三步;第五步,若重复次数大于1000后峰值个数仍不为2,说明图像M′不是双峰结构,对其进行二值化赋值,若峰值个数为2,则说明M′是双峰结构,对应的两个峰值分别为u1和u1,对其进行二值化赋值;并将二值化图像Mbin传递给图像分割模块;

所述的对图像M进行滤波,得到滤波后的图像M′,设图像M为p行q列,其步骤如下:首先对于图像M上的每个点M(a,b),进行如下处理:(1)如果M(a,b)为图像的角点,其计算方法为:M′(1,1)=[M(1,1)+M(1,2)+M(2,1)+M(2,2)]/4,M′(1,q)=[M(1,q)+M(2,q)+M(1,q-1)+M(2,q-1)]/4,M′(p,1)=[M(p,1)+M(p,2)+M(p-1,1)+M(p-1,2)]/4,M′(p,q)=[M(p,q)+M(p-1,q)+M(p,q-1)+M(p-1,q-1)]/4,设图像左上角的点的坐标为(1,1);(2)排除(1)中的点,如果M(a,b)为图像的边界点,其计算方法为:若a=1,则M′(1,b)=[M(1,b-1)+M(1,b)+M(1,b+1)+M(2,b-1)+M(2,b)+M(2,b+1)]/6,若a=p,则M′(p,b)=[M(p,b-1)+M(p,b)+M(p,b+

1)+M(p-1,b-1)+M(p-1,b)+M(p-1,b+1)]/6,若b=1,则M′(a,1)=[M(a-1,1)+M(a,1)+M(a+

1,1)+M(a-1,2)+M(a,2)+M(a+1,2)]/6,若b=q,则M′(a,q)=M[(a-1,q)+M(a,q)+M(a+1,q)+M(a-1,q-1)+M(a,q-1)+M(a+1,q-1)]/6;(3)排除(1),(2)中的点,其余点的计算方法为M′(a,b)=[M(a-1,b-1)+M(a,b-1)+M(a+1,b-1)+M(a-1,b)+M(a,b)+M(a+1,b)+M(a-1,b+1)+M(a,b+1)+M(a+1,b+1)]/9;以上结果若不为整数,则保留整数部分,从而得到M对应的滤波后的图像M′;

对于图像M′不是双峰结构,对其进行二值化赋值的方法可以简单的比较Ms和Mb,其中Ms和Mb为由参数交互设置模块得到的菌落样本点灰度值Ms和背景点灰度值Mb,判断1.若Mb>Ms,对于M′上的每个点,设其坐标为(x,y),赋值的公式为:如果M′(x,y)<(Mb+Ms)/2,Mbin(x,y)=1,否则Mbin(x,y)=0;

判断2.若Mb<Ms,对于M′上的每个点(x,y),赋值的公式为:

如果M′(x,y)>(Mb+Ms)/2,Mbin(x,y)=1,否则Mbin(x,y)=0;

对于图像M′是双峰结构,对其进行二值化赋值的方法为:第一步,找到双峰之间的最小值,即对于Pi寻找使Pi取值最小的i,其中i∈[u1,u2],此刻的i即为阈值,设i=μ;第二步,对于M′上的每个点(x,y):判断1.若Mb>Ms,则赋值的公式为:

如果M′(x,y)<μ,Mbin(x,y)=1,否则Mbin(x,y)=0;

b s

判断2.若M<M,赋值的公式为:

如果M′(x,y)>μ,Mbin(x,y)=1,否则Mbin(x,y)=0;

所述的图像分割模块,其步骤为:第一步,对二值化图像Mbin进行腐蚀膨胀处理,得到处理后的图像M″;第二步,接收由参数交互设置模块设置的最小菌落半径rmin和最大菌落半径rmax,根据图像M″寻找图像中所有的圆形区域;第三步,根据选定的圆形区域对滤波后的图像M′进行分割,将分割的结果构成的集合Sp传递给特征匹配模块;

所述的对二值化图像Mbin进行腐蚀膨胀处理,其方法如下:第一步,对于Mbin上的所有点,选取当前点(a,b)及以当前点周围的8个点所构成的3×3区间内的9个点,若都为1,则否则, 对于边界点,会出现不够9个点的情况,那么只需考虑

3×3区间内存在的点即可;第二步,对于 上的所有点,选取当前点(a,b)及以当前点周围的8个点所构成的3×3区间内的9个点,若都为0,则M″(a,b)=0,否则,M″(a,b)=1;对于边界点,会出现不够9个点的情况,那么只需考虑3×3区间内存在的点即可;从而得到了腐蚀膨胀处理后的二值化图像M″;

所述的根据图像M″寻找图像中所有的圆形区域,其步骤如下:第一步,在图像M″中随机寻找一个值为1并且没有被选中过的点,设该点为Pg其对应图像M″坐标为(x,y),构造出Pg点所对应的连通区域边界点集合G;第二步,判断该连通区域边界点集合G所围成的区间是否小于最小菌落半径rmin所围成的区间,如果小于,则将连通区域边界点集合G所围成的区间在图像M″中所对应的点赋值为0,算法跳转到第一步;第三步,根据连通区域边界点集合G,进行霍夫变换,从而得到边界点集合G所对应的最可能的圆;第四步,判断该区域是否为所要求的圆形,如果是,则将当前的圆形信息保存在集合Sp中,并在图像M″中将该圆形区域覆盖掉;第五步,判断图像M″是否为空,如果不为空,转到第一步;

所述的构造出Pg点所对应的连通区域边界点集合G其步骤为:第一步,设Pg坐标为(x,y),i=0,判断通过Pg点角度为θ的直线在图像M″上划过的全为1的区间,记录该区间的两个端点,并将这两个端点的集合放入集合G,对于重复的端点,只记录一次,其中θ=0,θ=π/4,θ=2π/4和θ=3π/4,此刻共有四条线,每条线有两个交点,共8个端点;第二步,设i=3,对于θ=[π/2i,3π/2i,5π/2i,…,(2i-1)π/2i],计算通过Pg点角度为θ的直线在图像M″上划过的全为1的区间,记录该区间的所有端点;第三步,若第二步中所记录的所有端点中,至少存在一个端点,该端点在集合G中不存在,则将这些不存在的端点加入到集合G中,赋值i=i+1,算法转到第二步继续计算;若第二步中所记录的所有端点在集合G中都存在,意味着不需要再细分θ,此时已经构造出点所对应的连通区域边界点集合G;

所述的判断通过Pg点角度为θ的直线在图像M″上划过的全为1的区间,记录该区间的两个端点,对于角度为θ,其步骤为:设Pg点对应图像M″坐标为(a1,b1),计算k=tanθ,bk=b1-a1×tanθ,参数k和bk为通过Pg点的直线方程y=kx+bk上所对应的参数,然后分别进行正向搜索和反向搜索,通过正向搜索和反向搜索所得的点A,B即为所记录该区间的两个端点:正向搜索:

当θ≠π/2时,正向搜索步骤为:

第一步,x坐标设为x=a1;第二步,x坐标自增1个像素,并根据y=kx+bk计算对应的y坐标;第三步,若超出了图像M”的坐标范围,则点 正向搜索边界点结束,否则判断M″(x,y)是否为0,若不为0,则转入第二步继续计算,若为0,则记录点A=(x-1,k(x-1)+bk),正向搜索边界点结束;

当θ=π/2时,tanθ不存在,此时的正向搜索步骤为:

第一步,x坐标设为x=a1;第二步,y坐标自增1个像素;第三步,若(x,y)超出了图像M″的坐标范围,则点 正向搜索边界点结束,否则判断M″(x,y)是否为0,若不为0,则转入第二步继续计算,若为0,则记录点A=(a1,y-1),正向搜索边界点结束;

反向搜索:

当θ≠π/2时,反向搜索步骤为:

第一步,x坐标设为x=a1;第二步,x坐标自减1个像素,并根据y=kx+bk计算对应的y坐标;第三步,若(x,y)超出了图像M″的坐标范围,则点 反向搜索边界点结束,否则判断M″(x,y)是否为0,若不为0,则转入第二步继续计算,若为0,则记录点B=(x+1,k(x+1)+bk),反向搜索边界点结束;

当θ=π/2时,tanθ不存在,此时的反向搜索步骤为:

第一步,x坐标设为x=a1;第二步,x坐标自减1个像素,并根据y=kx+bk计算对应的y坐标;第三步,若(x,y)超出了图像M″的坐标范围,则点 反向搜索边界点结束,否则判断M″(x,y)是否为0,若不为0,则转入第二步继续计算,若为0,则记录点B=(x+1,k(x+1)+bk),反向搜索边界点结束;

所述的判断该连通区域边界点集合G所围成的区间是否小于最小菌落半径rmin所围成的区间,如果小于,则将连通区域边界点集合G所围成的区间在图像M″中所对应的点赋值为

0,其步骤为:第一步,统计连通区域边界点集合G中所有的端点,计算其横坐标最大的像素差和纵坐标最大的像素差,选取二者最大值与 相比较;第二步,如果小于说明该连通区域所围成的正方形区间小于最小菌落半径rmin所围成的区间,则

根据边界点集合G中的最小横纵坐标xmin,ymin,最大横纵坐标xmax,ymax所围成的矩形区域,其端点为(xmin,ymin),(xmax,ymin),(xmin,ymax)和(xmax,ymax),将图像M″所对应的区域内的点赋值为0;

所述的根据连通区域边界点集合G,进行霍夫变换,从而得到边界点集合G所对应的最可能的圆,其中值rmax由参数交互设置模块设置,图像M″为p×q矩阵,num()为集合中的元素的个数,其步骤为:第一步,构造一个三维矩阵Hough,其维度为p×q×r,初始时矩阵Hough的所有元素都为0;

第二步,当边界点集合G不为空时,从边界点集合G中取出一个点,设其对应图像M″的坐标为(x,y),执行如下操作:

对于r=[0,1,2,…,1.3rmax],r为整数:

对于θ=[0,π/12,2π/12,3π/12,…,11π/12]:

计算aH=x-rcosθ,bH=x-rsinθ;

如果0<aH≤p并且0<bH≤q,则Hough(aH,bH,r)=Hough(aH,bH,r)+1;

第三步,取三维矩阵Hough中的最大元素值为N,若N≤max(2,num(G)/25),说明当前连通区域边界点不是圆形;否则,意味着当前边界点集合G所围成的区域为一个圆形,对于三维矩阵Hough中所有元素值大于0.7×N的坐标点(aHi,bHi,ri)组成的集合Hp,分别计算其在各自维度的坐标的平均值: r=∑ri/num(Hp),其中(aHi,bHi,ri)∈Hp,则该圆的圆心坐标为 半径为r;

所述的判断该区域是否为所要求的圆形,如果是,则将当前的圆形信息保存在集合Sp中,并在图像M″中将该圆形区域覆盖掉,其步骤为:

第一步,若当前边界点集合G所围成的区域为不是一个圆形,则对于集合G中的每个点对应图像M″的坐标(x,y),如果该点与其他点的最小距离小于2像素,则将M″(x,y),M″(x+1,y),M″(x,y+1)和M″(x+1,y+1)赋值为0;

第二步,若当前边界点集合G所围成的区域为一个圆形,该圆的圆心坐标为(ar,br),半径为r,则:如果r<rmin,意味着当前圆形区域过小,说明当前圆形区域内的目标不是要寻找的目标,则将图像M″的区域内对应于圆形区域坐标的所有值设为0;如果rmin<r<rmax,意味着当前圆形区域内的图像可能是要寻找的图像,则将图像M″的区域内对应于圆形区域坐标的所有值设为0,将(ar,br,r)保存于已选定集合Sp中;如果半径r>rmax,意味着当前圆形区域内可能有多个待识别的圆形目标,将M″(ar,br)赋值为0;

所述的特征匹配模块,用来对图像分割模块所得到的集合Sp进行特征匹配,将分割得到的圆形与使用者在参数交互设置模块中所选定的典型菌落样本picsample进行特征匹配,匹配成功的图像即为菌落图像,统计图像个数即可得到样本菌落个数;其步骤为:第一步,对于图像分割模块所得到的圆进行扩充,得到矩形集合Rp,从而保留待匹配图像的边界信息;第二步,将待匹配图像和典型菌落样本图像构成一个集合,分别对集合中的每一张图像提取ORB特征;第三步,将每一块待匹配图像与典型菌落样本图像进行特征点匹配,得到每一个待匹配图像与典型菌落样本图像之间的匹配点的个数;第四步,从参数交互设置模块中获得阈值,统计匹配特征点的个数高于阈值的待匹配图像,将这些图像构成一个集合,集合的元素个数即为样本菌落的个数,将包含匹配成功的待匹配图像信息的集合传递给结果显示模块;

所述的对于图像分割模块所得到的圆进行扩充,其步骤为:第一步,若圆的集合Sp不为空,则从集合Sp中提取一个元素Asp,设为(ap1,bp1,rp1),则该圆的圆心的坐标为(ap1,bp1),圆半径为rp1;第二步,计算该圆的圆心与集合Sp中其他圆的圆心之间的欧氏距离,选取距离最小的元素Bsp设为(ap2,bp2,rp2),则该圆的圆心的坐标为(ap2,bp2),圆半径为rp2;第三步,计算Asp与Bsp之间的欧氏距离得 则元素Asp的新半径为rp1′=d×rp1/(rp1+rp2)+10,若rp1′计算结果不为整数,则只保留整数部分;第四步,将元素Asp所代表的圆形区域转化为正方形,对于(ap1,bp1,rp1)及新的半径rp1′,其扩展后的正方形区间为坐标(ap1-rp1′,bp1-rp1′),(ap1-rp1′,bp1+rp1′),(ap1+rp1′,bp1-rp1′)和(ap1+rp1′,bp1+rp1′)所围成的正方形区域,并将这四个点保存在矩形集合Rp中;第五步,将元素ASp从集合Sp中删除,若集合Sp为空,扩充过程结束,否则算法转至第一步;

所述的将待匹配图像和典型菌落样本图像构成一个集合,分别对集合中的每一张图像提取ORB特征,其步骤为:第一步,对于矩形集合Rp中的每一个区间,设其四个顶点的坐标为(ap1-rp1′,bp1-rp1′),(ap1-rp1′,bp1+rp1′),(ap1+rp1′,bp1-rp1′)和(ap1+rp1′,bp1+rp1′),在图像M′中提取对应的区域内的图像Pgray,若矩形区域所对应的坐标超出了M′的范围,那么将超出的部分对应的图像Pgray上的像素值设为0,从而得到了矩形集合Rp中所有的元素对应的灰度图像集合;第二步,根据典型菌落样本picsample正方形的边长,将图像集合中的所有的图像进行放大或缩小,使缩放之后的图像与picsample为相同大小;第三步,对于缩放之后的图像和picsample,分别提取其ORB特征,对于每一个图像提取若干个ORB特征,每个ORB特征为一组字符串向量,其元素为[0,1],所有ORB特征向量的长度相同,为了节省空间,我们可以让字符串向量组成的二进制编码的每一位对应ORB特征的一个元素;

所述的将每一块待匹配图像与典型菌落样本图像进行特征点匹配,其步骤为:对于每一个待匹配图像所提取的ORB特征集合,用VI表示,则VI(i)表示待匹配图像的第i个ORB特征,典型菌落样本图像的ORB特征集合,用VP表示:对于VI中的每一个特征,用VI(i)表示:

计算出特征VI(i)与集合VP中的每一个特征的距离;

若同时满足(1)最小距离小于阈值;(2)最小距离<0.8×第二小距离意味着匹配成功,将匹配成功的数量加1;

该方法结束;

所述的计算出特征VI(i)与集合VP中的每一个特征的距离,对于集合VP中的每个特征,设该特征为VP(j),则计算特征VI(i)与特征VP(j)的距离,其步骤如下:由于VI(i)和VP(j)为两个长度相等的向量,向量上的每一位取值为0或1,所以,从VI(i)的第0位和VP(j)的第0位开始作对比,比较两个向量对应位的值是否相同,统计两个向量中对应元素不相同的位置个数,即为两个特征的距离;

所述的结果显示模块,接收来自于特征匹配模块传递来的包含匹配成功的待匹配图像信息的集合Vset;对于该集合的每一个匹配成功的待匹配图像信息,在读入的图像M上按照集合中的每一个待匹配图像的位置信息绘制一个矩形图案,该位置信息即为在图像M″上所对应的矩形区域,其中图像M″为图像分割模块中进行腐蚀膨胀处理后得到处理后的图像M″,若矩形位置超过图像M的边界,则超出边界部分不画出;并在图像外侧显示集合Vset的个数;考虑到可能出现的误判操作,允许用户通过鼠标操作在图像上添加、删除所绘制的矩形图案,并在集合Vset中进行对应的修改:(1).对于添加操作,使用者在认为漏判的菌落图案上操作鼠标,则绘制一个以鼠标操作位置的坐标为中心,以(rmax+rmin)/2为边长的矩形,其中rmin和rmax分别为参数交互设置模块所设置的最小菌落半径和最大菌落半径,同时,将该矩形区域信息加入集合Vset中;允许用户对该矩形框进行平移、放大缩小操作,在移动矩形框的同时,修改集合Vset中对应的矩形框信息;

(2).对于删除操作,使用者在认为错判的菌落上的矩形框内操作鼠标,则取得当前鼠标操作位置,则对于集合Vset中的所有元素的区域信息,如果当前鼠标位置落入该元素的矩形框内,则从屏幕上删掉该矩形框,并从集合Vset中删掉该对应的元素信息,判断点(Pa,Pb)是否落入矩形框内的方法为:对于矩形框的边界点(a1V,b1V),(a2V,b1V),(a1V,b2V)和(a2V,b2V),如果a1V<Pa<a2V,并且b1V<Pb<b2V,则意味着点(Pa,Pb)落入矩形框中;

所述的参数交互设置模块,其作用是与用户交互,得到所需要的参数信息;分别包括:

(1).指定典型菌落的样本图像时,第一步,由使用者在图像M上进行操作,选定一个圆形区域,设其圆心坐标为(Ia,Ib),半径为Ir;第二步,对于圆心坐标为(Ia,Ib),半径为Ir的s圆形区域的所有像素点,求其对应的灰度值的平均值,设该值为M ;第三步,将该圆形区域扩展成正方形区域,该正方形是由如下四个端点围成的:(Ia-Ir,Ib-Ir),(Ia+Ir,Ib-Ir),(Ia-Ir,Ib+Ir)和(Ia+Ir,Ib+Ir);将图像M′中对于坐标(Ia-Ir,Ib-Ir),(Ia+Ir,Ib-Ir),(Ia-Ir,Ib+Ir)和(Ia+Ir,Ib+Ir)所围成的区域内的图像复制出来,作为典型菌落样本picsample;

(2).指定典型菌落的背景图像时,第一步,由使用者在图像M上进行操作,选定一个矩形区域,该矩形区域长宽可以由使用者调节大小;第二步,对于使用者所指定的矩形区域内的所有像素点,求其对应的灰度值的平均值,设该值为Mb;若|Ms-Mb|<20,意味着背景区域与典型菌落的样本图像过于相似,要求使用者重新划定背景图像区域;

(3).指定最小菌落半径rmin和最大菌落半径rmax,第一步,指定最小菌落半径rmin时,首先,由使用者输入一个最小菌落半径rmin,并在屏幕上绘制一个半径为rmin的圆形区域,由使用者与屏幕上的菌落图案作对比,并调整rmin的大小;第二步,指定最大菌落半径rmax时,首先,由使用者输入一个最大菌落半径rmax,并在屏幕上绘制一个半径为rmax的圆形区域,然后,由使用者与屏幕上的菌落图案作对比,并调整rmax的大小;

(4).设定特征匹配模块的关于匹配成功特征点个数的阈值;第一步,接收来自特征匹配模块所计算得到的待匹配图像和每一个图像与典型菌落图像的特征匹配点个数,将所有图像显示给使用者;第二步,由使用者选择一张图像,这张图像上的匹配成功特征点个数即为阈值;若期望得到较多的匹配图像,可以将所有图像按照第一步操作所得到的匹配特征点个数,由小到大排序,由使用者选择第一个菌落图像,则阈值即为该图像对应的成功特征点个数减一;若期望得到较准确的匹配图像,则可以将所有图像按照第一步操作所得到的匹配特征点个数,由大到小排序,由使用者选择第一个非菌落图像,则阈值即为该图像对应的成功特征点个数;

将(1),(2)中指定的Ms和Mb传递给边缘滤除模块,将(1)中指定的典型菌落样本picsample传递给特征匹配模块,将(3)中指定的最小菌落半径rmin和最大菌落半径rmax传递给分割模块,将(4)中所指定的阈值传递给特征匹配模块。

说明书 :

一种智能菌落计数方法

技术领域

[0001] 本发明涉及计算机视觉领域,具体涉及使用计算机视觉领域的图像处理方法对照片中的菌落数目进行统计的方法。

背景技术

[0002] 在生物实验中,经常需要对培养皿中的菌落数目进行统计,传统方法通过人工进行统计,这种方法费时费力,同时也容易造成实验员精神上的疲劳。
[0003] 本发明使用计算机图像处理方法对培养皿中的菌落进行计数统计,由于现如今图像很容易提取,从而基于图像的菌落计数方法有着很高的适用性。本发明采用图像特征匹配方法,从而能够排除掉大量错误的菌落。

发明内容

[0004] 本发明所要解决的技术问题是为了克服传统菌落计数方法采用人工计数,从而容易在多次试验后导致实验员疲劳的缺点,提出了一种智能的菌落计数方法。
[0005] 本发明解决其技术问题所采用的技术方案是:
[0006] 一种智能菌落计数方法,包括:图像采集模块,用于读入待计数菌落的图像;边缘滤除模块,用于划定计数菌落的分布区域,并将区域外的点设成背景;二值化处理模块,用于把计数区域内的图像进行二值化处理,该模块根据灰度图的直方图及使用者指定的菌落样本点灰度值和背景点灰度值所提供的信息,将灰度图转化为二值图;图像分割模块,用于把计数区域内的图像分割成若干个独立的图像块,每一块内只包含一个菌落(可能包含误判区域,由特征匹配模块进行筛选),该模块通过从二值图像上随机选择一个点,统计该点对应的连通区域的边界点的集合,根据边界点的信息进行霍夫变换,从而得到该点对应的圆形区域,重复上述过程后,能够得到若干个圆形区域,根据这些圆形区域的信息,将灰度图进行图像分割;特征匹配模块,用于根据客户选定的菌落图像与分割得到的每一个图像块进行特征匹配,统计匹配成功的区域,该模块对于分割后的每一个模块,提取其ORB特征,然后将该图像的ORB特征与用户选定的典型菌落样本的ORB特征进行特征匹配,匹配成功的图像即为菌落图像;结果显示模块,用于对匹配的结果进行显示,并能根据使用者的操作来调整匹配结果;参数交互设置模块,用于与使用者交互,为使用者提示输入、接收使用者输入的结果,并将其转化为处理过程中所需的参数,该模块能够指定典型菌落样本、典型菌落背景图像、最小菌落半径、最大菌落半径、特征匹配的阈值。
[0007] 所述的一种智能菌落计数方法,包括图像采集模块,边缘滤除模块,二值化处理模块,图像分割模块,特征匹配模块,结果显示模块,参数交互设置模块。
[0008] 所述的图像采集模块,用于接收含有带统计菌落的图像,所接收的图像可以是直接调用摄像头后采集到的图像,也可以是将已经拍摄到的图像导入到系统中,该图像通常为灰度图像M,若读入的图像为彩色RGB图像Mc,则需要将彩色图像Mc转换为灰度图像,并传递给边缘滤除模块。
[0009] 所述的将彩色图像Mc转换成灰度图像M的变换方法为:对于原始彩色图片Mc上的每一个像素点所对应的R,G,B分量,不失一般性的用i和j表示其坐标,则该像素点对应在M上的灰度值为M(i,j)=0.3×B(i,j)+0.59×G(i,j)+0.11×R(i,j),其中M(i,j)为整数,若所得结果为小数的话,仅取其整数部分,从而得到彩色图像Mc所对应的灰度图像M。
[0010] 所述的边缘滤除模块,用于去除可能存在的边界信息;边缘滤除模块接收图像采集模块传递过来的图像M,其步骤为:第一步将将图像M显示在屏幕上;第二步,由使用者划定合适的培养皿边界,对于不含边界的图像,使用者可以直接选择跳过该模块,直接将图像M传递给二值化处理模块;第三步,对于存在培养皿边界的图像,在图像M上浮动显示一个圆形区域,由使用者拖动培养皿进行移动、放大、缩小或调整为椭圆形以适应图片中的培养皿形状,从而使圆形(或被使用者调整为椭圆形以适应照相产生的形变)区域内包含图像中的全部菌落;第四步,将圆形区域外的图像的所有像素点设为NaN,即对于圆形区域外的任一s点(a,b),M(a,b)=NaN.第五步,接收由参数交互设置模块传递来的菌落样本点灰度值M 和背景点灰度值Mb.第六步,根据Ms和Mb对区域外的点进行填充数值;最后,将填充后的图像M传递给二值化处理模块。
[0011] 所述的根据Ms和Mb对区域外的点进行填充数值,其方法如下:对于图像M中的值为b sNaN的像素点进行赋值,由于值为NaN的点为背景点,所以,若M>M ,则对于所有值为NaN,设值为255;若Mb<Ms,则对于所有值为NaN,设值为0.
[0012] 所述的二值化处理模块接收来自于边缘滤除模块所传递过来的去除边界的图像M,其步骤为:第一步,对图像M进行滤波,得到滤波后的图像M′;第二步,建立基于图片Mgray的灰度直方图,由于图片Mgray的每个点的取值范围为[0,255],所以对于i∈[0,255],计算其在图片Mgray中灰度点为i的个数ni,然后设图像Mgray为p行q列,对于每个ni,计算Pi=ni/(p×q).第三步,判断以Pi(i∈[0,255])组成的向量中存在峰值的个数,峰值的判断方法为,对于Pi(i∈[1,254]),如果Pi-1<Pi并且Pi+1<Pi则此刻的i即为一个峰值,统计出在i∈[1,254]中所有峰值的个数;第四步,若峰值个数为2,或者重复次数大于1000次,进入第五步,否则,则对Pi(i∈[0,255])进行平滑,平滑的方法为:赋值P′1=(P1+P2)/2,P′i=(Pi-1+Pi+Pi+1)/3,P′255=(P254+P255)/2,计算结束后,Pi=P′i(i∈[0,255]),进入第三步;第五步,若重复次数大于1000后峰值个数仍不为2,说明该图Mgray不是双峰结构,对其进行二值化赋值,若峰值个数为2,则说明Mgray是双峰结构,对应的两个峰值分别为u1和u1,对其进行二值化赋值。并将二值化图像M′bin传递给图像分割模块。
[0013] 所述的对图像M进行滤波,得到滤波后的图像M′,设图像M为p行q列,其步骤如下:首先对于图像M上的每个点M(a,b),进行如下处理:1,如果M(a,b)为图像的角点,其计算方法为:M′(1,1)=[M(1,1)+M(1,2)+M(2,1)+M(2,2)]/4,M′(1,q)=[M(1,q)+M(2,q)+M(1,q-
1)+M(2,q-1)]/4,M′(p,1)=[M(p,1)+M(p,2)+M(p-1,1)+M(p-1,2)]/4,M′(p,q)=[M(p,q)+M(p-1,q)+M(p,q-1)+M(p-1,q-1)]/4(设图像的(1,1)点为左上角的点);2,排除1中的点,如果M(a,b)为图像的边界点,其计算方法为:若a=1,则M′(1,b)=[M(1,b-1)+M(1,b)+M(1,b+
1)+M(2,b-1)+M(2,b)+M(2,b+1)]/6,若a=p,则M′(p,b)=[M(p,b-1)+M(p,b)+M(p,b+1)+M(p-1,b-1)+M(p-1,b)+M(p-1,b+1)]/6,若b=1,则M′(a,1)=[M(a-1,1)+M(a,1)+M(a+1,1)+M(a-1,2)+M(a,2)+M(a+1,2)]/6,若b=q,则M′(a,q)=M[(a-1,q)+M(a,q)+ M(a+1,q)+M(a-
1,q-1)+M(a,q-1)+M(a+1,q-1)]/6;3.排除1,2中的点,其余点的计算方法为M′(a,b)=[M(a-1,b-1)+M(a,b-1)+M(a+1,b-1)+M(a-1,b)+M(a,b)+M(a+1,b)+M(a-1,b+1)+M(a,b+1)+M(a+1,b+1)]/9。以上结果若不为整数,则保留整数部分,从而得到M对应的滤波图像M′.[0014] 所述的对于图Mgray不是双峰结构,对其进行二值化赋值的方法可以简单的比较Ms和Mb,1.若Mb>Ms,对于Mgray上的每个点(x,y),赋值的公式为:
[0015] 如果Mgray(x,y)<(Mb+Ms)/2,Mbin(x,y)=1,否则Mbin(x,y)=0;
[0016] 2.若Mb<Ms,对于Mgray上的每个点(x,y),赋值的公式为:
[0017] 如果Mgray(x,y)>(Mb+Ms)/2,Mbin(x,y)=1,否则Mbin(x,y)=0;
[0018] 所述的对于图Mgray是双峰结构,对其进行二值化赋值的方法为:第一步,找到双峰之间的最小值,即对于Pi(i∈[u1,u2])寻找使Pi取值最小的i,此刻的i即为阈值,设i=μ。第二步,对于Mgray上的每个点(x,y):
[0019] 1.若Mb>Ms,则赋值的公式为:
[0020] 如果Mgray(x,y)<μ,Mbin(x,y)=1,否则Mbin(x,y)=0;
[0021] 2.若Mb<Ms,赋值的公式为:
[0022] 如果Mgray(x,y)>μ,Mbin(x,y)=1,否则Mbin(x,y)=0;
[0023] 所述的图像分割模块,其步骤为:第一步,对二值化图像Mbin进行腐蚀膨胀(开运算)处理,得到处理后的图像M″;第二步,接收由参数交互设置模块设置的最小菌落半径rmin和最大菌落半径rmax,根据图像M″寻找图像中所有的圆形区域;第三步,根据选定的圆形区域对滤波后的图像M′进行分割,将分割的结果Sp传递给特征匹配模块。
[0024] 所述的对二值化图像Mbin进行腐蚀膨胀(开运算)处理,其方法如下:第一步,对于M′bin上的所有点,选取当前点(a,b)及以当前点周围的8个点所构成的3×3区间内的9个点,若都为1,则 否则, 对于边界点,会出现不够9个点的情况,那么只需考虑3×3区间内存在的点即可;第二步,对于 上的所有点,选取当前点(a,b)及以当前点周围的8个点所构成的3×3区间内的9个点,若都为0,则M″(a,b)=0,否则,M″(a,b)=1.对于边界点,会出现不够9个点的情况,那么只需考虑3×3区间内存在的点即可。从而得到了腐蚀膨胀处理后的二值化图像M″。
[0025] 所述的根据图像M″寻找图像中所有的圆形区域,其步骤如下:第一步,在图像M″中随机寻找一个值为1并且没有被选中过的点,设该点P为(x,y),构造出P点所对应的连通区域边界点集合G;第二步,判断该连通区域边界点集合G所围成的区间是否小于最小菌落半径rmin所围成的区间,如果小于,则将连通区域边界点集合G所围成的区间在图像M″中所对应的点赋值为0,算法跳转到第一步;第三步,根据连通区域边界点集合G,进行霍夫变换,从而得到边界点集合G所对应的最可能的圆;第四步,判断该区域是否为所要求的圆形,如果是,则将当前的圆形信息保存在集合Sp中,并在图像M″中将该圆形区域覆盖掉;第五步,判断图像M″是否为空,如果不为空,转到第一步。
[0026] 所述的构造出P点所对应的连通区域边界点集合G其步骤为:第一步,设P坐标为(x,y),i=0,判断通过P点角度为θ的直线在图像M″上划过的全为1的区间,记录该区间的两个端点,并将这两个端点的集合放入集合G(对于重复的端点,只记录一次),其中θ=0,θ=π/4, θ=2π/4和θ=3π/4,此刻共有四条线,每条线有两个焦点,共8个端点;第二步,设i=3,对于θ=[π/2i,3π/2i,5π/2i,…,(2i-1)π/2i](即[1,2i-1]之间所有的奇数乘以π/2i),计算通过P点角度为θ的直线在图像M″上划过的全为1的区间,记录该区间的所有端点;第三步,若第二步中所记录的所有端点中,至少存在一个端点,该端点在集合G中不存在,则将这些不存在的端点加入到集合G中,赋值i=i+1,算法转到第二步继续计算;若第二步中所记录的所有端点在集合G中都存在,意味着不需要再细分θ,此时已经构造出点所对应的连通区域边界点集合G。
[0027] 所述的判断通过P点角度为θ的直线在图像M″上划过的全为1的区间,记录该区间的两个端点,对于角度为θ,其步骤为:设P点为(a1,b1),计算k=tanθ,b=b1-a1×tanθ,参数k和b为通过P点的直线方程y=kx+b上所对应的参数,然后分别进行正向搜索和反向搜索。
[0028] 正向搜索:
[0029] 当θ≠π/2时,正向搜索步骤为:
[0030] 第一步,x坐标设为x=a1;第二步,x坐标自增1个像素,并根据y=kx+b计算对应的y坐标;第三步,若(x,y)超出了图像M′′的坐标范围,则点 正向搜索边界点结束,否则判断M″(x,y)是否为0,若不为0,则转入第二步继续计算,若为0,则记录点A=(x-1,k(x-1)+b),正向搜索边界点结束。
[0031] 当θ=π/2时,tanθ不存在,此时的正向搜索步骤为:
[0032] 第一步,x坐标设为x=a1;第二步,y坐标自增1个像素;第三步,若(x,y)超出了图像M″的坐标范围,则点 正向搜索边界点结束,否则判断M″(x,y)是否为0,若不为0,则转入第二步继续计算,若为0,则记录点A=(a1,y-1),正向搜索边界点结束。
[0033] 反向搜索:
[0034] 当θ≠π/2时,反向搜索步骤为:
[0035] 第一步,x坐标设为x=a1;第二步,x坐标自减1个像素,并根据y=kx+b计算对应的y坐标;第三步,若(x,y)超出了图像M″的坐标范围,则点 反向搜索边界点结束,否则判断M″(x,y)是否为0,若不为0,则转入第二步继续计算,若为0,则记录点A=(x+1,k(x+1)+b),反向搜索边界点结束。
[0036] 当θ=π/2时,tanθ不存在,此时的反向搜索步骤为:
[0037] 第一步,x坐标设为x=a1;第二步,x坐标自减1个像素,并根据y=kx+b计算对应的y坐标;第三步,若(x,y)超出了图像M″的坐标范围,则点 反向搜索边界点结束,否则判断M″(x,y)是否为0,若不为0,则转入第二步继续计算,若为0,则记录点A=(x+1,k(x+1)+b),反向搜索边界点结束。
[0038] 所述的判断该连通区域边界点集合G所围成的区间是否小于最小菌落半径rmin所围成的区间,如果小于,则将连通区域边界点集合G所围成的区间在图像M″中所对应的点赋值为0,其步骤为:第一步,统计连通区域边界点集合G中所有的端点,计算其横坐标最大的像素差和纵坐标最大的像素差,选取二者最大值与 相比较;第二步,如果小于说明该连通区域所围成的正方形区间小于最小菌落半径rmin所围成的区间,则根
据边界点集合G中的最小横纵坐标xmin,ymin,最大横纵坐标xmax,xmax所围成的矩形区域,其端点为 (xmin,ymin),(xmax,ymin),(xmin,xmax)和(xmax,xmax),将图像M″所对应的区域内的点赋值为0.
[0039] 所述的根据连通区域边界点集合G,进行霍夫变换,从而得到边界点集合G所对应的最可能的圆,其中值rmax由参数交互设置模块设置,图像M″为p×q矩阵,num()为集合中的元素的个数,其步骤为:
[0040] 1.构造一个三维矩阵Hough,其维度为p×q×r,初始时矩阵Hough的所有元素都为0.
[0041] 2.当边界点集合G不为空时,从边界点集合G中取出一个点P,设其坐标为(x,y),执行如下操作:
[0042] 对于r=[0,1,2,…,1.3rmax](r为整数):
[0043] 对于θ=[0,π/12,2π/12,3π/12,…,11π/12]:
[0044] 计算a=x-rcosθ,b=x-rsinθ.
[0045] 如果0<a≤p并且0<b≤q,则Hough(a,b,r)=Hough(a,b,r)+1.
[0046] 3.取三维矩阵Hough中的最大元素值为N,若N≤max(2,num(G)/25),说明当前连通区域边界点不是圆形;否则,意味着当前边界点集合G所围成的区域为一个圆形,对于三维矩阵Hough中所有元素值大于0.7×N的坐标点(ai,bi,ri)组成的集合Hp,分别计算其在各自维度的坐标的平均值:a=∑ai/num(Hp),b=∑bi/num(Hp),r=∑ri/num(Hp),其中(ai,bi,ri)∈Hp,则该圆的圆心坐标为(a,b),半径为r.
[0047] 所述的判断该区域是否为所要求的圆形,如果是,则将当前的圆形信息保存在集合Sp中,并在图像M″中将该圆形区域覆盖掉,其步骤为:
[0048] 1.若当前边界点集合G所围成的区域为不是一个圆形,则对于集合G中的每个点(x,y),如果该点与其他点的最小距离小于2像素,则将M″(x,y),M″(x+1,y),M″(x,y+1)和M″(x+1,y+1)赋值为0;
[0049] 2.若当前边界点集合G所围成的区域为一个圆形,该圆的圆心坐标为(a,b),半径为r,则:如果r<rmin,意味着当前圆形区域过小,说明当前圆形区域内的目标不是要寻找的目标,则将图像M″的区域内对应于圆形区域坐标的所有值设为0;如果rmin<r<rmax,意味着当前圆形区域内的图像可能是要寻找的图像,则将图像M″的区域内对应于圆形区域坐标的所有值设为0,将(a,b,r)保存于已选定集合Sp中;如果半径r>rmax,意味着当前圆形区域内可能有多个待识别的圆形目标,将M″(a,b)赋值为0。
[0050] 所述的特征匹配模块,用来对图像分割模块所得到的圆的集合Sp进行特征匹配,将分割得到的圆形与使用者在参数交互设置模块中所选定的典型菌落样本picsample进行特征匹配,匹配成功的图像即为菌落图像,统计图像个数即可得到样本菌落个数。其步骤为:第一步,对于图像分割模块所得到的圆进行扩充,得到矩形区域集合Rp,从而保留待匹配图像的边界信息;第二步,将待匹配图像和典型菌落样本图像构成一个集合,分别对集合中的每一张图片提取ORB特征;第三步,将每一块样本图像与典型菌落样本图像进行特征点匹配,得到每一个待匹配图像与典型菌落样本图像之间的匹配点的个数;第四步,从参数交互设置模块中获得阈值,统计匹配特征点的个数高于阈值的样本图像,将这些图像构成一个集合,集合的元素个数即为样本菌落的个数,将包含匹配成功样本图像信息的集合传递给结果显示模块。
[0051] 所述的对于图像分割模块所得到的圆进行扩充,其步骤为:第一步,若圆的集合Sp不为 空,则从集合Sp中提取一个元素A,设为(a1,b1,r1),则该圆的圆心为(a1,b1);第二步,计算该圆的圆心与集合Sp中其他圆的圆心之间的欧氏距离,选取距离最小的元素B设为(a2,b2,r2);第三步,计算A与B之间的欧氏距离得 则点A的新半径为r1′=d×r1/(r1+r2)+10,若r1′计算结果不为整数,则只保留整数部分;第四步,将元素A所代表的圆形区域区域转化为正方形,对于(a,b,r)及新的半径r′,其扩展后的正方形区间为坐标(a-r′,b-r′),(a-r′,b+r′),(a+r′,b-r′)和(a+r′,b+r′)所围成的正方形区域,并将这四个点保存在矩形集合Rp中;第五步,将元素A从集合Sp中删除,若集合Sp为空,扩充过程结束,否则算法转至第一步。
[0052] 所述的将待匹配图像和典型菌落样本图像构成一个集合,分别对集合中的每一张图片提取ORB特征,其步骤为:第一步,对于矩形集合Rp中的每一个区间,设其坐标为(a1,b1),(a2,b3),(a3,b3),(a4,b4),在灰度图像Mgray中提取对应的区域内的灰度图像P,若矩形区域所对应的坐标超出了Mgray的范围,那么将超出的部分对应的灰度图像P上的像素值设为0,从而得到了矩形集合Rp中所有的元素对应的灰度图像集合;第二步,根据典型菌落样本picsample正方形的边长,将灰度图像集合中的所有的图像进行放大或缩小,使缩放之后的图片与picsample为相同大小;第三步,对于缩放之后的图片和picsample,分别提取其ORB特征,对于每一个图像提取若干个ORB特征,每个ORB特征为一组字符串向量,其元素为[0,1],所有ORB特征向量的长度相同,为了节省空间,我们可以让字符串向量组成的二进制编码的每一位对应ORB特征的一个元素。从已知灰度图像中提取ORB特征,已经有成熟的算法,这里不再赘述。
[0053] 所述的将每一块样本图像与典型菌落样本图像进行特征点匹配,其步骤为:对于每一个样本图像所提取的ORB特征集合,用VI表示,则VI(i)表示当前样本的第i个ORB特征,典型菌落样本图像的ORB特征集合,用VP表示,则VP(i)表示当前样本的第i个ORB特征:
[0054] 对于VI中的每一个特征,用VI(i)表示:
[0055] 计算出特征VI(i)与集合VP中的每一个特征(用VP(j)表示)的距离。
[0056] 若同时满足1.最小距离小于阈值(通常为50);2.最小距离<0.8×第二小距离意味着匹配成功,将匹配成功的数量加1.
[0057] 该方法结束。
[0058] 所述的计算特征VI(i)与特征VP(j)的距离,其步骤如下:由于VI(i)和VP(j)为两个长度相等的向量,向量上的每一位取值为0或1,所以,从VI(i)的第0位和VP(j)的第0位开始作对比,比较两个向量对应位的值是否相同,统计两个向量中对应元素不相同的位置个数,即为两个特征的距离。
[0059] 所示的结果显示模块,接收来自于特征匹配模块传递来的包含匹配成功样本图像信息的集合Vset。对于该集合的每一个特征匹配模块,在读入的原始图像M上按照集合中的每一个样本图像的位置信息绘制一个矩形图案,该位置信息即为在图像M″上所对应的矩形区域,若矩形位置超过原始图像M的边界,则超出边界部分不画出。并在图像外侧显示集合Vset的个数。考虑到可能出现的误判操作,允许用户通过鼠标操作在图像上添加、删除所绘制的矩形图案,并在集合Vset中进行对应的修改:
[0060] 1.对于添加操作,使用者在认为漏判的菌落图案上操作鼠标,则绘制一个以鼠标操作位 置的坐标为中心,以(rmax+rmin)/2为边长的矩形,同时,将该区域信息加入集合Vset中。允许用户对该矩形框进行平移、放大缩小操作,在移动矩形框的同时,修改集合Vset中对应的矩形框信息。
[0061] 2.对于删除操作,使用者在认为错判的菌落上的矩形框内操作鼠标,则取得当前鼠标操作位置,则对于集合Vset中的所有元素的区域信息,如果当前鼠标位置落入该元素的矩形框内,则从屏幕上删掉该矩形框,并从集合Vset中删掉该对应的元素信息,判断点(a,b)是否落入矩形框内的方法为:对于矩形框的边界点(a1,b1),(a2,b1),(a1,b2)和(a2,b2),如果a1<a<a2,并且b1<b<b2,则意味着点(a,b)落入矩形框中。
[0062] 所述的参数交互设置模块,其作用是与用户交互,得到所需要的参数信息。分别包括:
[0063] 1.指定典型菌落的样本图像时,第一步,由使用者在原始图像上进行操作,选定一个圆形区域,设其圆心坐标为(a,b),半径为r.第二步,对于圆心坐标为(a,b),半径为r的圆形区域的所有像素点,求其对应的灰度值的平均值,设该值为Ms.第三步,将该圆形区域扩展成正方形区域,该正方形是由如下四个端点围成的:(a-r,b-r),(a+r,b-r),(a-r,b+r)和gray(a+r,b+r).将图像M 中对于坐标(a-r,b-r),(a+r,b-r),(a-r,b+r)和(a+r,b+r)所围成的区域内的图像复制出来,作为典型菌落的样本图像picsample.
[0064] 2.指定典型菌落的背景图像时,第一步,由使用者在图像上进行操作,选定一个矩形区域,该矩形区域长宽可以由使用者调节大小;第二步,对于使用者所指定的由(a1,b1),(a2,b2),(a3,b3)和(a4,b4)围成的矩形区域内的所有像素点,求其对应的灰度值的平均值,设该值为Mb,若|Ms-Mb|<20,意味着背景区域与典型菌落的样本图像过于相似,要求使用者重新划定背景图像区域。
[0065] 3.指定最小菌落半径rmin和最大菌落半径rmax,第一步,指定最小菌落半径rmin时,首先,由使用者输入一个最小菌落半径rmin,并在屏幕上绘制一个半径为rmin的圆形区域,由使用者与屏幕上的菌落图案作对比,并调整rmin的大小;第二步,指定指定最大菌落半径rmax时,首先,由使用者输入一个最大菌落半径rmax,并在屏幕上绘制一个半径为rmax的圆形区域,然后,由使用者与屏幕上的菌落图案作对比,并调整rmax的大小。
[0066] 4.设定特征匹配模块的关于匹配成功特征点个数的阈值。第一步,接收来自特征匹配模块所计算得到的待匹配图像和每一个图像与典型菌落图像的特征匹配点个数,将所有图片显示给使用者;第二步,由使用者选择一张图片,这张图片上的匹配成功特征点个数即为阈值。若期望得到较多的匹配图像,可以将图像按照特征匹配点个数小到大排序,由使用者选择第一个菌落图片,则阈值即为该图片对应的成功特征点个数减一;若期望得到较准确的匹配图像,则可以将图像按照特征匹配点个数大到小排序,由使用者选择第一个非菌落图片,则阈值即为该图片对应的成功特征点个数。
[0067] 将1,2中指定的Ms和Mb传递给边缘滤除模块,将1中指定的典型菌落的样本图像picsample传递给特征匹配模块,将3中指定的最小菌落半径rmin和最大菌落半径rmax传递给分割模块,将4中所指定的阈值传递给特征匹配模块。
[0068] 本发明的有益效果是,依靠计算机视觉领域的图像处理方法,能够智能的统计出图 像中菌落的个数,从而将实验员从费时费力的劳动中解脱出来;本发明首先使用图像分割方法对图像中的菌落进行分割,然后使用了特征点匹配方法对分割所得的图像进行筛选,减少了使用单一方法可能出现的误识别漏识别。

附图说明

[0069] 图1是本发明的功能流程图;
[0070] 图2是本发明整体的功能模块及其相互关系框图;
[0071] 图3是本发明图像分割模块的流程图;
[0072] 图4是本发明所述的通过P点的直线分别在θ=[0,π/4,2π/4,3π/4]时与圆形边界的交点示意图;
[0073] 图5是本发明所述的圆心坐标为(a,b),半径为r的圆以及其对于的正方形区域的示意图;

具体实施方式

[0074] 下面结合附图对本发明作进一步的说明。
[0075] 所述的一种智能菌落计数方法,其功能流程图如图1所示,其模块之间的相互关系如图2所示。
[0076] 下面提供一个具体实施例对本发明所述的一种智能菌落计数方法的具体过程进行说明:
[0077] 实施例1:
[0078] 本实施例实现了一种智能菌落计数方法的具体实施过程。
[0079] 一、图像采集模块,用于接收含有带统计菌落的图像,所接收的图像可以是直接调用摄像头后采集到的图像,也可以是将已经拍摄到的图像导入到系统中,该图像通常为灰度图像M,若读入的图像为彩色RGB图像Mc,则需要将彩色图像Mc转换为灰度图像,并传递给边缘滤除模块。
[0080] 所述的将彩色图像Mc转换成灰度图像M的变换方法为:对于原始彩色图片Mc上的每一个像素点所对应的R,G,B分量,不失一般性的用i和j表示其坐标,则该像素点对应在M上的灰度值为M(i,j)=0.3×B(i,j)+0.59×G(i,j)+0.11×R(i,j),其中M(i,j)为整数,若所得结果为小数的话,仅取其整数部分,从而得到彩色图像Mc所对应的灰度图像M。
[0081] 图像采集模块的处理过程结束。
[0082] 二、边缘滤除模块,接收图像采集模块传递过来的图像M,其步骤为:第一步将将图像M显示在屏幕上;第二步,由使用者划定合适的培养皿边界,对于不含边界的图像,使用者可以直接选择跳过该模块,直接将图像M传递给二值化处理模块;第三步,对于存在培养皿边界的图像,在图像M上浮动显示一个圆形区域,由使用者拖动培养皿进行移动、放大、缩小或调整为椭圆形以适应图片中的培养皿形状,从而使圆形(或被使用者调整为椭圆形以适应照相产生的形变)区域内包含图像中的全部菌落;第四步,将圆形区域外的图像的所有像素点设为 NaN,即对于圆形区域外的任一点(a,b),M(a,b)=NaN.第五步,接收由参数交互s b s b设置模块传递来的菌落样本点灰度值M和背景点灰度值M .第六步,根据M和M对区域外的点进行填充数值;最后,将填充后的图像M传递给二值化处理模块。
[0083] 所述的根据Ms和Mb对区域外的点进行填充数值,其方法如下:对于图像N中的值为NaN的像素点进行赋值,由于值为NaN的点为背景点,所以,若Mb>Ms,则对于所有值为NaN,设b s值为255;若M<M,则对于所有值为NaN,设值为0.
[0084] 边缘滤除模块的处理过程结束。
[0085] 三、所述的二值化处理模块接收来自于边缘滤除模块所传递过来的去除边界的图像M,其步骤为:第一步,对图像M进行滤波,得到滤波后的图像M′;第二步,建立基于图片Mgray的灰度直方图,由于图片Mgray的每个点的取值范围为[0,255],所以对于i∈[0,255],计算其在图片Mgray中灰度点为i的个数ni,然后设图像Mgray为p行q列,对于每个ni,计算Pi=ni/(p×q).第三步,判断以Pi(i∈[0,255])组成的向量中存在峰值的个数,峰值的判断方法为,对于Pi(i∈[1,254]),如果Pi-1<pi并且Pi+1<pi则此刻的i即为一个峰值,统计出在i∈[1,254]中所有峰值的个数;第四步,若峰值个数为2,或者重复次数大于1000次,进入第五步,否则,则对Pi(i∈[0,255])进行平滑,平滑的方法为:赋值P′1=(P1+P2)/2,P′i=(Pi-1+Pi+Pi+1)/3,P′255=(P254+P255)/2,计算结束后,Pi=P′i(i∈[0,255]),进入第三步;第五步,若重复次数大于1000后峰值个数仍不为2,说明该图Mgray不是双峰结构,对其进行二值化赋值,若峰值个数为2,则说明Mgray是双峰结构,对应的两个峰值分别为u1和u1,对其进行二值化赋值。并将二值化图像M′bin传递给图像分割模块。
[0086] 所述的对图像M进行滤波,得到滤波后的图像M′,设图像M为p行q列,其步骤如下:首先对于图像M上的每个点M(a,b),进行如下处理:1,如果M(a,b)为图像的角点,其计算方法为:M′(1,1)=[M(1,1)+M(1,2)+M(2,1)+M(2,2)]/4,M′(1,q)=[M(1,q)+M(2,q)+M(1,q-
1)+M(2,q-1)]/4,M′(p,1)=[M(p,1)+M(p,2)+M(p-1,1)+M(p-1,2)]/4,M′(p,q)=[M(p,q)+M(p-1,q)+M(p,q-1)+M(p-1,q-1)]/4(设图像的(1,1)点为左上角的点);2,排除1中的点,如果M(a,b)为图像的边界点,其计算方法为:若a=1,则M′(1,b)=[M(1,b-1)+M(1,b)+M(1,b+
1)+M(2,b-1)+M(2,b)+M(2,b+1)]/6,若a=p,则M′(p,b)=[M(p,b-1)+M(p,b)+M(p,b+1)+M(p-1,b-1)+M(p-1,b)+M(p-1,b+1)]/6,若b=1,则M′(a,1)=[M(a-1,1)+M(a,1)+M(a+1,1)+M(a-1,2)+M(a,2)+M(a+1,2)]/6,若b=q,则M′(a,q)=M[(a-1,q)+M(a,q)+M(a+1,q)+M(a-
1,q-1)+M(a,q-1)+M(a+1,q-1)]/6;3.排除1,2中的点,其余点的计算方法为M′(a,b)=[M(a-1,b-1)+M(a,b-1)+M(a+1,b-1)+M(a-1,b)+M(a,b)+M(a+1,b)+M(a-1,b+1)+M(a,b+1)+M(a+1,b+1)]/9。以上结果若不为整数,则保留整数部分,从而得到M对应的滤波图像M′.[0087] 所述的对于图Mgray不是双峰结构,对其进行二值化赋值的方法可以简单的比较Ms和Mb,
[0088] 1.若Mb>Ms,对于Mgray上的每个点(x,y),赋值的公式为:
[0089] 如果Mgray(x,y)<(Mb+Ms)/2,Mbin(x,y)=1,否则Mbin(x,y)=0;
[0090] 2.若Mb<Ms,对于Mgray上的每个点(x,y),赋值的公式为:
[0091] 如果Mgray(x,y)>(Mb+Ms)/2,Mbin(x,y)=1,否则Mbin(x,y)=0;
[0092] 所述的对于图Mgray是双峰结构,对其进行二值化赋值的方法为:第一步,找到双峰之间的最小值,即对于Pi(i∈[u1,u2])寻找使Pi取值最小的i,此刻的i即为阈值,设i=μ。第二步,对于Mgray上的每个点(x,y):
[0093] 1.若Mb>Ms,则赋值的公式为:
[0094] 如果Mgray(x,y)<μ,Mbin(x,y)=1,否则Mbin(x,y)=0;
[0095] 2.若Mb<Ms,赋值的公式为:
[0096] 如果Mgray(x,y)>μ,Mbin(x,y)=1,否则Mbin(x,y)=0;
[0097] 边缘滤除模块的处理过程结束。
[0098] 四、图像分割模块,其流程图如图3所示。其步骤为:第一步,对二值化图像Mbin进行腐蚀膨胀(开运算)处理,得到处理后的图像M″;第二步,接收由参数交互设置模块设置的最小菌落半径rmin和最大菌落半径rmax,根据图像M″寻找图像中所有的圆形区域;第三步,根据选定的圆形区域对滤波后的图像M′进行分割,将分割的结果Sp传递给特征匹配模块。
[0099] 所述的对二值化图像Mbin进行腐蚀膨胀(开运算)处理,其方法如下:第一步,对于M′bin上的所有点,选取当前点(a,b)及以当前点周围的8个点所构成的3×3区间内的9个点,若都为1,则 否则, 对于边界点,会出现不够9个点的情况,那么只需考虑3×3区间内存在的点即可;第二步,对于 上的所有点,选取当前点(a,b)及以当前点周围的8个点所构成的3×3区间内的9个点,若都为0,则M″(a,b)=0,否则,M″(a,b)=1.对于边界点,会出现不够9个点的情况,那么只需考虑3×3区间内存在的点即可。从而得到了腐蚀膨胀处理后的二值化图像M″。
[0100] 所述的根据图像M′′寻找图像中所有的圆形区域,其步骤如下:第一步,在图像M″中随机寻找一个值为1并且没有被选中过的点,设该点P为(x,y),构造出P点所对应的连通区域边界点集合G;第二步,判断该连通区域边界点集合G所围成的区间是否小于最小菌落半径rmin所围成的区间,如果小于,则将连通区域边界点集合G所围成的区间在图像M″中所对应的点赋值为0,算法跳转到第一步;第三步,根据连通区域边界点集合G,进行霍夫变换,从而得到边界点集合G所对应的最可能的圆;第四步,判断该区域是否为所要求的圆形,如果是,则将当前的圆形信息保存在集合Sp中,并在图像M″中将该圆形区域覆盖掉;第五步,判断图像M″是否为空,如果不为空,转到第一步。
[0101] 所述的构造出P点所对应的连通区域边界点集合G其步骤为:第一步,设P坐标为(x,y),i=0,判断通过P点角度为θ的直线在图像M″上划过的全为1的区间,记录该区间的两个端点,并将这两个端点的集合放入集合G(对于重复的端点,只记录一次),其中θ=0,θ=π/4,θ=2π/4和θ=3π/4,此刻共有四条线,每条线有两个焦点,共8个端点,如图4所示;第二步,设i=3,对于θ=[π/2i,3π/2i,5π/2i,…,(2i-1)π/2i](即[1,2i-1]之间所有的奇数乘以π/2i),计算通过P点角度为θ的直线在图像M″上划过的全为1的区间,记录该区间的所有端点;第三步,若第二步中所记录的所有端点中,至少存在一个端点,该端点在集合G中不存在,则将这些不存在的端点加入到集合G中,赋值i=i+1,算法转到第二步继续计算;若第二步中所记录的所有端点在集合G中都存在,意味着不需要再细分θ,此时已经构造出点所对应的连通区域边界点集合G。
[0102] 所述的判断通过P点角度为θ的直线在图像M″上划过的全为1的区间,记录该区间的两 个端点,对于角度为θ,其步骤为:设P点为(a1,b1),计算k=tanθ,b=b1-a1×tanθ,参数k和b为通过P点的直线方程y=kx+b上所对应的参数,然后分别进行正向搜索和反向搜索。
[0103] 正向搜索:
[0104] 当θ≠π/2时,正向搜索步骤为:
[0105] 第一步,x坐标设为x=a1;第二步,x坐标自增1个像素,并根据y=kx+b计算对应的y坐标;第三步,若(x,y)超出了图像M″的坐标范围,则点 正向搜索边界点结束,否则判断M″(x,y)是否为0,若不为0,则转入第二步继续计算,若为0,则记录点A=(x-1,k(x-1)+b),正向搜索边界点结束。
[0106] 当θ=π/2时,tanθ不存在,此时的正向搜索步骤为:
[0107] 第一步,x坐标设为x=a1;第二步,y坐标自增1个像素;第三步,若(x,y)超出了图像M″的坐标范围,则点 正向搜索边界点结束,否则判断M″(x,y)是否为0,若不为0,则转入第二步继续计算,若为0,则记录点A=(a1,y-1),正向搜索边界点结束。
[0108] 反向搜索:
[0109] 当θ≠π/2时,反向搜索步骤为:
[0110] 第一步,x坐标设为x=a1;第二步,x坐标自减1个像素,并根据y=kx+b计算对应的y坐标;第三步,若(x,y)超出了图像M′′的坐标范围,则点 反向搜索边界点结束,否则判断M″(x,y)是否为0,若不为0,则转入第二步继续计算,若为0,则记录点A=(x+1,k(x+1)+b),反向搜索边界点结束。
[0111] 当θ=π/2时,tanθ不存在,此时的反向搜索步骤为:
[0112] 第一步,x坐标设为x=a1;第二步,x坐标自减1个像素,并根据y=kx+b计算对应的y坐标;第三步,若(x,y)超出了图像M″的坐标范围,则点 反向搜索边界点结束,否则判断M″(x,y)是否为0,若不为0,则转入第二步继续计算,若为0,则记录点A=(x+1,k(x+1)+b),反向搜索边界点结束。
[0113] 所述的判断该连通区域边界点集合G所围成的区间是否小于最小菌落半径rmin所围成的区间,如果小于,则将连通区域边界点集合G所围成的区间在图像M″中所对应的点赋值为0,其步骤为:第一步,统计连通区域边界点集合G中所有的端点,计算其横坐标最大的像素差和纵坐标最大的像素差,选取二者最大值与 相比较;第二步,如果小于说明该连通区域所围成的正方形区间小于最小菌落半径rmin所围成的区间,则根
据边界点集合G中的最小横纵坐标xmin,ymin,最大横纵坐标xmax,xmax所围成的矩形区域,其端点为(xmin,ymin),(xmax,ymin),(xmin,xmax)和(xmax,xmax),将图像M″所对应的区域内的点赋值为
0.
[0114] 所述的根据连通区域边界点集合G,进行霍夫变换,从而得到边界点集合G所对应的最可能的圆,其中值rmax由参数交互设置模块设置,图像M″为p×q矩阵,num()为集合中的元素的个数,其步骤为:
[0115] 1.构造一个三维矩阵Hough,其维度为p×q×r,初始时矩阵Hough的所有元素都为0.
[0116] 2.当边界点集合G不为空时,从边界点集合G中取出一个点P,设其坐标为(x,y),执行如下操作:
[0117] 对于r=[0,1,2,…,1.3rmax](r为整数):
[0118] 对于θ=[0,π/12,2π/12,3π/12,…,11π/12]:
[0119] 计算a=x-rcosθ,b=x-rsinθ.
[0120] 如果0<a≤p并且0<b≤q,则Hough(a,b,r)=Hough(a,b,r)+1.
[0121] 3.取三维矩阵Hough中的最大元素值为N,若N≤max(2,num(G)/25),说明当前连通区域边界点不是圆形;否则,意味着当前边界点集合G所围成的区域为一个圆形,对于三维矩阵Hough中所有元素值大于0.7×N的坐标点(ai,bi,ri)组成的集合Hp,分别计算其在各自维度的坐标的平均值:a=∑ai/num(Hp),b=∑bi/num(Hp),r=∑ri/num(Hp),其中(ai,bi,ri)∈Hp,则该圆的圆心坐标为(a,b),半径为r.
[0122] 所述的判断该区域是否为所要求的圆形,如果是,则将当前的圆形信息保存在集合Sp中,并在图像M″中将该圆形区域覆盖掉,其步骤为:
[0123] 1.若当前边界点集合G所围成的区域为不是一个圆形,则对于集合G中的每个点(x,y),如果该点与其他点的最小距离小于2像素,则将M″(x,y),M″(x+1,y),M″(x,y+1)和M″(x+1,y+1)赋值为0;
[0124] 2.若当前边界点集合G所围成的区域为一个圆形,该圆的圆心坐标为(a,b),半径为r,则:如果r<rmin,意味着当前圆形区域过小,说明当前圆形区域内的目标不是要寻找的目标,则将图像M″的区域内对应于圆形区域坐标的所有值设为0;如果rmin<r<rmax,意味着当前圆形区域内的图像可能是要寻找的图像,则将图像M″的区域内对应于圆形区域坐标的所有值设为0,将(a,b,r)保存于已选定集合Sp中;如果半径r>rmax,意味着当前圆形区域内可能有多个待识别的圆形目标,将M″(a,b)赋值为0。
[0125] 图像分割模块的处理过程结束。
[0126] 五、特征匹配模块,用来对图像分割模块所得到的圆的集合Sp进行特征匹配,将分割得到的圆形与使用者在参数交互设置模块中所选定的典型菌落样本picsample进行特征匹配,匹配成功的图像即为菌落图像,统计图像个数即可得到样本菌落个数。其步骤为:第一步,对于图像分割模块所得到的圆进行扩充,得到矩形区域集合Rp,从而保留待匹配图像的边界信息;第二步,将待匹配图像和典型菌落样本图像构成一个集合,分别对集合中的每一张图片提取ORB特征;第三步,将每一块样本图像与典型菌落样本图像进行特征点匹配,得到每一个待匹配图像与典型菌落样本图像之间的匹配点的个数;第四步,从参数交互设置模块中获得阈值,统计匹配特征点的个数高于阈值的样本图像,将这些图像构成一个集合,集合的元素个数即为样本菌落的个数,将包含匹配成功样本图像信息的集合传递给结果显示模块。
[0127] 所述的对于图像分割模块所得到的圆进行扩充,其步骤为:第一步,若圆的集合Sp不为空,则从集合Sp中提取一个元素A,设为(a1,b1,r1),则该圆的圆心为(a1,b1);第二步,计算该圆的圆心与集合Sp中其他圆的圆心之间的欧氏距离,选取距离最小的元素B设为(a2,b2,r2);第三步,计算A与B之间的欧氏距离得 则点A的新半径为r1′=d×r1/(r1+r2)+10,若r1′计算结果不为整数,则只保留整数部分;第四步,将元素A所代表的圆形区域区域转化为正方形,对于(a,b,r)及新的半径r′,其扩展后的正方形区间为坐标(a-r′,b-r′),(a-r′,b+r′),(a+r′,b-r′)和(a+r′,b+r′)所围成的正方形区域,并将这四个点保存在矩形集合Rp中;第五步,将元素A从集合Sp中删除,若集合Sp为 空,扩充过程结束,否则算法转至第一步。
[0128] 所述的将待匹配图像和典型菌落样本图像构成一个集合,分别对集合中的每一张图片提取ORB特征,其步骤为:第一步,对于矩形集合Rp中的每一个区间,设其坐标为(a1,b1),(a2,b3),(a3,b3),(a4,b4),在灰度图像Mgray中提取对应的区域内的灰度图像P,若矩gray形区域所对应的坐标超出了M 的范围,那么将超出的部分对应的灰度图像P上的像素值设为0,从而得到了矩形集合Rp中所有的元素对应的灰度图像集合;第二步,根据典型菌落样本picsample正方形的边长,将灰度图像集合中的所有的图像进行放大或缩小,使缩放之后的图片与picsample为相同大小;第三步,对于缩放之后的图片和picsample,分别提取其ORB特征,对于每一个图像提取若干个ORB特征,每个ORB特征为一组字符串向量,其元素为[0,1],所有ORB特征向量的长度相同,为了节省空间,我们可以让字符串向量组成的二进制编码的每一位对应ORB特征的一个元素。从已知灰度图像中提取ORB特征,已经有成熟的算法,这里不再赘述。
[0129] 所述的将每一块样本图像与典型菌落样本图像进行特征点匹配,其步骤为:对于每一个样本图像所提取的ORB特征集合,用VI表示,则VI(i)表示当前样本的第i个ORB特征,典型菌落样本图像的ORB特征集合,用VP表示,则VP(i)表示当前样本的第i个ORB特征:
[0130] 对于VI中的每一个特征,用VI(i)表示:
[0131] 计算出特征VI(i)与集合VP中的每一个特征(用VP(j)表示)的距离。
[0132] 若同时满足1.最小距离小于阈值(通常为50);2.最小距离<0.8×第二小距离意味着匹配成功,将匹配成功的数量加1.
[0133] 该方法结束。
[0134] 所述的计算特征VI(i)与特征VP(j)的距离,其步骤如下:由于VI(i)和VP(j)为两个长度相等的向量,向量上的每一位取值为0或1,所以,从VI(i)的第0位和VP(j)的第0位开始作对比,比较两个向量对应位的值是否相同,统计两个向量中对应元素不相同的位置个数,即为两个特征的距离。
[0135] 特征匹配模块的处理过程结束。
[0136] 六、结果显示模块,接收来自于特征匹配模块传递来的包含匹配成功样本图像信息的集合Vset。对于该集合的每一个特征匹配模块,在读入的原始图像M上按照集合中的每一个样本图像的位置信息绘制一个矩形图案,该位置信息即为在图像M″上所对应的矩形区域,若矩形位置超过原始图像M的边界,则超出边界部分不画出。并在图像外侧显示集合Vset的个数。考虑到可能出现的误判操作,允许用户通过鼠标操作在图像上添加、删除所绘制的矩形图案,并在集合Vset中进行对应的修改:
[0137] 1.对于添加操作,使用者在认为漏判的菌落图案上操作鼠标,则绘制一个以鼠标操作位置的坐标为中心,以(rmax+rmin)/2为边长的矩形,同时,将该区域信息加入集合Vset中。允许用户对该矩形框进行平移、放大缩小操作,在移动矩形框的同时,修改集合Vset中对应的矩形框信息。
[0138] 2.对于删除操作,使用者在认为错判的菌落上的矩形框内操作鼠标,则取得当前鼠标操作位置,则对于集合Vset中的所有元素的区域信息,如果当前鼠标位置落入该元素的矩形框内,则从屏幕上删掉该矩形框,并从集合Vset中删掉该对应的元素信息,判断点(a,b)是否落 入矩形框内的方法为:对于矩形框的边界点(a1,b1),(a2,b1),(a1,b2)和(a2,b2),如果a1<a<a2,并且b1<b<b2,则意味着点(a,b)落入矩形框中。
[0139] 结果显示模块的处理过程结束。
[0140] 所述的参数交互设置模块,其作用是与用户交互,得到所需要的参数信息。分别包括:
[0141] 1.指定典型菌落的样本图像时,第一步,由使用者在原始图像上进行操作,选定一个圆形区域,设其圆心坐标为(a,b),半径为r.第二步,对于圆心坐标为(a,b),半径为r的圆s形区域的所有像素点,求其对应的灰度值的平均值,设该值为M .第三步,将该圆形区域扩展成正方形区域,如图5所示,,该正方形是由如下四个端点围成的:(a-r,b-r),(a+r,b-r),(a-r,b+r)和(a+r,b+r).将图像Mgray中对于坐标(a-r,b-r),(a+r,b-r),(a-r,b+r)和(a+r,b+r)所围成的区域内的图像复制出来,作为典型菌落的样本图像picsample.
[0142] 2.指定典型菌落的背景图像时,第一步,由使用者在图像上进行操作,选定一个矩形区域,该矩形区域长宽可以由使用者调节大小;第二步,对于使用者所指定的由(a1,b1),(a2,b2),(a3,b3)和(a4,b4)围成的矩形区域内的所有像素点,求其对应的灰度值的平均值,设该值为Mb,若|Ms-Mb|<20,意味着背景区域与典型菌落的样本图像过于相似,要求使用者重新划定背景图像区域。
[0143] 3.指定最小菌落半径rmin和最大菌落半径rmax,第一步,指定最小菌落半径rmin时,首先,由使用者输入一个最小菌落半径rmin,并在屏幕上绘制一个半径为rmin的圆形区域,由使用者与屏幕上的菌落图案作对比,并调整rmin的大小;第二步,指定指定最大菌落半径rmax时,首先,由使用者输入一个最大菌落半径rmax,并在屏幕上绘制一个半径为rmax的圆形区域,
[0144] 然后,由使用者与屏幕上的菌落图案作对比,并调整rmax的大小。
[0145] 4.设定特征匹配模块的关于匹配成功特征点个数的阈值。第一步,接收来自特征匹配模块所计算得到的待匹配图像和每一个图像与典型菌落图像的特征匹配点个数,将所有图片显示给使用者;第二步,由使用者选择一张图片,这张图片上的匹配成功特征点个数即为阈值。若期望得到较多的匹配图像,可以将图像按照特征匹配点个数小到大排序,由使用者选择第一个菌落图片,则阈值即为该图片对应的成功特征点个数减一;若期望得到较准确的匹配图像,则可以将图像按照特征匹配点个数大到小排序,由使用者选择第一个非菌落图片,则阈值即为该图片对应的成功特征点个数。
[0146] 将1,2中指定的Ms和Mb传递给边缘滤除模块,将1中指定的典型菌落的样本图像picsample传递给特征匹配模块,将3中指定的最小菌落半径rmin和最大菌落半径rmax传递给分割模块,将4中所指定的阈值传递给特征匹配模块。