logo资料库

区域生长法.pdf

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
基于 OpenCV 的抑菌圈标签识别预处理算法实现 http://www.paper.edu.cn 黄建琼,朱冰莲,谭骁彧 重庆大学通信工程学院,重庆(400030) E-mail:huangyusang0103@163.com 摘 要:在 VC++6.0 开发环境下,结合 OpenCV 开源计算机视觉库,编程实现了抑菌圈药 物标签自动识别的预处理算法,主要包括灰度化处理、药片定位、二值化、字符旋转、字符 分割和归一化几个模块。由于 OpenCV 强大的图像处理功能和开放的 C/C++优化代码,使得 编程非常简单。实验结果表明,整个预处理效果较好,为后续的药片标签自动识别奠定了良 好的基础。 关键词:OpenCV,抑菌圈,字符识别,预处理 中图分类号:TP311.11 1. 引言 抗生素是医疗上广泛应用的药品。为保证其质量,生产及药检部门都要严格地按照国家 药典的规定对药品进行多种检验。目前国内外抗生素效价测定的通用方法是微生物检定 法——管碟法。它是利用抗生素在培养特定实验菌的琼脂培养基内扩散,形成抑制实验菌繁 殖的含抗生素的圆形区,通过测量微生物抑菌圈大小得到抗生素效价。 抑菌圈大小的自动测试已有较多的研究,但如何自动识别图片中抗生素药物的标签,以 解决现有抑菌圈测量系统中靠人工方式对药品标签进行识别与记录的的问题,尚无相关报 道。针对这一问题,课题重点解决图片中药物标签的自动识别。本文在 VC++6.0 环境下, 结合 OpenCV 开发库,编程实现了抑菌圈药物标签自动识别的预处理算法。 OpenCV 是 Intel 的开源计算机视觉库。它由一系列 C 函数和少量 C++类构成,实现了 图像处理和计算机视觉方面的很多通用算法,具有强大的图像和矩阵运算能力。作为一个基 本的计算机视觉、图像处理和模式识别的开源库,OpenCV 可以直接应用于很多领域,是第 二次开发的理想工具[1]。 2. 系统构成 微生物抑菌圈自动测量及药物标签自动识别系统的原理框图如图 1 所示。整个系统分为 硬件和软件两个部分。硬件部分完成菌碟图像的获取,本课题采用数码照相机获取图像。软 件部分完成对药品标签英文简写的识别,将其与建立的药品数据库进行对比,并对相应药品 的抑菌圈直径进行检测,将检测的结果写入数据库管理系统,从而计算出抗生素的效价。 图 像 获 取 标签识别 预处理 圆检测 预处理 药品名 称识别 菌圈直 径测量 药品 管理 数据 库 硬件部分 软件部分 图1 系统框图 - 1 -
http://www.paper.edu.cn 3. 图像预处理 在对抗生素药物标签进行自动识别以前,必须要对菌碟图片进行合适的预处理,将药物 标签字符提取出来。在整个系统中,预处理模块的地位非常重要,提取出来的字符的好坏, 直接影响到后续字符识别的准确性。对菌碟图片的预处理过程如图 2 所示,主要包括灰度化 处理、药片定位、二值化、字符旋转、字符分割、归一化几个模块。 读入图像 归一化 灰度化处理 字符分割 区域增长 字符旋转 菌碟大圆定位 二值化 药片小圆定位 药片定位 图2 预处理流程图 3.1 灰度化处理 预处理的第一步是读入获取的菌碟图像。使用 OpenCV 中的 cvLoadImage 函数,就可以 很方便地从文件中读入原始图像,图像既可以是彩色图像,也可以是灰度图像,并且该函数 可以支持 BMP、JPEG、PNG、TIFF、PBM 等多种图像格式。 从照相机中获取的图像为彩色图像,如果直接处理彩色图像,其数据庞大将会降低系统 处理的速度。因此图像预处理部分首先进行灰度化。OpenCV 中的 cvCvtColor 函数是将输入 图像从一个色彩空间转换为另外一个色彩空间,将其中的参数选为 CV_RGB2GRAY 就可以 实现灰度化处理。 3.2 药片小圆定位 提取药片小圆前,先将菌碟大圆从灰度图中分割出来。本课题采取的图像分割方法为区 域增长法。由于测量不同抗生素药品的效价所采用的琼脂培养基不同,使得药片和琼脂培养 基背景之间的灰度差不一样,因此,为增强自适应性,区域增长的阈值不能为固定值。考虑 到拍摄的图片大小一样,每张图片中一般都包含一个或多个药片,且药片大小基本一样,将 菌碟大圆中除药片以外的所有点作为背景点,把这些背景点的总个数作为是否循环进行区域 增长的判决条件,就能将不同培养基的菌碟大圆都分割出来。具体算法过程入下: ① 设初始阈值变量 T1,设定背景像素个数 area 初始值为 0,并调用 cvCreateImage 函 数创建一副区域增长图片 Region,其大小与原始灰度图相同,并使用 cvZero 函数将其灰度 值全部置为 0。 ② 考虑到每幅图片中心部分不存在药片小圆,故选图片中心点为初始生长点。在生长 过程中,每个生长点按 4 邻域和初始生长点的灰度值相比较,如果灰度差的绝对值
http://www.paper.edu.cn 个数 area 的值加 1。重复检查区域内的像素点,直到没有新的种子点为止。此时的 area 值就 表示菌碟大圆中背景点的个数。 ③ 对多幅图片进行测试,得到 area 的一个判决阈值 T2,如果区域增长后得到的 area 值小于 T2,说明 T1 取值过小,于是将 T1 值加 1 后,重复步骤②,直到 area 值大于 T2。 得到区域增长图以后,通过行列扫描定位菌碟大圆,去除菌碟外部不必要的背景信息, 将大圆切分出来。调用 OpenCV 中的 cvThreshold 函数进行反色处理,将药片小圆置为前景 色。 图 3 中(a)、(b)分别是区域增长前的菌碟灰度图,以及初始阈值 T1=8,area 的判决阈值 T2=65000 时区域增长后的图片,(c)为切分出的菌碟大圆并反色后的结果。 (a) (b) (c) 图3 菌碟大圆的分割 图3(c)中有许多离散噪声点,经过开运算,即先腐蚀后膨胀的过程,能够去除孤立的小 点、毛刺和小桥(即联通两块区域的小点),同时并不明显改变其面积[2]。开运算过程仍然 调用OpenCV中的函数就可简单实现。cvErode对图像进行腐蚀,cvDilate完成对图像的膨胀。 下一步就是切割药片小圆。药片小圆的切割采用连通域检测方法。先从图 4 的二值图像 中提取小圆的轮廓,并且返回轮廓的数目,再根据每个轮廓的外接矩形框,得到每个小圆的 半径和它在灰度图中的起始坐标值。由于每个药片小圆为一个连通域,药片的宽、高都在固 定范围以内,故可设定连通域外接矩形宽度和高度的门限值,来判断检测到的连通域是药片 小圆还是噪声。根据这些信息,就可以将药片小圆从图 3(a)的菌碟灰度图中分割出来。整个 过程调用 OpenCV 库中的 cvFindContours 以及 cvBoundingRect 两个函数就可以完成。前者 实现轮廓的提取,后者得到每个轮廓的最外部矩形边界信息。图 4 为分割出来的药片小圆灰 度图。 图4 药片小圆灰度图 3.3 二值化 一般来说,二值化方法可以分为全局二值化和局部自适应二值化方法。全局二值化方法 对每一幅图像计算一个单一的阈值,而局部自适应阈值方法以象素的邻域信息为基础来计算 每一个象素的阈值。当照明不均匀,有突发噪声时,单一的阈值不能兼顾图像各个像素的实 际情况,所以本文对药片小圆的二值化处理,采用对每一个像素单独求取阈值的自适应阈值 化方法。算法如下: mean x y ( , ) = 1 N 2 ( f x y ( i , i ) ∑ x y S , ) ∈ i i ( , T x y mean x y K ( , = ) ) − - 3 -
http://www.paper.edu.cn g x y ( , ) ⎧ = ⎨ ⎩ 0 255 if f x y ) ( , otherwise > T x y ( , ) 其中,f(x,y) 为输人灰度图像;g(x,y) 为输出二值图像;T(x,y)为象素点(x,y)的分割阈 值;mean(x,y)为像素(x,y)N*N 邻域 S 内灰度值的均值,K 为一个常数。 调 用 OpenCV 库 中 cvAdaptiveThreshold 函 数 , 将 参 数 选 为 CV_ADAPTIVE_THRESH_MEAN_C。即可实现本课题中的自适应阈值算法。二值化以后的 图片在背景和药片的过渡区会形成一些离散亮点,若药片圆半径为 r,某象素点到图片中心 点距离大于 0.9r,则这些位置并不是我们感兴趣的字符区域,将其重置为背景色。 图 5 中(a)、(b)、(c)三幅图,即本课题采用的阈值方法,(d)、(e)、(f) 三幅图是常用的基于迭代运算的阈值分割[3]结果。对比分析可以看出,(a)中没有(d)中 的字符粘连现象, (b)图中没有出现(e)中的字母模糊现象,且(c)中的下划线也比(f) 中的下划线更完整,这样有助于后续的旋转处理。所以,本文的算法,结合 OpenCV 中现有 函数的编程实现,不仅简单方便,而且效果较好。 (a) (b) (c) (d) (e) (f) 图5 阈值化 3.4 字符旋转 有两种标签字符,一类只有一行字符串,且不含下划线,另外一类就是两行字符串,并 且含有一条与字符平行的下划线,下划线的长度稍大于两个字符的宽度。所以,本文根据是 否检测到下划线,分为两种不同的情况来计算偏转角。 常用的检测直线的方法是主要是基于Hough 变换的方法[4],但其计算量较大。本文采用 如下方法来检测下划线:首先用OpenCV中的cvFindContours、cvBoundingRect两个函数,在 阈值化图像中检测连通域,如果没有粘连情况,一个字符即为一个连通域,并得到每个连通 域的外部矩形框信息,如果有下划线则应该刚好位于它对应矩形的一条对角线上;然后检测 每个连通域矩形的两条对角线,分别计算每条对角线N等分点上亮像素的个数值K,如果其 中一条对角线上的K值大于一定的阈值T1,而另一条对角线的K值小于另一个阈值T2,则该 连通域为下划线;由于某些字符旋转后其外部矩形的对角线上有可能也是直线,比如I,所 以还要对检测到的多条直线进行比较,长度最长的为下划线。检测到下划线以后,就可以直 接根据下划线外部矩形框的宽、高,计算出斜率和偏转角。 如果没有检测到下划线,则所有字符排成一行,按照下面的方式计算偏转角:同样先检 测连通域,得到每个字母连通域矩形的中心坐标,然后将这些中心坐标按照最小二乘原理拟 合出一条直线,就可以计算出该直线的偏转角度,也就是字符串的偏转角度。该方法快速有 效,对印刷体字符有不错的效果。最小二乘原理如下[5]: - 4 -
已知 m 个点 ( = 乘直线拟合方法,建立目标函数 x y , i i i ( ) 1,2,...., http://www.paper.edu.cn m ) ,这些点构成一条直线 y = + 。根据最小二 b kx F b k ( , ) = m ∑ i 1 = [( b kx i + ) − y i ] 2 为了使所有节点上函数偏差的平方和最小, 多元函数极值求法可知, b、k应满足方程组 F ∂⎧ ⎪⎪ ∂ b ⎨∂⎪ F ⎪ ∂⎩ k = 0 = 0 用 Cramer 法则解方程组得 k = − m ∑ m x y i i i 1 = ∑ m x i m 2 m m x i ∑ ∑ ∑ i 1 = m [ − 1 = ] 2 i x i y i 1 = i m ∑ i 1 = y i − 1 = i m ( ∑ i m 1 = x k ) i b = 偏转角计算好以后,调用OpenCV中的cvGetQuadrangleSubPix函数完成字符的旋转。图6 是两类药品标签字符旋转后的结果。 图6 字符旋转 3.5 字符分割 在进行字符分割以前,先用OpenCV库中的cvSmooth函数对旋转后的图像进行滤波操 作,消除毛刺和噪声,使字母变得平滑。平滑参数选择高斯卷积。 最常用的字符分割方法是灰度投影的方式[6],这种方式需要对图像的每列进行扫描,才 能找到每个字母的边界信息,分割出来的字母不但要进行大小归一化,还需要进行位置归一 化。而本文结合OpenCV开发库,采用连通域检测的方式对字符进行分割,简单快速,且分 割出来的字母图像大小即字符本身的大小,所以后面只需要对字母图像进行大小归一化,不 需要再对位置归一化。 连通域检测的方式同 3.2 中讲述的一样,先调用 OpenCV 库中的 cvFindContours 函数进 行连通域检测,一个字母即为一个连通域,再由 cvBoundingRect 得到每个连通域的外接矩 形框。旋转后图像中每个连通域外部矩形的宽、高,就是对应的每个字母的宽、高,然后为 每个字母创建一副宽×高大小的图像,将旋转后图像中相应位置的像素值赋给新创建的字母 图像。这样就完成了字符的分割。同样遇到噪声或者字母粘连的情况时,通过设定矩形宽、 高的门限来判断噪声和拆分粘连字符。图 7 是分割出来的字符并反色的结果。 图7 分割后的字符 - 5 -
http://www.paper.edu.cn 3.6 归一化处理 由于分割出来的字母大小不同,为方便后续的字符识别,先对字母大小进行归一化。归 一化处理有双线性差值法、最近领域插值法、使用象素关系重采样方法以及立方插值法等。 在双线性插值中,新创造的象素值,是由原图像位置在它附近的 4 个邻近象素值通过加权平 均计算得出的,具有放锯齿效果,创造出来的图像拥有平滑的边缘,缩放后图像质量高,不 会出现像素值不连续的情况。所以本文选为双线型插值法。 OpenCV 库中的 cvResize 函数可以实现图像任意大小的缩放,所以调用该函数,将参数 选为 CV_INTER_LINEAR 双线性差值。图 8 是将字母图像归一化为 24×30 后的效果图。 图8 归一化效果图 4. 结束语 本文在 VC++6.0 环境下,结合 OpenCV 开发库,编程实现了抑菌圈药物标签自动识别 的预处理。由于 OpenCV 强大的图像处理能力和开放的 C/C++优化函数,使得多数复杂的图 像处理算法,只需调用 OpenCV 开发库中的一个或几个函数就可实现。本文中阈值化采用对 每一个像素单独求取阈值的自适应方法,效果较好。字符旋转采用了一种比较快速有效的倾 斜角检测方法,即直线拟合法,通过对同处一行的字符连通域进行检测,将每个连通域中心 点坐标拟合成直线进行旋转角检测。字符分割也没有采用传统的灰度投影方式,而是采用了 连通域检测的方法,与 OpenCV 开发库相结合,简单有效,并且分割后的字符只需要大小归 一化,不需要再进行位置归一化。整个预处理后提取的字符失真较小,为后续的药片标签识 别奠定了良好的基础。 参考文献 [1] Open Computer Vision Library[EB/OL]. [2008-07-20].http://sourceforge.net/projects/opencvlibrary/. [2] 杨淑莹.VC++图像处理程序设计[M」.北京:清华大学出版社,北京交通大学出版社,2003. [3] 张小军,陈幼平,余文勇,等.票据字符识别的预处理算法研究[J].微计算机信息,2007,23(3). [4] L. Xu,E. Oja,P. Kultanen.A new curve detection method:Randomized Hough transform (RHT)[J]. Pattern Recognition Letters,1990,11: 331-338. [5] 张会章,张利霞,郭雷.用霍夫变换来提取目标边界[J].计算机应用,2003,23. [6] 段敬红,栾丹.人民币号码自动识别方法研究[J].计算机工程与科学,2008,30(1). - 6 -
http://www.paper.edu.cn The realization of label recognition preprocessing algorithm in bacteriostatic ring based on OpenCV College of Communication Engineering,Chongqing University,Chongqing,China (400030) Zhu Binglian,Huang Jianqiong,Tan Xiaoyu Abstract In VC + +6.0 development environment, with Open Source Computer Vision Library- OpenCV, the preprocessing algorithm of drug label automatic recognition in bacteriostatic ring is realized, including gray-scale treatment, pills localization,image binarization, character rotation, character segmentation and normalization. Because of OpenCV’s powerful image processing functions and the open C / C + + optimization codes, the programming is very simple. It has been proved that the result of the preprocessing is well, and It’s a good foundation for character automatic recognition. Keywords: OpenCV,bacteriostatic ring,character recognition,preprocessing 作者简介: 黄建琼(1984-),硕士研究生,研究方向:数字信号处理、数字图象处理; 朱冰莲(1959-),博士,硕士生导师,副教授,主要研究方向:数字信号处理及其应用等; 谭骁彧(1984 -),硕士研究生,研究方向:数字图像处理。 - 7 -
分享到:
收藏