CN114092499A - 一种药盒分割方法 - Google Patents
一种药盒分割方法 Download PDFInfo
- Publication number
- CN114092499A CN114092499A CN202111458605.1A CN202111458605A CN114092499A CN 114092499 A CN114092499 A CN 114092499A CN 202111458605 A CN202111458605 A CN 202111458605A CN 114092499 A CN114092499 A CN 114092499A
- Authority
- CN
- China
- Prior art keywords
- point
- pixel
- medicine box
- gradient
- image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 239000003814 drug Substances 0.000 title claims abstract description 79
- 238000000034 method Methods 0.000 title claims abstract description 67
- 229940079593 drug Drugs 0.000 title description 2
- 238000001914 filtration Methods 0.000 claims abstract description 40
- 238000012545 processing Methods 0.000 claims abstract description 17
- 238000003708 edge detection Methods 0.000 claims abstract description 15
- 238000007781 pre-processing Methods 0.000 claims abstract description 8
- 230000009466 transformation Effects 0.000 claims abstract description 7
- 238000004364 calculation method Methods 0.000 claims description 12
- 230000003628 erosive effect Effects 0.000 claims description 11
- 230000009191 jumping Effects 0.000 claims description 6
- 230000001629 suppression Effects 0.000 claims description 6
- 230000008859 change Effects 0.000 claims description 5
- 230000007797 corrosion Effects 0.000 claims description 5
- 238000005260 corrosion Methods 0.000 claims description 5
- 238000000605 extraction Methods 0.000 claims description 5
- 238000012216 screening Methods 0.000 claims description 4
- 230000011218 segmentation Effects 0.000 abstract description 15
- 239000011159 matrix material Substances 0.000 description 9
- 230000000694 effects Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000013138 pruning Methods 0.000 description 6
- 238000011981 development test Methods 0.000 description 5
- 230000010339 dilation Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000012360 testing method Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 238000003706 image smoothing Methods 0.000 description 1
- 230000005764 inhibitory process Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000877 morphologic effect Effects 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 230000035484 reaction time Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000009966 trimming Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/10—Segmentation; Edge detection
- G06T7/12—Edge-based segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/20—Image enhancement or restoration using local operators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/20—Image enhancement or restoration using local operators
- G06T5/30—Erosion or dilatation, e.g. thinning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/70—Denoising; Smoothing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/10—Segmentation; Edge detection
- G06T7/13—Edge detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/10—Segmentation; Edge detection
- G06T7/136—Segmentation; Edge detection involving thresholding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/10—Segmentation; Edge detection
- G06T7/155—Segmentation; Edge detection involving morphological operators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/60—Analysis of geometric attributes
- G06T7/62—Analysis of geometric attributes of area, perimeter, diameter or volume
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20024—Filtering details
- G06T2207/20032—Median filtering
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Geometry (AREA)
- Image Processing (AREA)
- Image Analysis (AREA)
Abstract
本发明公开了一种药盒分割方法,包括预处理步骤、Canny边缘检测步骤、开闭运算步骤、拟合面积最大轮廓步骤和透视变换步骤,综合运用高斯滤波、Canny边缘检测、Suzuki算法、旋转卡壳法等处理手段,并采用大迭代次数开闭运算,可以分割得到药盒的完整矩形轮廓图,且分割准确率高。
Description
技术领域
本发明涉及一种药盒分割方法。
背景技术
目前,在进行药盒识别时,药盒可能会多个重叠后经过识别装置,采用传统的图片分割方法,需要手动调整每张图片的阈值,无法实现自动化,方法鲁棒性低,不能够适应各种输入图。如果按照背景剪除、手部剪除、轮廓提取与拟合的思路,消除了手部的影响,但是背景剪除增加了运算时间,且切割准确率低,未消除药盒内部纹理的影响,药盒图案存在两个以上的矩形框首尾相接且某一块颜色与背景或手部接近的情况,导致轮廓图的矩形不完整,切割出的药盒图片不完整。
发明内容
本发明的目的是克服现有技术的缺陷,提供一种药盒分割方法,综合运用高斯滤波、Canny边缘检测、Suzuki算法、旋转卡壳法等处理手段,并采用大迭代次数开闭运算,可以分割得到药盒的完整矩形轮廓图,且分割准确率高。
实现上述目的的技术方案是:一种药盒分割方法,包括以下步骤:
S1,预处理步骤:对输入的药盒图片进行预处理,分为两步:首先将药盒图片转换为灰度图;然后对灰度图进行高斯滤波,通过高斯滤波在过滤噪声点的同时提取图像特征;
S2,Canny边缘检测步骤,具体包括以下工序:
S21,使用Sobel算子计算经过高斯滤波处理的灰度图中像素梯度的大小和方向,在二维图像中分别使用x方向和y方向的Sobel核进行滤波,再将它们平方值相加开根号得到像素梯度的大小;梯度值越大,则代表此处图像灰度变化越剧烈,此处极有可能是所要找的边缘;接着计算出像素梯度的方向;
S22,然后通过非极大值抑制来选出像素的局部最大值,将不是局部最大值的像素灰度值置0;
S23,最后进行双阈值筛选,设定高、低两个阈值,若梯度高于高阈值则标记为强边缘直接保留;若梯度低于低阈值则认为是伪边缘直接丢弃;若梯度位于两阈值之间则通过判断其与强边缘是否连通来决定取舍,若连通则标记为弱边缘点保留,若不连通则丢弃;实现精准地刻画药盒图片中全部边缘;
S3,开闭运算步骤:使用大迭代次数的开闭运算来处理Canny边缘检测步骤中得到的药盒图片的边缘,首先使用迭代次数约为70次的闭运算来消除药盒图片内部的纹理,将灰度图通过腐蚀膨胀转化为纯色的二值图,避免由于药盒内部纹理的错误识别而将药盒切割成两个的问题;接着依次使用开运算和中值滤波去除二值图中的噪点和毛边;
S4,拟合面积最大轮廓步骤:用Suzuki算法追踪经过开闭运算处理的药盒图片的边缘图中所有轮廓,通过计算面积比较出其中面积最大的轮廓,这个轮廓就是要切割的药盒,标记出该轮廓后用旋转卡壳法画出其最小外接矩形,完成药盒的长方形上表面精确的提取;
S5,透视变换步骤:获取最小外接矩形的四个顶点坐标,按照坐标值的大小重新排列得到正确的顺序,以最小外接矩形的长宽比为标准,对药盒图像执行等比例的透视变换,得到分割完成的药盒的标准长方形上表面。
上述的一种药盒分割方法,步骤S21中,使用Sobel算子进行梯度的大小和方向计算时,水平方向的像素梯度分量为dx,竖直方向像素梯度分量为dy,像素梯度的大小的计算公式为:
像素梯度的方向与水平方向夹角为:
上述的一种药盒分割方法,步骤S3中,所述闭运算指先膨胀后腐蚀的操作,对目标轮廓进行平滑、消除图像中小的孔洞、连接轮廓中细长的断裂;所述开运算指先腐蚀后膨胀的操作,平滑目标轮廓、消除图中较小的噪声点和突出物。
上述的一种药盒分割方法,步骤S4中,Suzuki算法中,将经过二值化处理的图像中,上下左右极限位置定义为frame,frame包含的像素值为0;并进行以下定义:
定义1边缘点:如果一个像素值为1的点(i,j)在其4-邻域或8-邻域内存在一个像素值为0的点(p,q),则称该像素为边缘点;
定义2连通区域的环绕:在二值图中假设有两个连通区域S1和S2,如果存在一个属于S2的像素点位于S1中一像素点到frame的任意4条路径上,则称S2环绕S1;
定义3外轮廓和孔轮廓:外轮廓指位于1区域和环绕它的0区域中间的一系列边缘点组成的集合;孔轮廓指位于孔洞和环绕它的1区域中间的一系列边缘点的集合;
定义4父轮廓:假设有1区域S1和0区域S2,且S2环绕S1,如果S2是背景则其父轮廓为frame;否则S1外轮廓的父轮廓为环绕S2的1区域的边界点集合;
假设fij表示位于(i,j)位置处像素点的像素值;使用NBD为每个找到的边界唯一地编号,默认frame的NBD为1,其余边界以此类推;使用LNBD来存储其父轮廓的层级信息;当扫描到新的一行时,将LNBD重置为1;
Suzuki算法包括以下步骤:
步骤A:判断一个像素点属于外边界还是孔边界:
若该点像素值为1,且其左边的点像素值为0,则该点属于外边界点;
若该点像素值非0,且其右边的点像素值为0,则该点属于孔边界点;
仅对像素值大于0的像素执行步骤B:
步骤B:标识外轮廓与孔轮廓:
如果(i,j)是外边界点,则NBD自增1,设置(i2,j2)为(i,j-1),并进行步骤C;
如果(i,j)是孔边界点,则NBD自增1,设置(i2,j2)为(i,j+1),且LNBD置为fij,并进行步骤C;
其他情况则直接跳转至步骤D;
步骤C:从该起点开始追踪边界,具体包括以下流程:
步骤C1,顺时针扫描(i,j)的8-邻域内所有像素,以(i2,j2)为起点,将非零像素记为(i1,j1)。若未找到非零像素,则fij置为-NBD,跳转至步骤D;
步骤C2,设置(i2,j2)=(i1,j1),(i3,j3)=(i,j);
步骤C3,逆时针扫描(i3,j3)的8-邻域内所有像素,以(i2,j2)为起点,找到第一个非零像素记为(i4,j4);
步骤C4,根据当前扫描到的像素(i3,j3)更改fij的值:如果(i3,j3+1)处的像素值为0,则将fij设置为-NBD;如果(i3,j3+1)处的像素值非0且当前像素值为1,则将fij设置为NBD;否则,fij保持不变;
步骤C5,如果在步骤C3中扫描到了起点,即(i4,j4)=(i,j)且(i3,j3)=(i1,j1),则跳转到步骤D;否则,设置(i2,j2)=(i3,j3),(i3,j3)=(i4,j4)并返回步骤C3;
步骤D:如果fij!=1,则设置LNBD=|fij|,从下一个像素(i,j+1)开始扫描直至扫描到图像的右下角;
不断重复上述步骤,最终能得到输出及轮廓间的层级关系,追踪图像中的轮廓。
上述的一种药盒分割方法,步骤A找出外边界和孔边界的起点;
步骤B为扫描到的轮廓分配一唯一NBD,且标记出与边界点邻接像素值为0的点;
步骤C不断更新当前扫描到的点(i3,j3),绕着该点逆时找到下一点并根据扫描到的点更新fij。
上述的一种药盒分割方法,步骤S4中,得到轮廓的最小外接矩形,分为两大步:先采用Graham算法求出轮廓点集的凸包,再采用旋转卡壳法求出凸包的最小外接矩形。
本发明的药盒分割方法,综合运用高斯滤波、Canny边缘检测、Suzuki算法、旋转卡壳法等处理手段,并采用大迭代次数开闭运算,可以分割得到药盒的完整矩形轮廓图,且分割准确率高。
附图说明
图1为本发明的药盒分割方法的流程图;
图2为高斯滤波中根据像素值的坐标构造位置矩阵的示意图;
图3为归一化后的高斯滤波核的示意图;
图4使用Sobel算子进行梯度计算时构造的两个Sobel核的示意图;
图5为非极大值抑制的示意图;
图6为Suzuki算法中外边界点和孔边界点的示意图;
图7为Suzuki算法中步骤B标识外轮廓与孔轮廓的流程图;
图8为Suzuki算法中步骤C追踪边界的流程图;
图9为Suzuki算法的一次迭代结果示意图;
图10为Suzuki算法的最终结果示意图;
图11为旋转卡壳法求最小外接矩形的流程图;
图12为三次开发测试的分割效果对比图。
具体实施方式
为了使本技术领域的技术人员能更好地理解本发明的技术方案,下面结合附图对其具体实施方式进行详细地说明:
请参阅图1,本发明的实施例,一种药盒分割方法,包括以下步骤:
S1,预处理步骤:对输入的药盒图片进行预处理,分为两步:首先将药盒图片转换为灰度图;然后对灰度图进行高斯滤波,通过高斯滤波在过滤噪声点的同时提取图像特征;简化原始图像中过多的细部分信息,为边缘检测做准备,因为边缘检测的基本思想就是使用边缘线来代表原始图像中的全部信息。高斯滤波器像一个金字塔结构;
S2,Canny边缘检测步骤,具体包括以下工序:
S21,使用Sobel算子计算经过高斯滤波处理的灰度图中像素梯度的大小和方向,在二维图像中分别使用x方向和y方向的Sobel核进行滤波,再将它们平方值相加开根号得到像素梯度的大小;梯度值越大,则代表此处图像灰度变化越剧烈,此处极有可能是所要找的边缘,此时得到的边缘比较粗,且无法排除噪声和细小的非边缘的干扰。接着按照公式计算出梯度的方向,为下一步非极大值抑制做准备。使用Sobel算子进行梯度的大小和方向计算时,水平方向的像素梯度分量为dx,竖直方向像素梯度分量为dy,像素梯度的大小的计算公式为:
像素梯度的方向与水平方向夹角为:
S22,然后通过非极大值抑制来选出像素的局部最大值,将不是局部最大值的像素灰度值置0;这样做能剔除很大一部分非边缘的像素点;
S23,最后进行双阈值筛选,设定高、低两个阈值,若梯度高于高阈值则标记为强边缘直接保留;若梯度低于低阈值则认为是伪边缘直接丢弃;若梯度位于两阈值之间则通过判断其与强边缘是否连通来决定取舍,若连通则标记为弱边缘点保留,若不连通则丢弃;实现精准地刻画药盒图片中全部边缘;
S3,开闭运算步骤:使用大迭代次数的开闭运算来处理Canny边缘检测步骤中得到的药盒图片的边缘,首先使用迭代次数约为70次的闭运算来消除药盒图片内部的纹理,将灰度图通过腐蚀膨胀转化为纯色的二值图,避免由于药盒内部纹理的错误识别而将药盒切割成两个的问题;接着依次使用开运算和中值滤波去除二值图中的噪点和毛边;使得识别尽可能精确
S4,拟合面积最大轮廓步骤:用Suzuki算法追踪经过开闭运算处理的药盒图片的边缘图中所有轮廓,通过计算面积比较出其中面积最大的轮廓,这个轮廓就是要切割的药盒,标记出该轮廓后用旋转卡壳法画出其最小外接矩形,完成药盒的长方形上表面精确的提取;
S5,透视变换步骤:获取最小外接矩形的四个顶点坐标,按照坐标值的大小重新排列得到正确的顺序,以最小外接矩形的长宽比为标准,对药盒图像执行等比例的透视变换,得到分割完成的药盒的标准长方形上表面。
以下部分对本发明的药盒分割方法中各步骤涉及的具体原理进行详细描述:
高斯滤波:
首先介绍滤波的基本操作。滤波不但可以用来消除数字图像中的噪声,还可以简化图像中的信息,提取图像的关键特征,为后续进一步处理图像做准备。滤波开始时,滤波核从上到下、从左到右依次扫描原始图像中的每一个像素。其中滤波核根据具体的处理目的来选取,通常是3*3、5*5、7*7的矩阵,因为只有奇数时才能确定中心点进行赋值操作。且滤波核内所有值的和为0,这样才能保证经过滤波后图像的总体灰度值不发生变化。将原始图像中正在处理的像素点及其邻域内像素点与滤波核内权值代入滤波函数进行数字计算,用计算结果取代正在处理的像素点处的像素值。具体公式表示为:
式(1)中,R5表示当前正在处理的像素点,RiGi表示领域内像素值与滤波核对应位置的权重的乘积,n为滤波核的尺寸。例如滤波核是一个3*3、元素全为1的方阵,则此时滤波操作的意义是将一个像素8-邻域内所有像素的平均值赋给这个像素,滤波完的效果表现为图片变得模糊,且模糊程度与滤波核的大小成正比,这是因为越大的滤波核所取的均值范围也越大,各个像素之间的取值越平均,图片模糊得越明显。
将原始图像理解为像素矩阵,而滤波核是一个滑动窗口,将滤波核覆盖在原始图像上进行卷积操作,完成后滤波核滑动至下一个窗口重复该操作直至原始图像中所有的像素点都经过了处理。因此,滤波后所能达到的效果完全取决于滤波核矩阵中选定的权值。
高斯滤波是目前最常用的去噪滤波算法,在概率论中所学的正态分布也叫高斯分布,其原理为按照高斯公式生成高斯权重,将领域内的像素按照高斯权重加权平均后得到结果取代当前像素值,这样做有效地过滤了在操作和传输过程中不可避免地叠加的高频噪声。高斯滤波核内的值根据公式(2)确定:
式(2)中,(x,y)为点的坐标;
为方便说明,以3*3的高斯核计算过程为例,假设标准差为1。根据像素值的坐标构造位置矩阵如图2所示,其中(0,0)代表坐标原点所在位置,(1,0)代表与原点同列下一行的像素点所在位置,(0,1)代表与原点同行后一列的像素点所在的位置,以此类推可以写出3*3点阵中所有点的位置矩阵。
将位置矩阵中的数值对代入公式(2)即可得到高斯滤波核在该点的值。以点(-1,-1)为例,取x=-1;y=-1代入公式(2)得到h(-1,-1)=0.0585,同理可计算出其他位置全部的9个数值。不难发现,原点处高斯核的值最大,与原点相邻的上下左右四个点的值略小,其他4个与原点距离较远的点对应的值最小,而这正印证了高斯分布的规律,即离中心越远概率越小。
经过归一化后的高斯滤波核如图3所示,观察原图与图3可以发现,原图中存在一些差异极大的像素值组,而经过滤波后差异变小,即实现了图像平滑操作。
Canny边缘检测:
1.1梯度是机器学习及人工智能领域非常重要的一个概念,由于图像在处理之前大多都需要经过预处理转化成灰度图,而灰度图是一种二维图,因此需要引入二元函数偏导数。
梯度指的是一点对于x轴方向和y方向的偏导数。因为像素在图片中是离散的,该方法可以将偏导数离散化为差商,一个像素的梯度即由其沿x方向上的差商与沿y方向上的差商做向量和确定,可以将其通俗地理解为像素在某个方向上灰度值的变化速度。不难发现在实际像素梯度计算中,只需要执行简单的加减法而不需要做微积分。
高斯滤波后,使用Sobel算子计算图像的梯度大小和梯度方向,其过程与高斯模糊相似,不再赘述。值得注意的是,使用Sobel算子进行梯度计算时构造了两个Sobel核,如图4所示。
高斯核与核的尺寸和标准差息息相关,而Sobel核却是固定的。观察1号Sobel核,第二列全0说明原图滑动窗口中间列不参与计算,第一列与第三列权值绝对值相同而正负号相异表示带权重地计算原图中第一列与第三列像素差,即窗口中水平方向的像素梯度分量dx。同理,2号Sobel核完成竖直方向像素梯度分量dy的计算。
经过Sobel算子梯度计算后可以方便地找出可能存在的边缘,但是此处边缘太粗需要变细,即确定哪些是真正的强边缘,哪些是假边缘。
1.2非极大值抑制
由于梯度方向的取值是连续的,可能的值有无数个,这加大了算法的工作量。Canny假设了0°、45°、90°、135°这四个方向,取距离真实梯度方向最近的方向来替换真实方向,即将所有真实梯度近似划分为了8类。这样做的原因是因为图像种像素点是离散的,一个点的领域只有8个,而4个方向已经可以表示领域内所有的像素点。
分别比较梯度方向上的三个像素点,若原点是三个点中的局部最大值点,即极大值点,则暂归为边缘像素点;否则置0抑制。以图5为例,假设点1处的梯度方向为45°,则比较1、2、3点的梯度值,若点1最大则保留,否则将点1丢弃。
这一步保留了梯度极大值点,而将其他置0,其作用是将上一步较粗的边缘变细。
1.3双阈值筛选边缘
若采用单一阈值,则存在以下缺点:阈值设置较高时,非极大值抑制后梯度较小的边会被直接舍弃,损失了图片中的细部分边缘;阈值设置较低时,图中的噪声和非边缘会被包括进边缘集合内,造成图片边缘杂乱无章。因此该方法设置双阈值,低阈值A和高阈值B:梯度值小于A的点直接置0,梯度值大于B的点直接标记为边缘点,而在A和B之间的点则要判断与边缘点是否有关或相连,若是则标记为弱边缘点,否则置0。
经过上述操作后就完成了整个Canny边缘检测的全部流程。
开闭运算:
图像的腐蚀和膨胀是最常用的图像形态学处理操作,而开闭运算则是由腐蚀和膨胀互相组合而成的复杂操作。因此本技术内容先分别介绍腐蚀和膨胀操作的原理,再引申到开闭运算及其效果。
用结构单元B腐蚀目标A,结构单元B中需要定义一锚点(通常取为原点),将B与A进行卷积,即可以将结构单元B看做掩码。结构单元B在目标A上运动,保证锚点遍历过A的每一个像素。在结构单元覆盖的范围内取局部最小值,并将局部最小值赋给锚点所在的像素。目标与结构单元都取为二值图,假设白色部分表示0,灰色部分表示1。在结构单元B在A中遍历时,若A的灰色部分能完全包括B的灰色部分,则锚点所在处的像素仍然为灰色,否则置为白色。从结果中可以总结得出:腐蚀操作可以缩小或细化二值图中的目标,它可以将小于结构单元的细部分或噪声从图像中过滤掉,其效果类似于滤波操作。
与腐蚀类似,膨胀在结构单元覆盖的范围内取局部最大值,将最大值赋给锚点所在像素。在结构单元B在A中遍历时,只要A的灰色部分与B的灰色部分有重合,则锚点所在处的像素仍然为灰色,否则置为白色。从结果中可以总结得出:膨胀操作可以扩大或加粗二值图中的目标,它可以将目标图中小于结构单元的断裂和不连通区域补上。
在图像处理中,该方法很少单独使用腐蚀和膨胀,通常将腐蚀与膨胀进行顺序的组合,即所谓的开运算和闭运算。开运算指先腐蚀后膨胀的操作,它能够使平滑目标轮廓、消除图中较小的噪声点和突出物。闭运算指先膨胀后腐蚀,它也能对目标轮廓进行平滑、消除图像中小的孔洞、连接轮廓中细长的断裂。
轮廓跟踪Suzuki算法:
OpenCV中的轮廓检测函数使用了Suzuki算法,首先引用了文献中的定义来给出说明算法所需的名词,接着使用流程图与文字解释相结合的形式展示该算法原理。
将经过二值化处理的图像中,上下左右极限位置定义为frame,frame包含的像素值为0;并进行以下定义:
定义1边缘点:如果一个像素值为1的点(i,j)在其4-邻域或8-邻域内存在一个像素值为0的点(p,q),则称该像素为边缘点;
定义2连通区域的环绕:在二值图中假设有两个连通区域S1和S2,如果存在一个属于S2的像素点位于S1中一像素点到frame的任意4条路径上,则称S2环绕S1;
定义3外轮廓和孔轮廓:外轮廓指位于1区域和环绕它的0区域中间的一系列边缘点组成的集合;孔轮廓指位于孔洞和环绕它的1区域中间的一系列边缘点的集合;
定义4父轮廓:假设有1区域S1和0区域S2,且S2环绕S1,如果S2是背景则其父轮廓为frame;否则S1外轮廓的父轮廓为环绕S2的1区域的边界点集合;
假设fij表示位于(i,j)位置处像素点的像素值;使用NBD为每个找到的边界唯一地编号,默认frame的NBD为1,其余边界以此类推;使用LNBD来存储其父轮廓的层级信息;当扫描到新的一行时,将LNBD重置为1;
Suzuki算法包括以下步骤:
步骤A:判断一个像素点属于外边界还是孔边界:
若该点像素值为1,且其左边的点像素值为0,则该点属于外边界点;
若该点像素值非0,且其右边的点像素值为0,则该点属于孔边界点;
请参阅图6,步骤A能够简单地找出外边界和孔边界的起点。
仅对像素值大于0的像素执行步骤B:
步骤B:请参阅图7,标识外轮廓与孔轮廓:
如果(i,j)是外边界点,则NBD自增1,设置(i2,j2)为(i,j-1),并进行步骤C;
如果(i,j)是孔边界点,则NBD自增1,设置(i2,j2)为(i,j+1),且LNBD置为fij,并进行步骤C;
其他情况则直接跳转至步骤D;
步骤B为扫描到的轮廓分配一唯一NBD,且标记出与边界点邻接像素值为0的点。
步骤C:请参阅图8,从该起点开始追踪边界,具体包括以下流程:
步骤C1,顺时针扫描(i,j)的8-邻域内所有像素,以(i2,j2)为起点,将非零像素记为(i1,j1)。若未找到非零像素,则fij置为-NBD,跳转至步骤D;
步骤C2,设置(i2,j2)=(i1,j1),(i3,j3)=(i,j);
步骤C3,逆时针扫描(i3,j3)的8-邻域内所有像素,以(i2,j2)为起点,找到第一个非零像素记为(i4,j4);
步骤C4,根据当前扫描到的像素(i3,j3)更改fij的值:如果(i3,j3+1)处的像素值为0,则将fij设置为-NBD;如果(i3,j3+1)处的像素值非0且当前像素值为1,则将fij设置为NBD;否则,fij保持不变;
步骤C5,如果在步骤C3中扫描到了起点,即(i4,j4)=(i,j)且(i3,j3)=(i1,j1),则跳转到步骤D;否则,设置(i2,j2)=(i3,j3),(i3,j3)=(i4,j4)并返回步骤C3;
步骤C不断更新当前扫描到的点(i3,j3),绕着该点逆时找到下一点并根据扫描到的点更新fij。
步骤D:如果fij!=1,则设置LNBD=|fij|,从下一个像素(i,j+1)开始扫描直至扫描到图像的右下角;
请参阅图9,Suzuki算法的一次迭代结果。
请参阅图10,不断重复上述步骤,最终能得到输出及轮廓间的层级关系,追踪图像中的轮廓。
最小外接矩形:
计算轮廓的最小外接矩形算法分为两大步:先求出轮廓点集的凸包,再求凸包的最小外接矩形。求凸包使用的是Graham算法,而求凸包的最小外接矩形使用的是旋转卡壳算法,下面将详细阐述求最小外接矩形的整个流程及其数学理论基础。
定义5凸包:对于给定集合A,在实数向量空间V中,所有包含A的凸集的交集S被称为集合A的凸包。
二维凸问题是经典的几何数学问题,问题可描述为:给定平面上的点集,找到一组最小点集连接成凸多边形,使得平面点集中包含的点要么在这个凸多边形内部,要么在这个凸多边形的边上,这个凸多边形就是该平面点集的凸包。
步骤一:任意选择点集中的一个点作为基准点,为了简化操作通常选择(lowest-then-leftmost point)LTL点。以基准点为极坐标原点,根据极角的大小依次对点集内所有的点排序。在假设任意三点不共线的情况下,算法从1号点和2号点开始。
步骤二:准备两个堆栈数据结构,分别为栈S和栈T,栈S中依次入栈1号点和2号点,栈T中依次入栈n号点、n-1号点……直至3号点。图11展示了对于上述点集,算法起始时两个栈内元素的情况。
步骤三:这一步执行扫描操作,该方法需要时刻关注栈S的栈顶元素和次栈顶元素S[0]、S[1]以及栈T的栈顶元素T[0]。连接S[0]、S[1],判断T[0]是否位于S[0]S[1]的左边,若是则将T[0]从T中弹出并压入S中,即向前拓展一条边;否则从S中弹出栈顶元素并丢弃,即回溯,再将T栈顶元素压入S中。重复这一过程直到T中没有元素为止。T空后,自底向上依次连接S中的点即得到所求点集的凸包。
可见,Graham算法的关键步骤是反复判断T栈顶元素在S栈顶与次栈顶元素所连接的有向边的左边还是右边,即将T[0]与S[0]S[1]作to-left-test.
定理1:多边形的最小外接矩形的一条边必然与多边形的其中一条边共线。
接着该方法使用旋转卡壳算法来求该凸包的最小外接矩形。由上述定理1可知,最小外接矩形与多边形至少有一条重合的边,这大大减少了该方法的工作量,因为该方法不再需要检测多边形所有方向上的外接矩形了。一个较容易的方法是依次枚举每一条边,根据该边构造外接矩形比较最小值,它显然具有二次方的时间复杂性,因此更简单的旋转卡壳法应运而生,其具体算法如图11所示。
请参阅图11,顺序输入多边形的顶点,然后计算多边形的四个端点Xmin、Xmax、Ymin、Ymax;根据四个端点构造多边形四条切边;判断是否有切边与多边形重合,若有重合,则获得面积最小的最小外接矩形;若没有重合,定义该四个端点组成的矩形面积为minSize;
顺时针旋转多边形四条切边,直到其中一条切边和多边形的一条边重合;
判断此时得到的矩形面积是否小于minSize,若小于minSize则得到面积最小的最小外接矩形;若不小于minSize,查看旋转角度是否小于90°,若旋转角度大于或等于90°,则得到面积最小的最小外接矩形;若旋转角度小于90°,则返回继续顺时针旋转多边形四条切边,直到其中一条切边和多边形的一条边重合,并进行后续步骤。
本发明的药盒分割方法,综合运用上述处理手段,形成自己的药盒分割方法,大迭代次数的开闭运算是该药盒分割方法表现较好的关键因素,首先使用迭代次数约为70次的闭运算来消除药盒图片内部的纹理,将灰度图通过腐蚀膨胀转化为纯色的二值图,避免由于药盒内部纹理的错误识别而将药盒切割成两个的问题;接着依次使用开运算和中值滤波去除二值图中的噪点和毛边;也是该方法主要的创新点。在使用中,一张图片处理的时间约为200至300毫秒,这已经符合所设想的要求。本次测试使用数据集包含309张样本,其中切割错误的样本数为6张,正确率达到了98.06%。
请参阅图12,本发明的药盒分割方法,在研发过程中进行了多中开发测试,选取其中三次进行分割效果对比:
第一次开发测试,需要手动调整每张图片的阈值,虽然准确率高但无法实现自动化,方法鲁棒性低,不能够适应各种输入图。
第二次开发测试,按照背景剪除、手部剪除、轮廓提取与拟合的思路,消除了手部的影响,但是背景剪除增加了运算时间。该版本切割错误的样本量高达30张,其错误的原因包括:未消除药盒内部纹理的影响,药盒图案存在两个以上的矩形框首尾相接且某一块颜色与背景或手部接近的情况,导致轮廓图的矩形不完整,切割出的药盒不完整。
第三次开发测试,采用本发明提出的药盒分割方法。根据第二次出现的问题,在第三次中药盒内部为纯色二值图,消除了内部纹理误导轮廓识别将药盒切为两块及以上的问题,且较大迭代次数未影响反应时间,省略了背景剪除的运算时间。本发明中切割错误的样本量为6张,错误的原因也与第二版不同,包括:开闭运算迭代次数很大,但未能将手部轮廓去除干净,导致切割区域过大;或由于手部影响切割出极端区域,这些问题在以后研发过程中可以进行进一步的改进。
本发明提出的药盒分割方法,采用大迭代次数开闭运算,消除药盒图片内部的纹理,将灰度图通过腐蚀膨胀转化为纯色的二值图,避免由于药盒内部纹理的错误识别而将药盒切割成两个的问题;接着依次使用开运算和中值滤波去除二值图中的噪点和毛边,使得识别尽可能精确。
综上所述,本发明的药盒分割方法,综合运用高斯滤波、Canny边缘检测、Suzuki算法、旋转卡壳法等处理手段,并采用大迭代次数开闭运算,可以分割得到药盒的完整矩形轮廓图,且分割准确率高。
本技术领域中的普通技术人员应当认识到,以上的实施例仅是用来说明本发明,而并非用作为对本发明的限定,只要在本发明的实质精神范围内,对以上所述实施例的变化、变型都将落在本发明的权利要求书范围内。
Claims (6)
1.一种药盒分割方法,其特征在于,包括以下步骤:
S1,预处理步骤:对输入的药盒图片进行预处理,分为两步:首先将药盒图片转换为灰度图;然后对灰度图进行高斯滤波,通过高斯滤波在过滤噪声点的同时提取图像特征;
S2,Canny边缘检测步骤,具体包括以下工序:
S21,使用Sobel算子计算经过高斯滤波处理的灰度图中像素梯度的大小和方向,在二维图像中分别使用x方向和y方向的Sobel核进行滤波,再将它们平方值相加开根号得到像素梯度的大小;梯度值越大,则代表此处图像灰度变化越剧烈,此处极有可能是所要找的边缘;接着计算出像素梯度的方向;
S22,然后通过非极大值抑制来选出像素的局部最大值,将不是局部最大值的像素灰度值置0;
S23,最后进行双阈值筛选,设定高、低两个阈值,若梯度高于高阈值则标记为强边缘直接保留;若梯度低于低阈值则认为是伪边缘直接丢弃;若梯度位于两阈值之间则通过判断其与强边缘是否连通来决定取舍,若连通则标记为弱边缘点保留,若不连通则丢弃;实现精准地刻画药盒图片中全部边缘;
S3,开闭运算步骤:使用大迭代次数的开闭运算来处理Canny边缘检测步骤中得到的药盒图片的边缘,首先使用迭代次数为70次的闭运算来消除药盒图片内部的纹理,将灰度图通过腐蚀膨胀转化为纯色的二值图,避免由于药盒内部纹理的错误识别而将药盒切割成两个的问题;接着依次使用开运算和中值滤波去除二值图中的噪点和毛边;
S4,拟合面积最大轮廓步骤:用Suzuki算法追踪经过开闭运算处理的药盒图片的边缘图中所有轮廓,通过计算面积比较出其中面积最大的轮廓,这个轮廓就是要切割的药盒,标记出该轮廓后用旋转卡壳法画出其最小外接矩形,完成药盒的长方形上表面精确的提取;
S5,透视变换步骤:获取最小外接矩形的四个顶点坐标,按照坐标值的大小重新排列得到正确的顺序,以最小外接矩形的长宽比为标准,对药盒图像执行等比例的透视变换,得到分割完成的药盒的标准长方形上表面。
3.根据权利要求1所述的一种药盒分割方法,其特征在于,步骤S3中,所述闭运算指先膨胀后腐蚀的操作,对目标轮廓进行平滑、消除图像中小的孔洞、连接轮廓中细长的断裂;所述开运算指先腐蚀后膨胀的操作,平滑目标轮廓、消除图中较小的噪声点和突出物。
4.根据权利要求1所述的一种药盒分割方法,其特征在于,步骤S4中,Suzuki算法中,将经过二值化处理的图像中,上下左右极限位置定义为frame,frame包含的像素值为0;并进行以下定义:
定义1边缘点:如果一个像素值为1的点(i,j)在其4-邻域或8-邻域内存在一个像素值为0的点(p,q),则称该像素为边缘点;
定义2连通区域的环绕:在二值图中假设有两个连通区域S1和S2,如果存在一个属于S2的像素点位于S1中一像素点到frame的任意4条路径上,则称S2环绕S1;
定义3外轮廓和孔轮廓:外轮廓指位于1区域和环绕它的0区域中间的一系列边缘点组成的集合;孔轮廓指位于孔洞和环绕它的1区域中间的一系列边缘点的集合;
定义4父轮廓:假设有1区域S1和0区域S2,且S2环绕S1,如果S2是背景则其父轮廓为frame;否则S1外轮廓的父轮廓为环绕S2的1区域的边界点集合;
假设fij表示位于(i,j)位置处像素点的像素值;使用NBD为每个找到的边界唯一地编号,默认frame的NBD为1,其余边界以此类推;使用LNBD来存储其父轮廓的层级信息;当扫描到新的一行时,将LNBD重置为1;
Suzuki算法包括以下步骤:
步骤A:判断一个像素点属于外边界还是孔边界:
若该点像素值为1,且其左边的点像素值为0,则该点属于外边界点;
若该点像素值非0,且其右边的点像素值为0,则该点属于孔边界点;
仅对像素值大于0的像素执行步骤B:
步骤B:标识外轮廓与孔轮廓:
如果(i,j)是外边界点,则NBD自增1,设置(i2,j2)为(i,j-1),并进行步骤C;
如果(i,j)是孔边界点,则NBD自增1,设置(i2,j2)为(i,j+1),且LNBD置为fij,并进行步骤C;
其他情况则直接跳转至步骤D;
步骤C:从该起点开始追踪边界,具体包括以下流程:
步骤C1,顺时针扫描(i,j)的8-邻域内所有像素,以(i2,j2)为起点,将非零像素记为(i1,j1)。若未找到非零像素,则fij置为-NBD,跳转至步骤D;
步骤C2,设置(i2,j2)=(i1,j1),(i3,j3)=(i,j);
步骤C3,逆时针扫描(i3,j3)的8-邻域内所有像素,以(i2,j2)为起点,找到第一个非零像素记为(i4,j4);
步骤C4,根据当前扫描到的像素(i3,j3)更改fij的值:如果(i3,j3+1)处的像素值为0,则将fij设置为-NBD;如果(i3,j3+1)处的像素值非0且当前像素值为1,则将fij设置为NBD;否则,fij保持不变;
步骤C5,如果在步骤C3中扫描到了起点,即(i4,j4)=(i,j)且(i3,j3)=(i1,j1),则跳转到步骤D;否则,设置(i2,j2)=(i3,j3),(i3,j3)=(i4,j4)并返回步骤C3;
步骤D:如果fij!=1,则设置LNBD=|fij|,从下一个像素(i,j+1)开始扫描直至扫描到图像的右下角;
不断重复上述步骤,最终能得到输出及轮廓间的层级关系,追踪图像中的轮廓。
5.根据权利要求4所述的一种药盒分割方法,其特征在于,步骤A找出外边界和孔边界的起点;
步骤B为扫描到的轮廓分配一唯一NBD,且标记出与边界点邻接像素值为0的点;
步骤C不断更新当前扫描到的点(i3,j3),绕着该点逆时找到下一点并根据扫描到的点更新fij。
6.根据权利要求1所述的一种药盒分割方法,其特征在于,步骤S4中,得到轮廓的最小外接矩形,分为两大步:先采用Graham算法求出轮廓点集的凸包,再采用旋转卡壳法求出凸包的最小外接矩形。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111458605.1A CN114092499A (zh) | 2021-12-02 | 2021-12-02 | 一种药盒分割方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111458605.1A CN114092499A (zh) | 2021-12-02 | 2021-12-02 | 一种药盒分割方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114092499A true CN114092499A (zh) | 2022-02-25 |
Family
ID=80306343
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111458605.1A Pending CN114092499A (zh) | 2021-12-02 | 2021-12-02 | 一种药盒分割方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114092499A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116403211A (zh) * | 2023-03-24 | 2023-07-07 | 无锡市第二人民医院 | 一种基于单细胞病理图像细胞核的分割和聚类方法及系统 |
CN116843626A (zh) * | 2023-06-08 | 2023-10-03 | 江苏苏港智能装备产业创新中心有限公司 | 一种基于多特征融合的机器视觉钢丝绳表面缺陷检测方法 |
-
2021
- 2021-12-02 CN CN202111458605.1A patent/CN114092499A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116403211A (zh) * | 2023-03-24 | 2023-07-07 | 无锡市第二人民医院 | 一种基于单细胞病理图像细胞核的分割和聚类方法及系统 |
CN116403211B (zh) * | 2023-03-24 | 2024-04-26 | 无锡市第二人民医院 | 一种基于单细胞病理图像细胞核的分割和聚类方法及系统 |
CN116843626A (zh) * | 2023-06-08 | 2023-10-03 | 江苏苏港智能装备产业创新中心有限公司 | 一种基于多特征融合的机器视觉钢丝绳表面缺陷检测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109978839B (zh) | 晶圆低纹理缺陷的检测方法 | |
CN111243032B (zh) | 一种棋盘格角点全自动检测方法 | |
CN110866924B (zh) | 一种线结构光中心线提取方法及存储介质 | |
CN109615611B (zh) | 一种基于巡检影像的绝缘子自爆缺陷检测方法 | |
CN108805023B (zh) | 一种图像检测方法、装置、计算机设备及存储介质 | |
JP4926116B2 (ja) | 画像検査装置 | |
CN107228860B (zh) | 一种基于图像旋转周期特性的齿轮缺陷检测方法 | |
US4905296A (en) | System for shape recognition | |
CN108960229B (zh) | 一种面向多方向的文字检测方法和装置 | |
CN110021024B (zh) | 一种基于lbp和链码技术的图像分割方法 | |
CN114092499A (zh) | 一种药盒分割方法 | |
CN111260694B (zh) | 卫星遥感视频目标跟踪方法及装置 | |
CN115131587A (zh) | 一种基于边缘轮廓的梯度向量特征的模板匹配方法 | |
CN111242864A (zh) | 一种基于Gabor纹理约束的手指静脉图像修复方法 | |
CN106062824A (zh) | 边缘检测装置、边缘检测方法和程序 | |
CN111027538A (zh) | 一种基于实例分割模型的集装箱检测方法 | |
CN113609984A (zh) | 一种指针式仪表读数识别方法、装置及电子设备 | |
CN111354047A (zh) | 一种基于计算机视觉的摄像模组定位方法及系统 | |
CN113744142A (zh) | 图像修复方法、电子设备及存储介质 | |
CN106934846B (zh) | 一种布料图像处理方法及系统 | |
Shahab et al. | A modified 2D chain code algorithm for object segmentation and contour tracing. | |
Khan et al. | Segmentation of single and overlapping leaves by extracting appropriate contours | |
CN116012393A (zh) | 一种纸箱点云分割方法、装置以及处理设备 | |
CN112712860B (zh) | 一种基于真实金相图结构的晶粒有限元模型建模方法 | |
Becker et al. | Lidar inpainting from a single image |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |