CN113888570B - 基于轮廓凹凸性的药袋检测和抓取点定位方法 - Google Patents
基于轮廓凹凸性的药袋检测和抓取点定位方法 Download PDFInfo
- Publication number
- CN113888570B CN113888570B CN202111081882.5A CN202111081882A CN113888570B CN 113888570 B CN113888570 B CN 113888570B CN 202111081882 A CN202111081882 A CN 202111081882A CN 113888570 B CN113888570 B CN 113888570B
- Authority
- CN
- China
- Prior art keywords
- point
- contour
- points
- polygon
- vertex
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/70—Denoising; Smoothing
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/20—Analysis of motion
- G06T7/246—Analysis of motion using feature-based methods, e.g. the tracking of corners or segments
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/30—Subject of image; Context of image processing
- G06T2207/30108—Industrial image inspection
- G06T2207/30128—Food products
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/30—Subject of image; Context of image processing
- G06T2207/30241—Trajectory
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Multimedia (AREA)
- Image Analysis (AREA)
Abstract
本发明公开了一种基于轮廓凹凸性的药袋检测和抓取点定位方法,包括步骤:I)通过相机采集堆放在分拣台上的药袋的图像;II)对图像依次进行灰度化、中值滤波、二值化处理、闭操作和开操作;III)对二值图像进行轮廓跟踪,IV)对轮廓进行拟合得到多边形轮廓;V)判断多边形轮廓顶点的凹凸性;VI)药包分割,每两凹顶点之间为分割出的一个药袋;VII)定位堆叠药袋抓取点。本发明针对堆叠的药袋图像拟合后呈凸多边这一实际情况,创造性的利用相邻两药袋结合部顶点为凹顶点的特性来分割药袋,从而降低了堆叠药袋的分割难度,并在此基础上实现了对药袋最终抓取点的定位,解决了堆叠药袋当前最适宜抓取药袋的选取及定位问题。
Description
技术领域
本发明涉及自动化药房技术领域,特别涉及采用机械手抓取小包装药袋时的药袋检测及抓取点定位方法。
背景技术
近年来小包装中药的市场占有率不断提高,但多数药房仍采用传统的人工方式对其进行调剂。在医疗资源相对紧缺的当下,三甲医院以及大型中医院的当日处方量在500-1500方,人工抓药调剂工作量,效率低,人工成本高。
采用机械手代替人工抓药能提高抓药效率,降低人工成本。而如何找出分散堆叠在分拣台上的药包中最适于当前抓取的药包,并确定出抓取点的位置,是机械手能够成功抓取小包装中药袋的关键。
发明内容
有鉴于此,本发明的目的是提供一种基于轮廓凹凸性的药袋检测和抓取点定位方法,以解决采用机械手抓取分拣台上小包装中药袋时如何确定当前最适于抓取的药袋及抓取点位置的技术问题。
本发明基于轮廓凹凸性的药袋检测和抓取点定位方法,包括以下步骤:
I)通过布置在分拣台上方的相机采集堆放在分拣台上的药袋的图像;
II)对相机采集的图像依次进行灰度化、中值滤波、二值化处理、闭操作和开操作;
III)对步骤II)处理后的二值图像进行轮廓跟踪;
IV)对外轮廓进行拟合得到多边形轮廓;
V)判断多边形轮廓顶点的凹凸性;
VI))药包分割:在多边形轮廓的两相邻凹顶点之间分割出的一个药袋;
VII)定位堆叠药袋抓取点:先计算拟合得到多边形轮廓中分割后各药袋的边长和,将边长和最大的药袋视为与其它药袋的重叠面积最小,也就是当前最适合抓取的药袋;然后从该药袋的轮廓拟合图中获取药袋的长和宽,将药袋还原成矩形;然后再找出药袋在拟合图像中的最长边的中点,再将该中点沿垂直于最长边方向,向药袋内平移,平移距离为药袋宽度的五分之二,平移后的点为最终抓取点。
进一步,所述步骤III)中轮廓跟踪包括确定轮廓的边界点和寻找下一个轮廓点;
所述确定轮廓的边界点包括以下步骤:
a)将二值图像中灰度值为0和1的像素分别称为0像素点和1像素点,第i行、j列的像素点记为(i,j),用f[i][j]表示该点的灰度值则有:
b)逐行扫描二值图像,扫描过程中遇到1像素时统计该点在其8连通方向和4连通方向上1像素点的个数,分别用num_8和num_4表示,则有:
c)判断边界点情况:
(1)若1<num_8[i][j]<4,则该点为边界点,令f[i][j]=1;
(2)若3<num_8[i][j]<8,继续判断num_4[i][j]的值,若num_4[i][j]≠4则该点为边界点,令f[i][j]=1;
(3)情况(1)和情况(2)外的其它情况,该点不是边界点,令f[i][j]=0;
d)去除步骤c)获得的图像边界点中的干扰点:首先定义以下变量
接着按以下步骤排除干扰点:
Step1:逐行扫描过程遇到num_a[i][j]=4的像素点执行Step2,否则执行Step6;
Step2:若num_b[i][j]=num_down[i][j],则该点的上一行两点是伪边界点,令f[i][j]=0,f[i][j+1]=0;
Step3:若num_b[i][j]=num_up[i][j],则该点的下一行两点是伪边界点,令f[i+1][j]=0,f[i+1][j+1]=0;
Step4:若num_b[i][j]=num_left[i][j],则该点的右侧一行两点是伪边界点,令f[i+1][j]=0,f[i+1][j+1]=0;
Step5:若num_b[i][j]=num_right[i][j],则该点的左侧一行两点是伪边界点,令f[i][j]=0,f[i][j+1]=0;
Step6:该点处理结束,继续处理下一个点;
所述寻找下一个轮廓点包括以下步骤:
Step1:按逐行扫描方式对图像进行扫描,将找到的第一个轮廓点记为p0,按设定的扫描方向dir在该轮廓点的8邻域中寻找下一个边界点;当f[i][j]=1时记录扫描方向,令pre_dir=dir,f[i][j]=0,并且将该点的位置记作p_next;
Step2:在p_next点处,按照相同的扫描方向dir扫描其8邻域,权重wei为某点8邻域中1像素点的个数,当某点满足f[i][j]=1并且wei[i][j]=2,则该点为下一个选择点,否则继续;当dir=pre_dir并且f[i][j]=1,则该点是下一个选择点,否则选择第一个f[i][j]=1的点,记录该点的位置p_now和方向dir,并且令f[i][j]=0;
Step3:若p_now=p0,轮廓扫描结束,转到Step1,继续扫描另一个区域,将找到的第一个边界点记为p1;
Step4:若p_now≠p0,令p_next=p_now,pre_dir=dir继续执行第二步;
Step5:如果二值图像中找不到任何1像素点,则轮廓跟踪结束。
进一步,所述步骤IV)中对轮廓进行拟合包括以下步骤:
Step1:获取轮廓曲线上曲率最大的点,该点将曲线分成两段,两段都有对应的点序列,分别对每一段进行处理;
Step2:记Li为第一段曲线上的点,下标i=0,1,2,……,n-1,输入第一段曲线上的n点的坐标;
Step3:设A=L0,B=Ln-1,连接AB生成栈S,将B点入栈;
Step4:在AB之间寻找距离两点连线最远的点,记为C,该点到AB连线的距离记为d;
Step5:判断d与阈值的大小关系,若比阈值大,则B=C,并将C加入特征点序列入栈,重新连接AB,回到Step4;反之,则执行Step6;
Step6:判断B是否与栈顶元素Sn-1相等,若不相等,则A=C、B=Sn-1,重新连接AB,回到Step4;反之,则执行Step7;
Step7:判断B的坐标是否与Ln-1相等,若相等,则A=B、B=Sn-2,重新连接AB,S执行一次出栈动作,回到Step4;
Step8:若栈为空,代表第一段曲线处理完成,对第二段线重复以上操作。
进一步,所述步骤V)判断多边形轮廓顶点的凹凸性包括以下步骤:
①判断多边形的方向:
先将多边形轮廓的n个顶点依次记为P1,P2,…,Pn,下标1至n为顶点的顺序号,其中的最左极点记为PL,最右极点记为PR,最上极点记为PU,最下极点记为PD,若某方向上存在多个极点,则按顶点顺序中第一个出现的点作为此方向上的极点,其中下标L、R、U和D分别为对应极点的顺序号;定义沿着顶点顺序行走在多边形轮廓上时,多边形轮廓所围成的有界区域总在左手侧,则称该多边形的方向为逆时针方向;定义沿着顶点顺序行走在多边形轮廓上时,多边形轮廓所围成的有界区域总在右手侧,则称该多边形的方向为顺时针方向;
然后由四个极点的顺序号中大小顺序判断多边形的方向,判断方法如下:
第一种情况,当PL,PR,PU和PD中不存在重叠点时,判断规则为:若L<U<R或者R<D<L,则多边形的方向为顺时针;若L<D<R或者R<U<L,则多边形的方向为逆时针;
第二种情况,当PL,PR,PU和PD中仅有两个点重叠时,判断规则为:若D<L<R或者L<R<D或者L<U<R,则多边形的方向为顺时针;若L>R>U或者U>L>R或者L>D>R,则多边形的方向也为顺时针;若U<L<R或者L<R<U或者L<D<R,则多边形的方向为逆时针,若L>R>D或者D>L>R或者R<U<L,则多边形的方向也为逆时针;
第三种情况,当PL,PR,PU和PD中仅有两对点重叠时,则去掉多边形的一个极点去掉,并将该极点后的顶点顺序号减1,然后再按照PL,PR,PU和PD中仅有两个点重叠的情况判断多边形的方向;
②定义交于某顶点的相邻两条边所形成的内角为小于180°,则称该顶点为凸顶点;定义交于某顶点的相邻两条边所形成的内角为大于180°,则称该顶点为凹顶点;所述的内角是指位于多边形轮廓所围成的有界区域内的角;
对于一个有n个顶点的多边形,判断其中顶点Pi的凹凸性的方法是:先将顶点Pi与其前一个顶点Pi-1、后一个顶点Pi+1组成一个三角形,再判断该三角形的方向,判断三角形方向的方法为:
当该三角形可视为仅有两个极点重叠时的多边形时,三角形方向的判定方法与判断多边形方向的第二种情况相同;
当该三角形可视为有两对极点重叠时的多边形时,先用直线连接着两对重叠极点,并将直线的中点视为PL或PR,然后再按照判断多边形方向的第二种情况判断该三角形的方向;
如果三角形方向与多边形的方向一致,则顶点Pi为凸顶点,是反之则是凹顶点。
本发明的有益效果:
1、本发明基于轮廓凹凸性的药袋检测和抓取点定位方法,针对堆叠的药袋图像拟合后呈凸多边这一实际情况,创造性的利用相邻两药袋结合部顶点为凹顶点的特性来分割药袋,从而降低了堆叠药袋的分割难度,并在此基础上实现了对药袋最终抓取点的定位,解决了堆叠药袋当前最适宜抓取药袋的选取及定位问题。
2、本发明基于轮廓凹凸性的药袋检测和抓取点定位方法,依次判断拟合后近似多边形各点的凹凸性,则相邻两个凹点之间为一个药袋,分割出的面积最大的药袋即为需要检测的当前抓取药袋。相较于深度学习的目标检测算法,本发明采用的检测算法在保证检测精度的同时具有以下主要优点:1)无需采集大量的数据并进行标注和训练;2)对硬件设施的性能要求较低,方便植入嵌入式系统;3)处理时间相对较短,实时性好;4)高度还原药袋的矩形特征,方便了后续抓取点定位处理。
附图说明
图1为当前抓取药袋检测过程图;
图2为像素的连通场景;
图3为轮廓点获取效果图;
图4为像素点的8个扫描方向;
图5为轮廓跟踪效果图;
图6为轮廓提取效果图;
图7为改进的道格拉斯普克-算法流程图;
图8为轮廓拟合效果图;
图9为堆叠药袋分割效果图。
具体实施方式
下面结合附图和实施例对本发明作进一步描述。
本实施例基于轮廓凹凸性的药袋检测和抓取点定位方法,其包括以下步骤:
I)通过布置在分拣台上方的相机采集堆放在分拣台上的药袋的图像。
II)图像预处理:对相机采集的图像依次进行灰度化、中值滤波、二值化处理、闭操作和开操作。
灰度是指黑白图像中每个像素颜色值的简称,该值的范围一般是0到255,其中0为黑色,255为白色。相机采集的彩色图像,每个像素包含红(R)、绿(G)、蓝(B)三种分量。RGB图像反应的是目标物的颜色特性,而不是形态分布,并且需要处理的信息量是灰度图像的3倍。因此,为了后续对图像进行高效的分割、检测、识别等上层操作,需要将彩色图像转换从黑白图像,也就是完成灰度化处理。
本实施例中使用加权平均法将图像灰度化,计算公式如下:
Gray(i,j)=0.229*R(i,j)+0.578*G(i,j)+0.114*B(i,j)
式中Gray(i,j)是处理后每个像素的灰度值,R(i,j)、G(i,j)、B(i,j)分别对应原彩色中红、绿、蓝通道的值,三者的系数由人眼对每种光的感知能力确定,此种方式能较好的保留形态特征。
通常情况,受拍摄环境(如光照、灰尘等)影响或因相机本身的制造工艺存在缺陷,亦或是图片数字信号在编码、传输以及解码过程受到干扰,获得的图像一定程度上夹杂着噪声。因此,要在不破坏图像原有特征的情况下尽量消除噪声,也就是完成滤波处理。
本实施例中采用中值滤波来消除噪声,中值滤波是非线性的,其原理是获取周围像素点的灰度值,然后将这些灰度值进行排序,最后将中心点的像素值填充为排序后的中值。中值滤波不仅噪声抑制效果好,而且对图像的边缘信息保持也较好。
二值化是将图像上像素点的灰度值置为0或255。灰度图像经过二值化处理后像素的级数骤减为2,处理变得简单。
为了使后续的上层操作达到理想效果还需对图像进行形态学操作。形态学操作先设定结构元素,该元素对一部分信息处理效果明显、另一部分不明显,因此可以实现对特定信息的操作,从而获得理想输出。形态学有四种基本操作:膨胀、腐蚀、开操作以及闭操作。本实施例中使用闭操作平滑袋子的轮廓,填充内部轮廓;使用开操作去除分拣台灰尘等杂质带来的干扰。
III)对步骤II)处理后的二值图像进行轮廓跟踪,轮廓跟踪包括确定轮廓的边界点和寻找下一个轮廓点;
所述确定轮廓的边界点包括以下步骤:
a)将二值图像中灰度值为0和1的像素分别称为0像素点和1像素点,第i行、j列的像素点记为(i,j),用f[i][j]表示该点的灰度值则有:
b)逐行扫描二值图像,扫描过程中遇到1像素时统计该点在其8连通方向和4连通方向上1像素点的个数,分别用num_8和num_4表示,则有:
c)判断边界点情况:
(1)若1<num_8[i][j]<4,则该点为边界点,令f[i][j]=1;
(2)若3<num_8[i][j]<8,继续判断num_4[i][j]的值,若num_4[i][j]≠4则该点为边界点,令f[i][j]=1;
(3)情况(1)和情况(2)外的其它情况,该点不是边界点,令f[i][j]=0;
d)去除步骤c)获得的图像边界点中的干扰点:首先定义以下变量
接着按以下步骤排除干扰点:
Step1:逐行扫描过程遇到num_a[i][j]=4的像素点执行Step2,否则执行Step6;
Step2:若num_b[i][j]=num_down[i][j],则该点的上一行两点是伪边界点,令f[i][j]=0,f[i][j+1]=0;
Step3:若num_b[i][j]=num_up[i][j],则该点的下一行两点是伪边界点,令f[i+1][j]=0,f[i+1][j+1]=0;
Step4:若num_b[i][j]=num_left[i][j],则该点的右侧一行两点是伪边界点,令f[i+1][j]=0,f[i+1][j+1]=0;
Step5:若num_b[i][j]=num_right[i][j],则该点的左侧一行两点是伪边界点,令f[i][j]=0,f[i][j+1]=0;
Step6:该点处理结束,继续处理下一个点。
最终保留的点为边界点。传统的8连通边界扫描法处理规则是:若某点的8连通域内1像素点的个数在2到7之间就视为边界点;否则视为非边界点,因此保留的边界点较多;而本实施例通过排出干扰点后,获得的轮廓点更少。
所述寻找下一个轮廓点包括以下步骤:
Step1:按逐行扫描方式对图像进行扫描,将找到的第一个轮廓点记为p0,按设定的扫描方向dir在该轮廓点的8邻域中寻找下一个边界点,本实施例中的扫描方向如图4所示按图中0到7的顺序在其8邻域中寻找下一个边界点;当f[i][j]=1时记录扫描方向,令pre_dir=dir,f[i][j]=0,并且将该点的位置记作p_next;
Step2:在p_next点处,按照相同的扫描方向dir扫描其8邻域,权重wei为某点8邻域中1像素点的个数,当某点满足f[i][j]=1并且wei[i][j]=2,则该点为下一个选择点,否则继续;当dir=pre_dir并且f[i][j]=1,则该点是下一个选择点,否则选择第一个f[i][j]=1的点,记录该点的位置p_now和方向dir,并且令f[i][j]=0;
Step3:若p_now=p0,轮廓扫描结束,转到Step1,继续扫描另一个区域,将找到的第一个边界点记为p1;
Step4:若p_now≠p0,令p_next=p_now,pre_dir=dir继续执行第二步;
Step5:如果二值图像中找不到任何1像素点,则轮廓跟踪结束。
本实施例中采用的轮廓跟踪规则综合了前一个点的扫描方向dir以及下一个点的权重wei。本实施例中扫描方向dir的规则如图4所示,权重wei为某点8邻域中1像素点的个数。图5对目标边界跟踪的结果,轮廓点从0开始,按照0,1,…,27的顺序记录,使用以上算法能获取药袋图像的轮廓。药袋堆叠情况下,为了降低吸头落到药袋之间的叠缝处的概率,采取由外而内的方式抓取,因此可将内轮廓舍去,药袋图像的最终的轮廓提取效果如图6所示。
IV)对轮廓进行拟合得到多边形轮廓,包括以下步骤:
Step1:获取轮廓曲线上曲率最大的点,该点将曲线分成两段,两段都有对应的点序列,分别对每一段进行处理;
Step2:记Li为第一段曲线上的点,下标i=0,1,2,……,n-1,输入第一段曲线上的n点的坐标;
Step3:设A=L0,B=Ln-1,连接AB生成栈S,将B点入栈;
Step4:在AB之间寻找距离两点连线最远的点,记为C,该点到AB连线的距离记为d;
Step5:判断d与阈值的大小关系,若比阈值大,则B=C,并将C加入特征点序列入栈,重新连接AB,回到Step4;反之,则执行Step6;
Step6:判断B是否与栈顶元素Sn-1相等,若不相等,则A=C、B=Sn-1,重新连接AB,回到Step4;反之,则执行Step7;
Step7:判断B的坐标是否与Ln-1相等,若相等,则A=B、B=Sn-2,重新连接AB,S执行一次出栈动作,回到Step4;
Step8:若栈为空,代表第一段曲线处理完成,对第二段线重复以上操作。
图像处理中一般使用道格拉斯-普克(简称D-P)算法对轮廓进行拟合,该算法具有旋转和平移不变性,原理是用一系列点近似表示曲线,然后通过设定阈值去除其中部分点,最终结果由未删除的点组成。然而传统的D-P算法用递归实现耗时长,而且如果递归层次太深可能造成栈溢出。
为了保留极点,用极点将曲线分成两段处理。然而传统的D-P算法没有记录中间距离最大的节点,导致递归嵌套层次深,程序运行慢。本实施例中借助栈数据结构实现D-P算法的分段处理,该算法以曲线的一端为起始点,将第一个点和最后一个点作改进的D-P算法处理范围,接下来比较最远点的距离与阈值的关系,以此简化线要素。使用改进的D-P算法能实现轮廓的快速拟合,获取目标物的多边形近似轮廓。但在拟合的过程如果阈值过大关键信息会丢失,会导致抓取点定位不精准;如果阈值过小,则会导致后续处理的信息增加。本实施例中采用的是迭代阈值法,即先设一个原始阈值,计算拟合各点之间的距离,如果存在距离较小的点则将阈值增大,继续进行拟合。
V)判断多边形轮廓顶点的凹凸性,包括以下步骤:
①判断多边形的方向:
先将多边形轮廓的n个顶点依次记为P1,P2,…,Pn,下标1至n为顶点的顺序号,其中的最左极点记为PL,最右极点记为PR,最上极点记为PU,最下极点记为PD,若某方向上存在多个极点,则按顶点顺序中第一个出现的点作为此方向上的极点,其中下标L、R、U和D分别为对应极点的顺序号;定义沿着顶点顺序行走在多边形轮廓上时,多边形轮廓所围成的有界区域总在左手侧,则称该多边形的方向为逆时针方向;定义沿着顶点顺序行走在多边形轮廓上时,多边形轮廓所围成的有界区域总在右手侧,则称该多边形的方向为顺时针方向;
然后由四个极点的顺序号中大小顺序判断多边形的方向,判断方法如下:
第一种情况,当PL,PR,PU和PD中不存在重叠点时,判断规则为:若L<U<R或者R<D<L,则多边形的方向为顺时针;若L<D<R或者R<U<L,则多边形的方向为逆时针;
第二种情况,当PL,PR,PU和PD中仅有两个点重叠时,判断规则为:若D<L<R或者L<R<D或者L<U<R,则多边形的方向为顺时针;若L>R>U或者U>L>R或者L>D>R,则多边形的方向也为顺时针;若U<L<R或者L<R<U或者L<D<R,则多边形的方向为逆时针,若L>R>D或者D>L>R或者R<U<L,则多边形的方向也为逆时针;
第三种情况,当PL,PR,PU和PD中仅有两对点重叠时,则去掉多边形的一个极点去掉,并将该极点后的顶点顺序号减1,然后再按照PL,PR,PU和PD中仅有两个点重叠的情况判断多边形的方向;
②定义交于某顶点的相邻两条边所形成的内角为小于180°,则称该顶点为凸顶点;定义交于某顶点的相邻两条边所形成的内角为大于180°,则称该顶点为凹顶点;所述的内角是指位于多边形轮廓所围成的有界区域内的角;
对于一个有n个顶点的多边形,判断其中顶点Pi的凹凸性的方法是:先将顶点Pi与其前一个顶点Pi-1、后一个顶点Pi+1组成一个三角形,再判断该三角形的方向,判断三角形方向的方法为:
当该三角形可视为仅有两个极点重叠时的多边形时,三角形方向的判定方法与判断多边形方向的第二种情况相同;
当该三角形可视为有两对极点重叠时的多边形时,先用直线连接着两对重叠极点,并将直线的中点视为PL或PR,然后再按照判断多边形方向的第二种情况判断该三角形的方向;
如果三角形方向与多边形的方向一致,则顶点Pi为凸顶点,是反之则是凹顶点;
VI)药包分割:从顶点P1出发依次对多边形轮廓各顶点的凹凸性进行判断,在两相邻凹顶点之间分割出的一个药袋;
VII)定位堆叠药袋抓取点:先计算拟合得到多边形轮廓中分割后各药袋的边长和,将边长和最大的药袋视为与其它药袋的重叠面积最小,也就是当前最适合抓取的药袋;然后从该药袋的轮廓拟合图中获取药袋的长和宽,将药袋还原成矩形;然后再找出药袋在拟合图像中的最长边的中点,再将该中点沿垂直于最长边方向,向药袋内平移,平移距离为药袋宽度的五分之二,平移后的点为最终抓取点。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (4)
1.一种基于轮廓凹凸性的药袋检测和抓取点定位方法,包括以下步骤:
I)通过布置在分拣台上方的相机采集堆放在分拣台上的药袋的图像;
II)对相机采集的图像依次进行灰度化、中值滤波、二值化处理、闭操作和开操作;
III)对步骤II)处理后的二值图像进行轮廓跟踪;
IV)对外轮廓进行拟合得到多边形轮廓;
其特征在于:
V)判断多边形轮廓顶点的凹凸性;
VI)药包分割:在多边形轮廓的两相邻凹顶点之间分割出的一个药袋;
VII)定位堆叠药袋抓取点:先计算拟合得到多边形轮廓中分割后各药袋的边长和,将边长和最大的药袋视为与其它药袋的重叠面积最小,也就是当前最适合抓取的药袋;然后从该药袋的轮廓拟合图中获取药袋的长和宽,将药袋还原成矩形;然后再找出药袋在拟合图像中的最长边的中点,再将该中点沿垂直于最长边方向,向药袋内平移,平移距离为药袋宽度的五分之二,平移后的点为最终抓取点。
2.根据权利要求1所述的基于轮廓凹凸性的药袋检测和抓取点定位方法,其特征在于:
所述步骤III)中轮廓跟踪包括确定轮廓的边界点和寻找下一个轮廓点;
所述确定轮廓的边界点包括以下步骤:
a)将二值图像中灰度值为0和1的像素分别称为0像素点和1像素点,第i行、j列的像素点记为(i,j),用f[i][j]表示该点的灰度值则有:
b)逐行扫描二值图像,扫描过程中遇到1像素时统计该点在其8连通方向和4连通方向上1像素点的个数,分别用num_8和num_4表示,则有:
c)判断边界点情况:
(1)若1<num_8[i][j]<4,则该点为边界点,令f[i][j]=1;
(2)若3<num_8[i][j]<8,继续判断num_4[i][j]的值,若num_4[i][j]≠4则该点为边界点,令f[i][j]=1;
(3)情况(1)和情况(2)外的其它情况,该点不是边界点,令f[i][j]=0;
d)去除步骤c)获得的图像边界点中的干扰点:首先定义以下变量
接着按以下步骤排除干扰点:
Step1:逐行扫描过程遇到num_a[i][j]=4的像素点执行Step2,否则执行Step6;
Step2:若num_b[i][j]=num_down[i][j],则该点的上一行两点是伪边界点,令f[i][j]=0,f[i][j+1]=0;
Step3:若num_b[i][j]=num_up[i][j],则该点的下一行两点是伪边界点,令f[i+1][j]=0,f[i+1][j+1]=0;
Step4:若num_b[i][j]=num_left[i][j],则该点的右侧一行两点是伪边界点,令f[i+1][j]=0,f[i+1][j+1]=0;
Step5:若num_b[i][j]=num_right[i][j],则该点的左侧一行两点是伪边界点,令f[i][j]=0,f[i][j+1]=0;
Step6:该点处理结束,继续处理下一个点;
所述寻找下一个轮廓点包括以下步骤:
Step1:按逐行扫描方式对图像进行扫描,将找到的第一个轮廓点记为p0,按设定的扫描方向dir在该轮廓点的8邻域中寻找下一个边界点;当f[i][j]=1时记录扫描方向,令pre_dir=dir,f[i][j]=0,并且将该点的位置记作p_next;
Step2:在p_next点处,按照相同的扫描方向dir扫描其8邻域,权重wei为某点8邻域中1像素点的个数,当某点满足f[i][j]=1并且wei[i][j]=2,则该点为下一个选择点,否则继续;当dir=pre_dir并且f[i][j]=1,则该点是下一个选择点,否则选择第一个f[i][j]=1的点,记录该点的位置p_now和方向dir,并且令f[i][j]=0;
Step3:若p_now=p0,轮廓扫描结束,转到Step1,继续扫描另一个区域,将找到的第一个边界点记为p1;
Step4:若p_now≠p0,令p_next=p_now,pre_dir=dir继续执行第二步;
Step5:如果二值图像中找不到任何1像素点,则轮廓跟踪结束。
3.根据权利要求1所述的基于轮廓凹凸性的药袋检测和抓取点定位方法,其特征在于:所述步骤IV)中对轮廓进行拟合包括以下步骤:
Step1:获取轮廓曲线上曲率最大的点,该点将曲线分成两段,两段都有对应的点序列,分别对每一段进行处理;
Step2:记Li为第一段曲线上的点,下标i=0,1,2,……,n-1,输入第一段曲线上的n点的坐标;
Step3:设A=L0,B=Ln-1,连接AB生成栈S,将B点入栈;
Step4:在AB之间寻找距离两点连线最远的点,记为C,该点到AB连线的距离记为d;
Step5:判断d与阈值的大小关系,若比阈值大,则B=C,并将C加入特征点序列入栈,重新连接AB,回到Step4;反之,则执行Step6;
Step6:判断B是否与栈顶元素Sn-1相等,若不相等,则A=C、B=Sn-1,重新连接AB,回到Step4;反之,则执行Step7;
Step7:判断B的坐标是否与Ln-1相等,若相等,则A=B、B=Sn-2,重新连接AB,S执行一次出栈动作,回到Step4;
Step8:若栈为空,代表第一段曲线处理完成,对第二段线重复以上操作。
4.根据权利要求1所述的基于轮廓凹凸性的药袋检测和抓取点定位方法,其特征在于:所述步骤V)判断多边形轮廓顶点的凹凸性包括以下步骤:
①判断多边形的方向:
先将多边形轮廓的n个顶点依次记为P1,P2,…,Pn,下标1至n为顶点的顺序号,其中的最左极点记为PL,最右极点记为PR,最上极点记为PU,最下极点记为PD,若某方向上存在多个极点,则按顶点顺序中第一个出现的点作为此方向上的极点,其中下标L、R、U和D分别为对应极点的顺序号;定义沿着顶点顺序行走在多边形轮廓上时,多边形轮廓所围成的有界区域总在左手侧,则称该多边形的方向为逆时针方向;定义沿着顶点顺序行走在多边形轮廓上时,多边形轮廓所围成的有界区域总在右手侧,则称该多边形的方向为顺时针方向;
然后由四个极点的顺序号中大小顺序判断多边形的方向,判断方法如下:
第一种情况,当PL,PR,PU和PD中不存在重叠点时,判断规则为:若L<U<R或者R<D<L,则多边形的方向为顺时针;若L<D<R或者R<U<L,则多边形的方向为逆时针;
第二种情况,当PL,PR,PU和PD中仅有两个点重叠时,判断规则为:若D<L<R或者L<R<D或者L<U<R,则多边形的方向为顺时针;若L>R>U或者U>L>R或者L>D>R,则多边形的方向也为顺时针;若U<L<R或者L<R<U或者L<D<R,则多边形的方向为逆时针,若L>R>D或者D>L>R或者R<U<L,则多边形的方向也为逆时针;
第三种情况,当PL,PR,PU和PD中仅有两对点重叠时,则去掉多边形的一个极点去掉,并将该极点后的顶点顺序号减1,然后再按照PL,PR,PU和PD中仅有两个点重叠的情况判断多边形的方向;
②定义交于某顶点的相邻两条边所形成的内角为小于180°,则称该顶点为凸顶点;定义交于某顶点的相邻两条边所形成的内角为大于180°,则称该顶点为凹顶点;所述的内角是指位于多边形轮廓所围成的有界区域内的角;
对于一个有n个顶点的多边形,判断其中顶点Pi的凹凸性的方法是:先将顶点Pi与其前一个顶点Pi-1、后一个顶点Pi+1组成一个三角形,再判断该三角形的方向,判断三角形方向的方法为:
当该三角形可视为仅有两个极点重叠时的多边形时,三角形方向的判定方法与判断多边形方向的第二种情况相同;
当该三角形可视为有两对极点重叠时的多边形时,先用直线连接着两对重叠极点,并将直线的中点视为PL或PR,然后再按照判断多边形方向的第二种情况判断该三角形的方向;
如果三角形方向与多边形的方向一致,则顶点Pi为凸顶点,是反之则是凹顶点。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202111081882.5A CN113888570B (zh) | 2021-09-15 | 2021-09-15 | 基于轮廓凹凸性的药袋检测和抓取点定位方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202111081882.5A CN113888570B (zh) | 2021-09-15 | 2021-09-15 | 基于轮廓凹凸性的药袋检测和抓取点定位方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN113888570A CN113888570A (zh) | 2022-01-04 |
| CN113888570B true CN113888570B (zh) | 2024-12-03 |
Family
ID=79009415
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202111081882.5A Active CN113888570B (zh) | 2021-09-15 | 2021-09-15 | 基于轮廓凹凸性的药袋检测和抓取点定位方法 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN113888570B (zh) |
Families Citing this family (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN120180094B (zh) * | 2025-03-14 | 2025-10-24 | 中环洁(北京)环境科技有限公司 | 道路积尘状况监测方法、系统、设备及介质 |
Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN103596540A (zh) * | 2011-04-28 | 2014-02-19 | 株式会社汤山制作所 | 药剂检查装置和药剂分包装置 |
| CN107256406A (zh) * | 2017-04-19 | 2017-10-17 | 深圳清华大学研究院 | 重叠纤维图像分割方法、装置、存储介质和计算机设备 |
Family Cites Families (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH07200820A (ja) * | 1993-12-28 | 1995-08-04 | Sanyo Electric Co Ltd | 画像認識処理方法 |
| CN110415257B (zh) * | 2019-07-23 | 2023-08-22 | 东南大学 | 一种气液两相流重叠气泡图像分割方法 |
-
2021
- 2021-09-15 CN CN202111081882.5A patent/CN113888570B/zh active Active
Patent Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN103596540A (zh) * | 2011-04-28 | 2014-02-19 | 株式会社汤山制作所 | 药剂检查装置和药剂分包装置 |
| CN107256406A (zh) * | 2017-04-19 | 2017-10-17 | 深圳清华大学研究院 | 重叠纤维图像分割方法、装置、存储介质和计算机设备 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN113888570A (zh) | 2022-01-04 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN113408584B (zh) | Rgb-d多模态特征融合3d目标检测方法 | |
| CN110414559B (zh) | 智能零售柜商品目标检测统一框架的构建方法及商品识别方法 | |
| CN105046252B (zh) | 一种人民币冠字码识别方法 | |
| CN117036641A (zh) | 一种基于双目视觉的公路场景三维重建与缺陷检测方法 | |
| CN112906583B (zh) | 一种车道线检测方法及装置 | |
| CN110309808B (zh) | 一种大范围尺度空间下的自适应烟雾根节点检测方法 | |
| CN108629286B (zh) | 一种基于主观感知显著模型的遥感机场目标检测方法 | |
| CN108491786A (zh) | 一种基于分级网络和聚类合并的人脸检测方法 | |
| CN106169080A (zh) | 一种基于图像的燃气指数自动识别方法 | |
| CN108615229B (zh) | 基于曲率点聚类及决策树的碰撞检测优化方法 | |
| CN108492263B (zh) | 一种镜头径向畸变校正方法 | |
| CN115100615A (zh) | 一种基于深度学习的端到端车道线检测方法 | |
| CN109376641A (zh) | 一种基于无人机航拍视频的运动车辆检测方法 | |
| CN115937552A (zh) | 一种基于融合手工特征与深度特征的图像匹配方法 | |
| CN113888570B (zh) | 基于轮廓凹凸性的药袋检测和抓取点定位方法 | |
| CN117372680A (zh) | 一种基于双目相机与激光雷达融合的目标检测方法 | |
| CN109919958A (zh) | 一种基于多尺度图像空间的多重约束线段提取方法 | |
| CN113963070B (zh) | 一种圆形标定板识别方法 | |
| CN115620259A (zh) | 一种基于交通非现场执法场景下的车道线检测方法 | |
| CN109948461B (zh) | 一种基于质心定位和距离变换的手语图像分割方法 | |
| CN118230131A (zh) | 一种图像识别及目标检测方法 | |
| CN110517291A (zh) | 一种基于多特征空间融合的道路车辆跟踪方法 | |
| CN115908774B (zh) | 一种基于机器视觉的变形物资的品质检测方法和装置 | |
| CN107704864B (zh) | 基于图像对象性语义检测的显著目标检测方法 | |
| CN107798291B (zh) | 一种限速标识识别方法、装置和系统 |
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 | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |