logo资料库

论文研究-基于Python与OpenCV的舌象分割 .pdf

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
中国科技论文在线 http://www.paper.edu.cn 基于 Python 与 OpenCV 的舌象分割 杨露1,钱旭1,周强2** 5 10 (1. 中国矿业大学(北京)机电与信息工程学院 , 北京市 100083; 2. 清华大学计算机与科学系 ,北京市 100084) 摘要:舌象诊断是中医最具临床应用价值的方法之一,随着计算机技术的迅速发展,舌诊克 服以往主观性、非量化等缺点,形成自动化与客观化的诊断方式逐渐成为可能。主要采用 Python 与 OpenCv 对舌象进行分割,首先用中值滤波等技术,对舌象进行预处理,去除面部 皮肤,然后利用 GrabCut 算法得到准确完整的舌体图像。通过实验,证明该方法适用性比较 好,得到令人满意的分割效果。 关键词:舌象 ; 图像分割 ; Grabcut 算法 中图分类号:TP391 15 Based on Python and OpenCV Tongue Segmentation YangLu1, QianXu1, ZhouQiang2 (1. China University of Mining and Technology(Beijng)School of Mechanical Electronic & Infomation Engineering , Beijing 100083; 2. Department of Computer Science and Technology,Tsinghua University ,Beijing 10084) Abstract: Tongue diagnosis is one of the most valuable clinical methods of traditional Chinese medicine. With the rapid development of computer technology, tongue diagnosis has overcome the shortcomings of subjective and non-quantification in the past, and it becomes possible to form the diagnosis method of automation and objectivity. Mainly use Python and OpenCv to divide the tongue image. First, we use the technique of median filtering to pretreat the tongue and remove the facial skin. Then we use the GrabCut algorithm to get the exact tongue image. Through the experiment, it proves that the applicability of the method is better and the satisfactory segmentation effect is obtained. Key words: Tongue image; image segmentation; Grabcut algorithm 20 25 30 0 引言 舌象是反映体内变化的非常灵敏的标尺,能客观地反映正气盛衰、邪气性质、病情进退, 对准确辨症、判断疾病转归和预后、指导处方用药具有重要意义。传统舌诊通过中医专家目 视观察舌象,凭借经验诊断疾病。因此有必要运用数字图像处理等技术,实现舌诊的现代化 与客观化。 35 通过数字图像处理技术进行舌诊的前提是从舌象中准确分离出舌体区域,尽管很多研究 者在舌象采集过程中通过调节硬件的状态能够获得最大的最初舌体图像,但由于各种环境因 素再加上被检测人的情况各不相同,非舌体区域比如脸颊、嘴唇或者牙齿仍然存在。最初的 舌体图像中非舌体区域对舌苔的颜色、纹理等特征的鉴定有很大的影响因此从舌象中准确分 离舌体并不容易。针对舌头的特殊性,很多研究者尝试过多种解决方法,有学者提出阈值分 40 割算法[1],它的分割速度快,但自适应能力差,不能很好地将舌体轮廓提取出来,有文献[2] 作者简介:杨露(1991-),女,硕士研究生(在读)主要研究方向:信息融合 通信联系人:钱旭(1962-) 男, 硕导,博导 ,主要研究方向:信息融合. E-mail: xuqian@cumtb.edu.cn - 1 -
中国科技论文在线 http://www.paper.edu.cn 采用参数化活动轮廓模型(Snake 算法)结合特征提取的算法能快速得到舌体区域的轮廓, 但其收敛性收到其初始轮廓的影响很大;还有文献[3]采用梯度矢量流场(Gradient Vector Flow,GVF)作为外力的 GVF Snake 算法,克服了 Snake 算法不能收敛到舌体凹形区域的问 题,但此方法对噪声比较敏感,不能识别正、负阶跃边缘,分割效果不太理想。对于上述问 45 题,人们做了不少的尝试[4]与改进[5][6],但这些改进需要确定外力参数,而且收敛速度慢。 所以将舌体从整个脸部区域中分割出来是实现舌象客观化与现代化的重要步骤,分割的效果 将直接影响到后续舌象分析的准确性。 1 数字图像处理技术 1.1 Python 50 提到图像处理,人们通常想到的工具是 Matlab。诚然,MATLAB 提供了一个强大的图 像处理工具箱。但是,python 相对于 Matlab 的优势在于:免费、开源、可移植性比较强, 第三方生态,Matlab 不如 Python。比如 3D 的绘图工具包、GUI、更方便的并行,使用 GPU, Functional 等等。Python 的面向对象、弱数据类型等等特性都使得用它来进行简单的图像处 理的时候非常的简洁方便。而且 python 含有大量图像处理的类库,PIL 内建了强大的支持, 55 从各种增强算法到 Filter ,都让人无法怀疑使用 Python 的可行性。PIL 无需关注图像格式、 内建的图像增强算法和 Filter 算法,这些优点使 Python 适合用于构造原型和进行实验,在 这两方面 Python 比 matlab 更加方便。真正科学计算,当然要熟悉 numpy,基本数组操作, 然后是 scipy,里面封装了大量常用数学函数,也包括 ndimage 一个常规图像处理库,之后 是 scikit-image,opencv 等大而全的图像处理库,以及 ITK,VTK 等行业内流行的类库,其 60 丰富程度与 matlab 不相上下。并且这些类库大多底层由 C 实现,效率也不低 1.2 图像处理工具包 OpenCV OpenCv(Open Source Computer Vision Library)是 Intel 开源跨平台计算机视觉库,可 在 Linux,Windows 和 MacOS 等平台上运行,代码采用 C++语言编写,它的主要接口也是 C++语言,但是依然保留了大量的 C 语言接口。该库也有大量的 Python, Java and 65 MATLAB/OCTAVE (版本 2.5)的接口。实现了计算机视觉方面很多通用算法,如图像处理算 法、模式识别和三维重建等。OpenCV 的特点主要包括:它是一个开源的图像处理函数库; 其代码都经过层层优化,可实现图像的实时处理;具有良好的可移植性;可以进行图像、视 频等形式的读取、拷贝、保存等常规操作;提供各种应用程序接口;提供面向 Intel IPP 高效 多媒体函数库的接口,从而提高系统性能。 70 2 图像的预处理 采集来的舌体图像,大多由于光线变化、亮度以及各种各样的噪声等环境因素的影响使 得图片效果往往不太理想,所以我们需要对图片进行预处理,主要分为如下两步: - 2 -
中国科技论文在线 1. 消除光线影响 http://www.paper.edu.cn 在实际图像采集过程中,由于亮度的变化导致采集的舌象往往不尽如人意。为了使一些 75 没有色彩层次的图片质量有所提高,本文采用基于直方图统计的方法,对图像进行直方图均 衡化,消除光线影响。如下图所示,左图为原图,右图为均衡化后效果图。 图 1 图像均衡化效果对比图 80 Fig 1 Contrast picture of image equalization effect 2. 消除噪声影响 在实际采集图像中尝尝会包含各种各样的噪声,为了使其对图像清晰度评价函数值的影 响减小,需要先去掉图像中的噪声。本文采用中值滤波方法去噪,它是一种既能消除噪声又 能保持图像细节的经典非线性滤波方式,其主要功能主要是让周围像素灰度值查比较大像素 85 改取与周围像素值接近的值,对独立的噪声像素的消除能力很强,如下图 2 所示,左图为原 图,右图为去噪后的效果图。 图 2 中值滤波效果对比图 Fig 2 Contract picture of Median filtering effect 90 3 图像分割 3.1 Grabcut 算法原理 GrabCut 算法[7]基本思想是把整幅图像映射为 s-t 网络图(如下图 1 所示),其中源点 s 表示前景终点,汇点 t 表示背景终点。由图 1 可知,边集 E 包含两部分:源点汇点和所有其 它节点的连接边、图中相邻节点之间的边。相应的,边的权值需反映出像素点与前景、背景 - 3 -
中国科技论文在线 http://www.paper.edu.cn 95 的相似程度,相邻像素间的颜色差异,分别反映了图像的区域属性和边界属性,不妨分别称 之为区域能量与边界能量。记图像分割的总能量、区域能量和边界能量分别为 E(A)、R(A) 及 B(A),则有 E(α ,k,θ ,z)=R(α ,k,θ ,z)+ B(α ,z) (1) 区域能量项为 100 R( α ,k,θ ,z) = n(α n,kn ,θ ,zn) , (2) Rn( α n,kn,θ ,zn) = - lg π ( α n,kn) + 1/2 lg det ∑ ( α n,kn) + 1/2 [zn - μ ( α n,kn) ] T × ∑ ( α n,kn) -1[ Zn - μ ( α n,kn) ] . (3) 边界能量项为 105 B( α ,z) = γ [α n≠α m] exp(-β )‖zm - zn‖2. (4) 其中,z 为图像数据,α n 为像素 n 的属性,α n =0 表示前景,α n =1 表 示背景。kn 为像素点 n 所属 GMM 标号 θ = { π ( α ,k) ,μ ( α ,k) , ∑ ( α , k) , α = 0,1, k = 1, …, K} 为 GMM 的参数模型。 GrabCut 提供的接口是通过用户指定的矩形框来区分选择目标集合和背景集合。矩形框 110 内的为目标像素集合,而矩形框外的为背景像素集合。由此得到了两个像素集合:TU 和 TB , 其中 TB 是矩形框外的所有像素,表示的是背景像素集合,并且对每个像素赋予背景标记α n =1,TU 是矩形框内的所有像素,表示的是用 1 未知分类的像素集合,赋予前景标记 α n =0,而目前代表前景的像素集合 TF =Φ 。然后通过前景和背景标记的像素分别初始化两个 GMM,一个为前景模型,一个为背景模型。至此,GrabCut 将按如下步骤进行迭代运算: 115 (1) 为 TU 中的每个像素 zn 做 kn 的标记, kn =argmin Rn(α n ,θ ,kn ,zn ) (2)根据标记后的像素集合重新确定两个 GMM 的各个高斯分量的参数。 (3)使用最小割算法对能量函数 E 进行最小化,改变 TU 集合中每个像素 zn 的标记 α n,更新 TB 和 TF 。 (4) 重复步骤(1)~(3)至收敛。 120 GrabCut 算法的分割过程是通过迭代不断更新、 修正 GMM 参数,使算法趋于收敛。 因为迭代过程中优化了组参数 k,θ ,α ,使得分割能量 E( A) 逐渐减少, 最终能够保证 E( A) 收敛于最小值,实现图像分割。 - 4 -
中国科技论文在线 http://www.paper.edu.cn 125 3.2 Grabcut 分割算法的改进 3.2.1 能量函数的优化 图 3 s-t 网络 Fig 3 s-t network 假设整幅舌像一共有 zn 个像素点,n∈[1,2,…,65536][,维数为d,使用 GMM 模 型描述背景和前景像素之间的分布情况。像素点都是由 K 个 GMM 的混合模型表示,且 kN 130 ∈{1,2,…,5};α n 为像素点的 Transparency,其中α n=1表示前景,α n=0 表示背景。 Pk(zi, θ )=exp[-1/2(zi-uk)T (zi-uk)]/(2π )d/2|∑|1/2 (5) 其中,xi 表示第k 个高斯模型下的密度函数。 Pk(zi /αn, θ)= πkpk (zi, θ) (6) 其中,θ ={π k , uk , ∑k}为参数,π k 为比例系数,uk 为平均值,∑k 为协方差。 135 似然估计公式为: L(x)=-㏒ π kpk (zn ,θ ) =- ㏒[ π kpk (zn ,θ )] (7) 原 GrabCut 中 Gibbs 的能量函数形式如下: E(α,k,θ,x)=U(α,k,θ,z)+V(α,z) 140 = D(αn,kn ,θ, zn)+V(α,z) (8) 其中,(α ,k,θ ,z)为区域项,V(α ,z)为平滑项。由上面两式得到: D(α n,kn ,θ , zn)=-㏒[π kpk (zn ,θ )] =-㏒π k-㏒ pk(xn,θ ) =-㏒π k+1/2 ㏒ det∑(α n,kn)+ 1/2 [xn-u(α n,kn)]T ∑(α n, 145 kn)-1[xn-μ (α n,kn)] (9) 通过更新 GMM 模型的参数得到下面两个公式: θ =argminU(α ,k,θ ,z) (10) V(α ,z)=γ [α m≠α n]exp(-β ‖zm-zn‖2) (11) 其中,C 为相邻像素点对的数量,γ =50,[α m≠α n]为 0 或 1 的二值函数。当且 150 仅当α m≠α n 时,[α m≠α n]=1;当且仅当α m =α n 时,[α m≠α n]=0。β - 5 -
中国科技论文在线 =(2<‖xm-xn‖2>)-1为数学期望。 http://www.paper.edu.cn 熵在信息论的定义为:H(π )=- π k ㏒(π k) (12) 其中,π 为信息量的大小。能量函数进过优化后如下: E(α ,k,θ ,x,H)=U(α ,k,θ ,z)+V(α ,z)+ρ [-H(π )]= (α 155 n,kn,θ ,zn)+V(α ,z)+ρ π k㏒(π k) (13) 其中,ρ 表示惩罚因子。分割能量函数进过优化后,不仅图像的细节信息可以最大限度 地保留,而且可以消除掉多余的高斯分量,最终提高图像的分割精度。 3.2.2 改进的 GrabCut 算法 具体步骤如下: 160 Step 1 预处理。首先对输入舌像使用二次分水岭算法,求出分割后得到的小区域颜色平 均值,并把它作为像素节点,以便进行后续处理。 Step 2 初始化。初始化过程如下: 1)用户初始化 TB,令 TF=Φ ,TU=TB。通 过 设 定 位 置 区 域 TU和背景区域 TB, 把三元 图 T 转 换 为 二 元 图 的 标 号 问 题,以 此 对图像进行非完全编号。 165 2)将背景像素透明度α 置 0;对未知的区域TU,将α 设置为 1。 3)对于α =0 与α =1 这两个集合,使用 K-means 聚类方法对背景和前景的 GMM 进行 初始化,以获取 GMM 的参数(π n,un,Σ k)初值。 Step 3 最小化迭代。过程如下: 1)计算出 Xn 的 GMM 参数 kn,kn=argmin kn E(α ,k,θ ,x,H)。 170 2)所有像素α 执行标记并优化,α n=argmin E(α ,k,θ ,x,H)。 3)从目标图像的节点求出 GMM 的参数θ = argmin E(α ,k,θ ,x,H),以此 求 出 GMM 参 数(π n,un,Σ k)的 估 计 值。 这个过程不仅可以得到节点到背景和前景之间的距离 D,同时还可以计算出基于混合比 例熵的惩罚 H(π )。 175 4)各个像素的 GMM 模型的数据项 u(α ,m,θ ,x)经过 EM 算法估计得到,再通 过熵惩罚获取索引号,最后对其约束平滑项部分,最终得到能量项 E(α ,M,θ ,X,H)。 5)对 TU 构造 S-T 的网络图,采用 Max-FlowMin-Cut 算法初始化分割图像。 6)重复执行 Step 3 中的步骤(1)-(5),直到收敛。 7)执行边界的优化。 180 Step 4 输出目标。分别获取α =0 与α =1 像素点,把α =1 的像素输出,即得到前景 目标。 - 6 -
中国科技论文在线 http://www.paper.edu.cn 185 4 实验结果与分析 本文实验平台 python3.5.2,OpenCv 3.2,PyCharm2017。为测试算法以及 Python 与 OpenCv 的性能,本文选取不同的舌体图像进行试验,部分实验结果如下图所示,实验结果表明,基 于 Python 与 OpenCv,采用 GrabCut 算法对舌象进行分割,图像质量越高,分割效果越好, 且对比之前的阈值分割算法[2]提取舌体不完整、Snake 算法[8]遇到舌体凹陷部位就不能很好 190 提取等缺陷,采用此方法不仅能够识别伪边缘,对舌体凹陷区域也能取得较好的分割效果, 而且无论图像大小,均能取得良好的分割效果。 图 4 图像分割前后对比 Fig 4 Before and after image segmentation 195 200 图 5 图像分割前后对比 Fig 5 Before and after image segmentation 图 6 图像分割前后对比 Fig 6 Before and after image segmentation - 7 -
中国科技论文在线 http://www.paper.edu.cn 5 结论 可以看出,基于 Python 与 OpenCv 技术采用 GrabCut 算法对舌象进行分割,首先利用 Python 与 OpenCv 的强大图像处理能力对舌象进行预处理,结合 GrabCut 算法以其高精度的 205 分割能力和方便快捷的人机交互,综合多种舌象的测试,通过对比阈值分割算法、Snake 算 法提取舌体,本文取得更好的分割效果,克服了嘴唇、脸部的影响,对舌体凹陷区域也取得 较好的分割效果。但是算法存在的问题是,随着海量数据的增加,算法分割效率降低,所以 下一步考虑对该算法进行相应的改进。 [参考文献] (References) 210 215 220 [1] 杨大生,陈晖,邹丰美,周昌乐. 一种有效的舌体自动化分割算法[J]. 计算机应用研究. 2007(02):1-3 [2] 刘杰,安博文.基于动态阈值分割的目标提取技术[J].红外技术. 2008(12) [3] 祝建中.基于中心估计的椭圆检测[J]. 计算机工程与应用. 2008(04) [4] 张志顺. 改进的小波变换在中医舌象边缘检测中的研究[J].计算机工程与应用,2012,48( 35) : 135-138. [5] 王明英,张新峰,卓 力.一种基于 Snakes 模型的中医舌象分割改进算法[J].测控技术,2011,30( 5) : 32-35. [6] 陈善超,符红光,王 颖.改进的一种图论分割方法在舌像分割中的应用[J].计算机工程与应用,2012, 48( 5) : 201 - 203. [7] 王钧铭,高立鑫,赵力.基于 GrabCut 的图像分割算法研究 [J].电视技术,2008,35(6):2-3 [8] 吴 佳,张永红,白 净,等. 基于分水岭变换和主动轮廓模型的舌体轮廓图像分割[J].清华大学学 报,2008,48 ( 6) :1040 - 1043. - 8 -
分享到:
收藏