基于python的中药颗粒表面缺陷检测算法设计
2018-10-20刘雅
刘雅
摘要: 传统的中药都是通过熬制成为汤剂进行服用,虽然中药汤剂可以将中药效果更好地发挥出来,但是多数中药味苦涩口,难以服用,同时在携带等方面都存在较多弊端。因此,中药颗粒应运而生。颗粒状药品生产过程中,难以避免地存在表面污点、糖衣颜色不一、皱纹、边缘缺损、碎裂等各种不同的缺陷,中药颗粒的检测及质量控制就显得非常重要。本文建立基于python的中药颗粒表面缺陷检测算法,可用于颗粒状中药的批量快速缺陷检测,大大提高检测效率。
关键词: 中药颗粒;表面缺陷;python;算法设计
中图分类号: TP3-4 文献标识码: A 文章编号: 1672-9129(2018)09-0087-01
Abstract: Traditional Chinese medicines are made by using medlar as a decoction. Although traditional Chinese medicine decoction can better exert the effect of traditional Chinese medicine, most traditional Chinese Medicines are bitter and difficult to take, and there are many disadvantages in carrying. Therefore, Chinese Medicine granules came into being. In the production process of granular drugs, various defects such as surface stains, different colors of sugar coatings, wrinkles, edge defects and chipping are inevitable. The detection and quality control of Traditional Chinese Medicine granules is very important. This paper establishes a python-based Chinese Medicine granules surface defect detection algorithm, which can be used for batch rapid defect detection of Chinese Medicine granules, which greatly improves the detection efficiency.
Key words: traditional Chinese Medicine granule;surface defects;python;algorithm design
中药颗粒的质量与生产、运输、储藏等都有着密切的联系,在临床上其实对中药颗粒的质量检测并没有严格的要求。但是,近年来随着国家对中医药产业的重视和大力扶持,我国中药行业的发展速度惊人。中药颗粒作为效果好、储存和携带方便的中医药制剂,迅速成为人们治疗过程中常用的药物剂型之一。而中药颗粒剂生产过程中,难以避免地存在表面污点、糖衣颜色不一、皱纹、边缘缺损、碎裂等各种不同的缺陷,严重影响中药颗粒剂产品的质量和外观形象,使得中药颗粒表面缺陷逐渐引起了业内外的普遍重视。因此,加大中医药颗粒检测,减少缺陷产品,提升中药颗粒剂产品质量和形象势在必行。作为一款面向对象的解释型计算机程序设计语言,Python具有丰富和强大的库,语法简洁清晰、通用性好。利用Python对中药颗粒的表面缺陷检测方法进行编写示范,有较强的借鉴作用和应用价值。
本文以椭圆形颗粒状中药为例,采用Python编写的边缘缺陷检测算法设计过程如下:
# findContours函数查找图像里的图形轮廓
# 函数参数thresh是图像对象
# 层次类型,参数cv2.RETR_EXTERNAL是获取最外层轮廓,cv2.RETR_TREE是获取轮廓的整体结构
# 轮廓逼近方法
# 输出的返回值,image是原图像、contours是图像的轮廓、hier是层次类型
image, contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
x, y, w, h = cv2.boundingRect(c)
if w*h>5000 and w*h <8000:
rect = cv2.minAreaRect(c)
box = cv2.boxPoints(rect) # 计算最小面积矩形的坐标
box = np.int0(box) # 将坐标规范化为整数
cv2.drawContours(img, [box], 0, (0, 0, 255), 3) # 绘制矩形
M = cv2.moments(c) # 实际物体面积
area = M[\\'m00\\']
#print(\\'area:\\', area)
ellipse = cv2.fitEllipse(c) # 椭圆面积
cv2.ellipse(img, ellipse, (255, 0, 0), -1)
# # print(w*h)
# cx = M[\\'m10\\']/M[\\'m00\\'] # # 中心
# cy = M[\\'m01\\']/M[\\'m00\\']
ellipse_area = np.pi*ellipse[1][0]*ellipse[1][1]/4
#print(ellipse_area)
if np.abs(ellipse_area-area)<40 and np.abs(ellipse[1][0]-ellipse[1][1])>25: # 判斷
print(\\'无缺陷\\')
else:
print(\\'有缺陷\\')
中药颗粒的形状为椭圆,通过计算分割出的药片的面积大小及其轮廓创建的椭圆。如果是正常中药颗粒,其形状为椭圆,根据其轮廓创建的椭圆与药片形状近似完全重合;如果中药颗粒有缺陷,根据其轮廓创建的椭圆与药片形状有较大偏差。所以我们根据药片的面积和椭圆的面积的差值就可以判断药片是否存在缺陷。此外,根据完整中药颗粒创建的椭圆,其长轴和短轴满足一定的差值关系,所以根据药片创建的椭圆长轴短轴关系进行判断,也可找出有缺陷的中药颗粒。综合考虑面积关系和长短轴关系,可以得到非常好的缺陷判断模型。
总结:中药颗粒的发展,有利于中医药事业的发展,更有利于公众的健康维护。在中药颗粒发展壮大的路上,我们在注重数量的同时,更应注重产品质量。基于Python的中药颗粒表面缺陷检测技术,可以帮助企业更快速地筛选掉有缺陷的产品,提高生产效率的同时,还能够提高中药颗粒剂产品质量与外在形象。
参考文献:
[1]付红伟,陈锋,程松,吴笛. 医学图像的计算机处理——边缘检测[J]//软件导刊.2011(1):172-173.
[2]刘萍. 基于图像的产品缺陷特征提取方法[J].西安工业大学学报,2012, (9):707-708.