一种基于机器视觉的标准目标计数方法与流程

文档序号:29047918发布日期:2022-02-25 22:44阅读:484来源:国知局
一种基于机器视觉的标准目标计数方法与流程

1.本发明涉及一种基于机器视觉的标准目标计数方法。


背景技术:

2.目前,在进行药盒识别时,药盒可能会多个叠加后经过识别装置,需要对叠加在一起的药盒的数量进行计数,目前传统的计数方法,一般需要将药盒的尺寸数据预先存储在系统中,需要采用机器学习方法,在多个药盒重叠时调用相应药盒的尺寸进行数量计算,需要大量的数据支撑,没有经过预先存储的药盒尺寸无法完成计数。


技术实现要素:

3.本发明的目的是克服现有技术的缺陷,提供一种基于机器视觉的标准目标计数方法,基于对标准目标提取方法基础之上,对输入图像先做了矫正,再利用直线检测手段来通过图像基础处理计算出标准目标数量,本发明的标准目标计数方法未用到传统的机器学习方法,节省了算力,且计数结果准确度高。
4.实现上述目的的技术方案是:一种基于机器视觉的标准目标计数方法,包括以下步骤:
5.s1,图像预处理步骤:对输入的药盒图片进行预处理,分为四步:首先将药盒图片转换为灰度图;然后对灰度图进行高斯滤波,通过高斯滤波在过滤噪声点的同时提取图像特征;接着采用标准目标提取方法对经过高斯滤波处理的药盒图像进行矫正;最后调整矫正后的标准目标的大小;
6.s2,直线检测步骤:使用sobel算子分别计算水平方向和竖直方向的图像梯度并归一化,再进行canny滤波去除照片中细小的噪点;然后采用大迭代次数的开闭运算,使图像中置信度高的直线边加粗加长直至贯穿整张药盒图片,而置信度低的直线则不会贯穿或直接被丢弃;最后将水平方向和竖直方向得到的结果图执行按位或操作合成一张图;
7.s3,数量计算步骤:在经过直线检测步骤的药盒图片找出像素由深变浅或由浅变深的分界,计算出直线条数,进而得到标准目标药盒的数量;直线数量计算分为横向和纵向直线数量计算,而每一个方向又在不同宽度或高度处多次计算保留数量的最小值;
8.选取阈值为i且定义三个列表来存储三类点:第一类点本身灰度值大于i而其左边像素灰度值小于i-1,理解为由黑色进入白色的点;第二类点本身灰度值小于i-1 而其左边的像素灰度值大于i,理解为由白色进入黑色的点;第三类点在求出前两类点的情况下用于计算并存储它们的中点;设置计数器count记录检测到的直线数量,每当扫描到从黑到白的点时,count值自增;
9.当扫描完所有像素后,根据从黑到白的像素位置和从白到黑的像素位置计算中点并存储;判断此时是否有直线漏检,若count小于2说明有直线漏检,这时将直线条数设置为2;若中点超过一个,则计算两中点之间的距离从而算出测得的标准目标总宽度,标准目标总宽度与实际宽度做差,若绝对值大于阈值则说明有直线漏检,此时直线条数自增来补上
这条漏检的。
10.上述的一种基于机器视觉的标准目标计数方法,步骤s1具体包括以下流程:
11.s11,将药盒图片由bgr转化为灰度图;
12.s12,设置高斯标准差为1,根据标准差计算滤波器尺寸,接着生成高斯滤波核并归一化,最后运用该滤波核分别沿着x、y轴卷积,对灰度图进行高斯滤波,通过高斯滤波在过滤噪声点的同时提取图像特征;
13.s13,采用标准目标提取方法对药盒图像进行矫正,具体包括以下流程:
14.s131,canny边缘检测步骤:对经过高斯滤波处理的灰度图依次进行梯度大小和方向计算、非极大值抑制和双阈值筛选,精准地刻画药盒图片中全部边缘;
15.s132,开闭运算步骤:使用大迭代次数的开闭运算来处理canny边缘检测步骤中得到的药盒图片的边缘,首先使用大迭代次数的闭运算来消除药盒图片内部的纹理,将灰度图通过腐蚀膨胀转化为纯色的二值图,避免由于药盒内部纹理的错误识别而将药盒切割成两个的问题;接着依次使用开运算和中值滤波去闭运算过程中产生的噪点和毛边;
16.s133,找到面积最大的轮廓并用最小外接矩形拟合此轮廓:调用opencv的 findcontours接口追踪图中所有轮廓,计算轮廓面积,找到面积最大的轮廓求其最小外接矩形。将求得的最小外接矩形四个顶点返回,根据坐标重新排列后用红色直线连接矩形,求出矩形的长和宽为后续透视变换做准备;
17.s134,等比例透视变换步骤:以最小外接矩形的长宽计算得标准目标的长宽比,取数值大的那一条边设置为512像素,另一条边等比例缩放,在保证不发生形变的情况下提取出标准目标的长方形上表面,得到矫正后的药盒图片;
18.s14,将最小外接矩形形变成正方形,将矫正后的矫正后的药盒图片在上、下方向分别拓宽1/2矩形宽度,左、右方向分别拓宽1/2矩形长度,使得经过矫正后待处理部分的最小外接矩形位于拓宽后药盒图片的正中间,且最小外接矩形的长和宽一一对应地为拓宽后药盒图片的长和宽的一半。
19.上述的一种基于机器视觉的标准目标计数方法,s131,canny边缘检测步骤,具体包括以下流程:
20.首先,使用sobel算子计算经过高斯滤波处理的灰度图中水平方向和数值方向上像素梯度的大小和方向,在二维图像中分别使用x方向和y方向的sobel核进行滤波,再将它们平方值相加开根号得到像素梯度的大小;梯度值越大,则代表此处图像灰度变化越剧烈,此处极有可能是所要找的边缘;接着计算出像素梯度的方向;
21.然后通过非极大值抑制来选出像素的局部最大值,首先判断该像素梯度方向更靠近x方向还是y方向,接着用线性插值法计算权重代替亚像素,求出梯度的局部最大值,将不是局部最大值的像素灰度值置0;
22.最后进行双阈值筛选,设定高、低两个阈值,若梯度高于高阈值则标记为强边缘直接保留;若梯度低于低阈值则认为是伪边缘直接丢弃;若梯度位于两阈值之间则通过判断其与强边缘是否连通来决定取舍,若连通则标记为弱边缘点保留,若不连通则丢弃;实现精准地刻画药盒图片中全部边缘。
23.上述的一种基于机器视觉的标准目标计数方法,步骤s4中,进行纵向直线数量计算时,假设经过预处理后的正方形图像的宽度和高度为w,依照矫正后图片大小调整的规
则,标准目标所处的位置位于宽度1/4w至3/4w,高度1/4w至3/4w,选定一个高度,从宽度1/8w处遍历至宽度7/8w处,找出像素由深变浅或由浅变深的分界,计算出该高度处的纵向直线条数。
24.上述的一种基于机器视觉的标准目标计数方法,步骤s4中,分别取1/4高度和 3/4高度处,计算直线数量并取最小值。
25.本发明的基于机器视觉的标准目标计数方法,基于对标准目标提取方法基础之上,对输入图像先做了矫正,再利用直线检测手段来通过图像基础处理计算出标准目标数量,本发明的标准目标计数方法未用到传统的机器学习方法,节省了算力,且计数结果准确度高。
附图说明
26.图1为本发明的基于机器视觉的标准目标计数方法的流程图;
27.图2为直线检测步骤的流程图;
28.图3为直线检测后一张样本的结果图;
29.图4为三类点的定义示意图;
30.图5为数量计算步骤的流程图;
31.图6为标准目标数量计算板块主面板的结构示意图。
具体实施方式
32.为了使本技术领域的技术人员能更好地理解本发明的技术方案,下面结合附图对其具体实施方式进行详细地说明:
33.请参阅图1至图5,本发明的实施例,一种基于机器视觉的标准目标计数方法,包括以下步骤:
34.s1,图像预处理步骤:对输入的药盒图片进行预处理,分为四步:首先将药盒图片转换为灰度图;然后对灰度图进行高斯滤波,通过高斯滤波在过滤噪声点的同时提取图像特征;接着采用标准目标提取方法对经过高斯滤波处理的药盒图像进行矫正;最后调整矫正后的标准目标的大小;
35.s2,直线检测步骤:使用sobel算子分别计算水平方向和竖直方向的图像梯度并归一化,再进行canny滤波去除照片中细小的噪点;然后采用大迭代次数的开闭运算,使图像中置信度高的直线边加粗加长直至贯穿整张药盒图片,而置信度低的直线则不会贯穿或直接被丢弃;最后将水平方向和竖直方向得到的结果图执行按位或操作合成一张图;
36.s3,数量计算步骤:在经过直线检测步骤的药盒图片找出像素由深变浅或由浅变深的分界,计算出直线条数,进而得到标准目标药盒的数量;直线数量计算分为横向和纵向直线数量计算,而每一个方向又在不同宽度或高度处多次计算保留数量的最小值;
37.选取阈值为i且定义三个列表来存储三类点:第一类点本身灰度值大于i而其左边像素灰度值小于i-1,理解为由黑色进入白色的点;第二类点本身灰度值小于i-1 而其左边的像素灰度值大于i,理解为由白色进入黑色的点;第三类点在求出前两类点的情况下用于计算并存储它们的中点;设置计数器count记录检测到的直线数量,每当扫描到从黑到白的点时,count值自增;
38.当扫描完所有像素后,根据从黑到白的像素位置和从白到黑的像素位置计算中点并存储;判断此时是否有直线漏检,若count小于2说明有直线漏检,这时将直线条数设置为2;若中点超过一个,则计算两中点之间的距离从而算出测得的标准目标总宽度,标准目标总宽度与实际宽度做差,若绝对值大于阈值则说明有直线漏检,此时直线条数自增来补上这条漏检的。
39.s1图像预处理步骤,具体包括以下流程:
40.s11,将药盒图片由bgr转化为灰度图,转换公式为;
41.gray(i,j)=[r(i,j)+g(i,j)+b(i,j)]/3
[0042]
gray(i,j)=0.299*r(i,j)+0.587*g(i,j)+0.114*b(i,j)
[0043]
s12,一个大小为(2k+1)*(2k+1)的高斯滤波器各个元素的计算公式如下:
[0044]
h[i,j]=(1/(2*pi*sigma**2))*exp(-1/2*sigma**2((i-k-1)**2+(j-k-1)**2))
[0045]
设置高斯标准差为1,根据标准差计算滤波器尺寸,接着生成高斯滤波核并归一化,最后运用该滤波核分别沿着x、y轴卷积,对灰度图进行高斯滤波,通过高斯滤波在过滤噪声点的同时提取图像特征;
[0046]
s13,采用标准目标提取方法对药盒图像进行矫正,具体包括以下流程:
[0047]
s131,canny边缘检测步骤:canny边缘检测由高斯滤波、梯度大小和方向计算、非极大值抑制和双阈值筛选四部分组成,对经过高斯滤波处理的灰度图依次进行梯度大小和方向计算、非极大值抑制和双阈值筛选,精准地刻画药盒图片中全部边缘;具体包括以下流程:
[0048]
首先,使用sobel算子计算经过高斯滤波处理的灰度图中水平方向和数值方向上像素梯度的大小和方向,在二维图像中分别使用x方向和y方向的sobel核进行滤波,再将它们平方值相加开根号得到像素梯度的大小;梯度值越大,则代表此处图像灰度变化越剧烈,此处极有可能是所要找的边缘;接着计算出像素梯度的方向;根据输入图像的尺寸建立四张等大的空白图,分别用于保存x、y方向上的梯度值、梯度的幅值和梯度的方向。
[0049]
然后通过非极大值抑制来选出像素的局部最大值,首先判断该像素梯度方向更靠近x方向还是y方向,接着用线性插值法计算权重代替亚像素,求出梯度的局部最大值,将不是局部最大值的像素灰度值置0;
[0050]
最后进行双阈值筛选,设定高、低两个阈值,若梯度高于高阈值则标记为强边缘直接保留;若梯度低于低阈值则认为是伪边缘直接丢弃;若梯度位于两阈值之间则通过判断其与强边缘是否连通来决定取舍,若连通则标记为弱边缘点保留,若不连通则丢弃;实现精准地刻画药盒图片中全部边缘。
[0051]
s132,开闭运算步骤:使用大迭代次数的开闭运算来处理canny边缘检测步骤中得到的药盒图片的边缘,首先使用大迭代次数的闭运算来消除药盒图片内部的纹理,比如使用迭代次数为70次的闭运算来消除药盒图片内部的纹理,将灰度图通过腐蚀膨胀转化为纯色的二值图,避免由于药盒内部纹理的错误识别而将药盒切割成两个的问题;接着依次使用开运算和中值滤波去闭运算过程中产生的噪点和毛边;开闭运算中使用大迭代次数的膨胀和腐蚀操作处理图片得到了较好的效果。闭运算能够有效地消除标准目标内部纹理,解决了因为纹理而将标准目标误识别成多个矩形的问题;开运算和中值滤波去除了闭运算过程中产生的毛刺和小噪点。
[0052]
s133,找到面积最大的轮廓并用最小外接矩形拟合此轮廓:调用opencv的 findcontours接口追踪图中所有轮廓,计算轮廓面积,找到面积最大的轮廓求其最小外接矩形。将求得的最小外接矩形四个顶点返回,根据坐标重新排列后用红色直线连接矩形,求出矩形的长和宽为后续透视变换做准备;
[0053]
s134,等比例透视变换步骤:以最小外接矩形的长宽计算得标准目标的长宽比,取数值大的那一条边设置为512像素,另一条边等比例缩放,在保证不发生形变的情况下提取出标准目标的长方形上表面,得到矫正后的药盒图片;
[0054]
s14,将最小外接矩形形变成正方形,将矫正后的矫正后的药盒图片在上、下方向分别拓宽1/2矩形宽度,左、右方向分别拓宽1/2矩形长度,使得经过矫正后待处理部分的最小外接矩形位于拓宽后药盒图片的正中间,且最小外接矩形的长和宽一一对应地为拓宽后药盒图片的长和宽的一半。
[0055]
本发明的基于机器视觉的标准目标计数方法中标准目标数量计算主要依靠直线检测,所以最小外接矩形是否变形对结果没有影响。为了方便处理,将最小外接矩形形变成正方形后,将截取窗口分别在上下、左右拓展至最小外接矩形一条边长的一半。经过这四步预处理能够得到原图中经过矫正后的结果,形变后的最小外接矩形处于矫正图正中间,即从四分之一宽度至四分之三宽度、从四分之一高度至四分之三高度处。
[0056]
直线检测:
[0057]
sobel滤波器是图像处理和计算机视觉领域中较常用的滤波器之一,使用sobel 来分别计算图像两个方向上的梯度。sobel是离散的微分算子滤波器,可以用它计算梯度的近似值,它使用较小的离散数值对图像进行卷积,计算成本较低。
[0058]
sobel使用水平方向和竖直方向两个内核对原始图像进行卷积,其计算公式如下:
[0059][0060]
其中a表示原始图像,而3*3的矩阵则分别是两个方向的卷积核,*表示卷积操作,得到的gx是一张包含原图水平方向导数近似值的图像,同理gy则包含原图竖直方向导数的近似值。此时计算出的梯度有正有负,甚至有可能超过[0,255]的范围,我们需要对其归一化后才能得到在opencv中能正常现实的梯度图,而归一化也规范了计算过程,方便后续处理。
[0061]
对于高频变化,sobel计算出的梯度近似值较为粗糙,因此我们使用canny滤波器来进一步过滤细小噪声,从而得到更加优质的梯度图。此时已经获取到了每标准目标边缘的直线,为了剔除标准目标内部细小纹理和噪声对结果的影响,我们依旧使用大迭代次数的开闭运算。最后将水平方向和竖直方向得到的结果图执行按位或操作合成一张图。
[0062]
请参阅图2,直线检测中,使用sobel算子分别计算水平方向和竖直方向的图像梯度并归一化,再进行canny滤波去除照片中细小的噪点。最后设置大迭代次数的腐蚀膨胀操作,使图像中置信度高的直线边加粗加长直至贯穿整张图片,而置信度低的直线则不会贯穿或直接被丢弃。最后将水平方向和竖直方向得到的结果图执行按位或操作合成一张图。完成直线检测
[0063]
数量计算:
[0064]
请参阅图3,为了方便阐述数量计算的思想,选取一张样本直线检测后的结果作为示例,进行纵向直线数量计算时,假设经过预处理后的正方形图像的宽度和高度为w,依照矫正后图片大小调整的规则,标准目标所处的位置位于宽度1/4w至 3/4w,高度1/4w至3/4w,选定一个高度,从宽度1/8w处遍历至宽度7/8w处,找出像素由深变浅或由浅变深的分界,计算出该高度处的纵向直线条数。
[0065]
请参阅图4,截取了图3的一部分,选取阈值为i且定义三个列表来存储三类点:第一类点本身灰度值大于i而其左边像素灰度值小于i-1,可以近似地理解为由黑色进入白色的点;第二类点本身灰度值小于i-1而其左边的像素灰度值大于i,可以近似地理解为由白色进入黑色的点;第三类在求出前两类点的情况下用于计算并存储它们的中点。设置计数器count记录检测到的直线数量,每次遍历到第一类点时,count自增。
[0066]
在一标准目标的情况下,会检测出2条直线,在多标准目标的情况下则检测出超过两条,因此当count为0或1时说明有直线漏检,此时直接将count置为2,即认为此时标准目标数量为1.实验过程中发现,最左边的直线经常出现漏检的问题。接着解决这个问题:如果检测直线在两条以上,算出相邻两条(第0条和第1条之间)之间的距离step;根据已有的条数,如果是正确的话,算出整个所有标准目标的宽度;再用它应有的宽度(占了半个图像宽度w/2)减去这个宽度。如果这个差值大于某一个阈值,可以说明最左边的线应该是漏检了,这时count自增来补上这条线。
[0067]
经过上述步骤,在某一高度处纵向的直线检测就完成了。由于有的情况下会有噪声,置信度不高的直线不贯穿整个页面,为了确保置信率,我们需要取不同高度重复上述步骤,本文中分别取1/4高度和3/4高度处,计算直线数量并取最小值返回。请参阅图5,展示了直线数量计算算法的主要流程,上文中详细叙述了纵向的直线检测数量计算,横向的直线检测数量计算同理。
[0068]
数量计算分为横向和纵向,而每一个方向又在不同宽度或高度处多次计算保留数量的最小值。因此在这一节中只取一个高度的纵向直线检测代码为例,其他操作以此类推。
[0069]
分别计算三类点的数目并存储在三个数组中,每当扫描到从黑到白的像素时, count值自增。当扫描完所有像素后,根据从黑到白的像素位置和从白到黑的像素位置计算中点并存储。判断此时是否有直线漏检,若count小于两个说明有直线漏检,这时将直线数设置为2;若中点数超过一个,则计算两中点距离从而算出测得的标准目标总宽度,与实际宽度做差,若绝对值大于阈值则说明有直线漏检,此时直线数自增来补上这条漏检的。
[0070]
本发明的基于机器视觉的标准目标计数方法,一张图片处理的时间约为500至 550毫秒,这已经符合所设想的要求。本次测试使用数据集包含36张样本,其中计算错误的样本数为1张,正确率达到了97.22%。
[0071]
本发明的基于机器视觉的标准目标计数方法,调用了python的tkfiledialog库来实现算法可视化,可视化系统分为两个板块:标准目标提取和标准目标数量计算,两个板块功能相近,以标准目标数量计算为例展示,标准目标提取功能面板同理即可。标准目标数量计算板块主面板1如图6所示,其中包含三个按钮,分别为选择图像按钮11、计算按钮12和展示按钮13,实现了批量选择图片、计算标准目标数量、统计平均处理时间和展示处理结果等功能。选择图像按钮11,能够批量选取需要处理的图片,但需要保证图片命名中不含有

.’或

..’。计算按钮12,能唤起主函数对刚刚选择的图片执行标准目标数量计算算法,并能统
计图片的平均处理时间。展示结果按钮13,能将处理结果图以opencv窗口的形式展示出来,当我们选取多张图片批量处理时,可以通过按下任意键来控制不同图片处理结果的播放。
[0072]
本发明的基于机器视觉的标准目标计数方法,共分为三大步骤:图像预处理、直线检测和数量计算。图像预处理部分利用标准目标提取方法进行图片的矫正。接着向上下、左右分别拓宽1/2矩形宽度、长度,以保证经过矫正后待处理部分的最小外接矩形位于拓宽后图片的正中间,且最小外接矩形的长宽分别为拓宽后图片长宽的一半。这样做的目的是为了方便后续计算和操作。直线检测部分利用sobel算子计算图片梯度后再进行开闭运算,而数量计算则依赖于较为复杂的逻辑判断。
[0073]
综上所述,本发明的基于机器视觉的标准目标计数方法,基于对标准目标提取方法基础之上,对输入图像先做了矫正,再利用直线检测手段来通过图像基础处理计算出标准目标数量,本发明的标准目标计数方法未用到传统的机器学习方法,节省了算力,且计数结果准确度高,具有一定经济价值。
[0074]
本发明的基于机器视觉的标准目标计数方法中,直线检测受到的影响因素较多,出错的原因是会误将二维码区域的颜色突变识别成了边缘,经过开闭运算后当成了直线,这里提出两个新思路,这两个思路都需要医院提供标准目标的标准长宽高数据:第一种使用标准目标长宽比例计算;第二种需要标注标准目标类型,使用神经网络进行分类。
[0075]
通过标准目标提取算法能保持标准目标长宽比例不变,利用参照物进行尺寸测量,即可得出图片中多个标准目标的长宽高。与标准数据库内的长宽对比、矫正后,得到图片中矫正后的高度与标准高度相除即可得出标准目标数量。然而这一方法受到角度的影响较大,需要在具体研究中进行处理。同样的道理,对标准目标数据进行标注,在算法一开始就利用卷积神经网络进行分类,再与标准数据库中对应的数据比较,也是一种鲁棒性较高的算法。但由于用到神经网络,需要考虑算力成本等问题,必须根据输入数据规模、要求的响应时间、项目预算等诸多因素综合设计。
[0076]
由于医院提供的数据量较少,无法很好地测试算法的鲁棒性,有待后续更多数据加以更正,并尝试其他思路的算法设计与实验。
[0077]
本技术领域中的普通技术人员应当认识到,以上的实施例仅是用来说明本发明,而并非用作为对本发明的限定,只要在本发明的实质精神范围内,对以上所述实施例的变化、变型都将落在本发明的权利要求书范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1