一、前言
舌诊作为中医诊疗的核心手段之一,历来依赖医生的直观视觉来观察舌象的神态、色泽、形态等变化,从而经验性地判断疾病的本质、病程深浅、气血状态、津液平衡及脏腑功能。尽管这一方法为临床辨证提供了宝贵的参考,但其高度依赖于医生的临床经验,且难以量化、复现,限制了其广泛应用。因此,中医舌诊的标准化、客观化、数字化成为中医诊断领域亟待解决的热点与难点。
近年来,人工智能技术的飞速进步为中医舌诊的现代化提供了新的契机。它不仅有助于实现舌诊信息的数字化表征和智能化分析,还符合习近平总书记关于利用现代科技阐释中医原创理论和临床效果的指示精神。在此背景下,本文积极响应“数智中医”的发展趋势,基于中医舌象与人工智能的交叉研究,旨在为基层中医从业者打造一款便捷、精准、快速的移动终端舌象诊断工具。
二、舌诊图像采集的基本属性
2.1 采集环境的影响
舌诊图像的颜色会受到采集环境光源的影响,不同光源的色温、照度和显色指数等参数差异,会导致被照物体颜色呈现效果的不同。移动终端的便携性虽然提高了采集效率,但光源环境的不可控性使得获得稳定、客观的舌象信息变得困难,影响了图像的客观性和可比性。色温是衡量光源颜色温度的指标,基于一个理想化的黑体在不同温度下发出的光色变化。例如,红色光的色温较低,而蓝色光的色温较高。不同光线的色温差异会导致拍摄照片的色彩差异。下表列出了一些常见光源的色温值。
常见光源的色温值
照度是衡量物体被照明程度的一个指标,具体指物体表面接收到的光通量与其被照面积的比例。在光线充足的室内,照度通常介于100至550勒克斯(lx)之间,而在夜间路灯下,照度则可能降至10至20勒克斯。高照度环境下拍摄的照片显得更为明亮鲜艳,而低照度则赋予照片柔和温暖的氛围。
常见场所照度标准值
另一方面,光源对物体颜色的还原能力被称为显色性,显色指数(Ra)则是量化这种能力的数值。它衡量的是光源下物体颜色与在参照光源(通常是日光)下物体颜色的相符程度。显色指数越高,即越接近100,表示光源越能准确呈现物体原本的颜色。显色性对摄影作品的影响显著,显色性差会导致照片色彩失真。
常见光源的显色指数
在舌象采集流程中,选用稳定性卓越、显色性能优异且能模拟传统舌诊所需自然光的光源,能够显著提升舌象信息的客观性、真实性和稳定性。经过对不同环境光源的细致分析,我们发现,在日间自然光条件下拍摄,当色温维持在4500-7000K,显色指数超过85,且照度标准值误差控制在±10%以内时,舌象信息采集设备可达到最佳性能标准[10]。因此,在拍摄前,我们采用语音与文字相结合的多维度环境提示,以确保拍摄环境符合规范。
2.2 采集设备
舌象采集是数字化分析流程的起点,然而,利用智能手机、平板电脑等便携设备进行采集时,仍面临两大挑战:一是设备基础配置能否支持采集软件的运行;二是不同设备的摄像头模组差异,如何确保镜头分辨率满足舌诊需求。经过反复验证,我们发现,只要设备运行内存不低于2GB,存储空间不少于500MB,且Android系统版本在5.0及以上,即可顺利运行采集程序。至于摄像头方面,只要具备摄像头且镜头分辨率不低于5μm/pixel,即可满足舌象信息采集的标准要求。为此,系统内置了设备配置识别程序,以确保所有设备均符合运行要求。
2.3 舌象采集虚线轮廓拟合技术
在舌象采集过程中,由于采集双方往往缺乏舌诊专业知识,容易出现舌体形态及位置不当、拍摄距离不合适等问题,导致图像范围过大或过小。为解决这一难题,在拍摄界面设置了半透明的舌体取景虚线轮廓。采集时,只需将舌体边缘与虚线轮廓对齐,即可快速拍出符合舌诊规范的舌象图片。
三、构建舌诊图像的整体信息
3.1 色彩标准化处理
由于智能手机等设备在制造商参数设置、摄像头模组技术上的差异,不同型号的设备在拍摄同一场景时,所得图像在颜色和亮度上往往存在差异。这导致在智能手机软件中采集的舌诊图像面临两大问题:
(1) 色彩偏差:由于采集设备的型号参数和制造商对摄像头模组调校技术的不同,拍摄后的舌象图片与真实世界的色彩存在偏差。
(2) 算法通用性差:当使用同一图像处理算法处理来自不同舌象采集设备的图像时,得到的数字化结果会存在细微差别,这影响了算法在不同设备采集图像上的通用性。
为解决上述问题,需要对不同手机拍摄的舌诊图片进行颜色校正。颜色校正的目的是将不同手机拍摄的图像转换至一个标准化的色彩校正空间中,使计算机获得的图像特性接近人类视觉系统,从而实现与人类眼睛相似的观察效果,避免对图像判断产生误差。
为应对上述挑战,我们采用了内置算法对拍摄的照片进行颜色校正。该算法能根据不同机型与标准色值之间的偏差自动调整图片色彩,力求实现统一的效果。
(1)卷积神经网络(CNN)的应用
卷积神经网络是一种具备深度结构的前馈神经网络,其设计模仿了生物神经元的工作机制。自2015年ImageNet竞赛首次将CNN技术应用于图像识别领域以来,该技术的应用范围迅速扩展,特别是在图像识别方面取得了显著成就。
在本研究中,基于卷积神经网络的舌图像颜色校正方法如下图所示,整个流程可以分为离线训练和在线校正两个主要阶段。
颜色校正示意
离线训练阶段:在此阶段,我们利用手机拍摄的标准色卡图像和官方提供的Color Checker Digital SG色卡进行训练,旨在建立颜色映射模型。通过网络的学习,目标是掌握实际标准颜色与手机拍摄色卡颜色之间的映射关系。损失函数用于评估输出与预期标签之间的差距,并通过反向传播算法更新模型参数,直至获得最佳的颜色映射模型。
在线校正阶段:在这一阶段,用户可以通过手机上传拍摄的舌图像,系统则利用离线训练所得的颜色校正模型对图像进行处理,以消除不同成像传感器引起的图像属性偏差。
(2)网络结构
颜色校正所使用的网络架构主要包括输入层、非线性变换层和输出层三个部分。该五层卷积神经网络专为颜色校正回归任务设计,能够有效捕捉采集色卡颜色值与标准颜色值间的复杂映射关系。其中,非线性变换层由卷积层和ReLU激活函数构成,输出层则由单个卷积层组成,以实现对颜色偏差的精确校正。通过这种方法,我们不仅能够克服不同设备间色彩表现的不一致性,还能提高舌图像分析的准确性和可靠性。
网络结构图
3.2 清晰度与亮度评估
尽管智能手机因其便携性满足了随时随地的采集需求,但与专业相机相比,其在拍摄质量上存在诸多不足。硬件方面,小型摄像头变焦能力相对较弱,焦距较短,导致拍摄时有效像素损失较大。此外,手机拍摄的照片尺寸相对较小,其底片清晰度无法与相机相提并论,特别是在高感光度条件下,图像噪点增多,导致整张照片显得模糊。再者,手机配置的闪光灯多为LED灯,其亮度远低于相机的高压氙气闪光灯,这在舌诊等应用场景中限制了其使用效果。
人为因素方面,由于智能手机品牌众多、尺寸各异,操作方式不固定,且对环境光源的控制能力有限,非专业人员在使用时容易出现照片模糊、虚影、眩光、过暗等问题。
因此,在采集图像后,我们需要对图像的清晰度和亮度进行评估,通过数据清洗的方式剔除那些未达到标准的图像,以确保后续舌诊分析的准确性和可靠性。
3.2.1 清晰度评估
图像的清晰度对于后续的舌象特征分析至关重要。因此,在分析之前必须对上传图像的清晰度进行评估。清晰度评估流程包括ROI区域划定、抠图、图像预处理、图像灰度化、清晰度计算和清晰度判定六个步骤。
(1) 步骤1:ROI区域划定。考虑到手机拍摄时的聚焦差异,图像不同区域的清晰度可能不同。因此,在评估清晰度时,只针对图像中心的ROI关键区域。舌面和舌下区域由于拍摄角度和面积的差异,在ROI区域划定时也需作相应调整。根据数据采集经验选择合理的ROI区域。
(2) 步骤2:抠图。对原图的ROI区域进行抠图,提取出仅包含ROI区域的图像。
(3) 步骤3:图像预处理。对ROI图像进行缩放,使用OpenCV的resize功能将其调整至224x224像素。
(4) 步骤4:图像灰度化。使用OpenCV的cv2.cvtColor函数将彩色图像转换为灰度图像,转换公式为:Gray = 0.299R + 0.587G + 0.114*B,其中R、G、B分别为RGB颜色通道的值,Gray为灰度值。
(5) 步骤5:清晰度计算。对灰度图像进行拉普拉斯算子计算,通过所有像素的梯度方差和来表示图像的清晰度,数值越大表示图像越清晰。
(6) 步骤6:清晰度判定。设定舌面和舌下区域的清晰度阈值,若步骤5中得到的清晰度值超过阈值,则认为图像清晰;否则,判定为不清晰。
3.2.2 亮度评估
图像的亮度对于舌色、苔色、络脉颜色特征的分析同样具有重要影响。亮度评估流程包括图像预处理、图像灰度化、灰度图直方图分析、亮度系数计算和图像亮度判定五个步骤。
(1) 步骤1:图像预处理。使用OpenCV的cv2.resize函数将图像缩放至832x1504像素。
(2) 步骤2:图像灰度化。使用OpenCV的cv2.cvtColor算法将彩色图像转换为灰度图像,操作与清晰度评估中的步骤4相同。
(3) 步骤3:灰度直方图分析。利用OpenCV中的cv2.calcHist函数计算图像的灰度直方图。直方图显示了图像中不同灰度值的像素分布情况,横坐标表示0-255的像素值,纵坐标表示对应灰度值的像素数量。
(4) 步骤4:亮度系数计算。根据直方图统计的像素值及其数量,计算亮度系数。亮度系数的计算公式为:
注:其中,M为图像的像素点个数,为对应像素点的灰度值,k为最终的亮度系数。
(5) 步骤5:图像亮度评估。依据步骤4计算得到的亮度系数k,设定合适的亮度阈值。如果k超过设定的过亮阈值,则认为图像亮度适宜;如果低于过暗阈值,则认为图像亮度不足。
3.3 舌象完整性评估
尽管在采集过程中已经做了充分准备,但由于拍摄场景和人员的拍摄距离、角度、光线等因素的差异,上传的舌象图片可能会存在核心部位缺失、范围不适宜或位置不正确等问题,这些问题会影响舌体的完整分割。因此,在分析舌象特征之前,需要先判断上传的舌象是否完整、范围和大致位置是否符合基本的舌诊要求,即进行舌象完整性评估。舌象完整性评估的逻辑是基于上传的舌图像与预设的ROI之间的交并比(IoU)。如果IoU大于设定的阈值,则认为舌象完整;否则,认为舌象不完整,需要用户重新上传。在舌象完整性评估中,所指的“全舌”并非指舌头的全部,而是指用于舌诊分析的舌面图像或舌下图像。如果用户拍摄时距离患者较远,即使舌头全部拍摄出来,但由于在图像中占比面积较小,计算出的IoU也较小,按照评估规则,该图像将被判定为不完整。整个流程包括图像预处理、舌体分割、图像后处理、ROI划定、交并比计算和舌象完整性评估六个步骤。
(1) 步骤1:图像预处理。由于不同手机拍摄的图像尺寸不一,使用OpenCV的cv2.resize函数将图像尺寸统一调整为832x1504像素。
(2) 步骤2:舌体分割。采用Unet算法[19]对舌体进行分割,分为舌下和舌上两类。
(3) 步骤3:图像后处理。将分割后的舌体效果图放大,使用cv2.resize将832x1504像素的分割效果图放大至原图像尺寸。
(4) 步骤4:ROI区域划定。考虑到舌面和舌下区域的角度和面积差异,在ROI区域划定时会有所不同。根据数据采集经验选择合理的ROI感兴趣区域。
(5) 步骤5:交并比计算。计算舌体分割区域与预设ROI感兴趣区域的交并比。效果图参见下图。
(6)步骤6:舌象完整性评估。根据步骤5得到的交并比与设定的阈值进行比较,如果交并比大于设定阈值,则判定为完整的舌象;否则,判定为不完整的舌象,需要用户重新上传图像。
四、舌象特征分析技术
4.1 舌象特征标注流程
鉴于中医舌象特征的复杂性和多样性,以及舌象特征提取算法的效率问题,为了实现舌象特征的智能化提取,我们首先需要进行舌象标注工作,以人工方式积累各类舌象特征数据。收集大量准确、合理的舌象特征数据对于降低模型的误识率和漏识率、提升模型的识别精度和实用性至关重要,同时也能减少模型开发的时间与成本。舌象标注工作通过中医舌象辅助诊断系统软件在平台端进行,采用多边形标注方式对舌体特征进行精确标记。标注特征的选取依据第十版《中医诊断学》进行分类,确保特征归纳的全面性和具体性。标注人员经过严格筛选,以保证标注质量。标注类别主要分为舌面和舌下两大类,按照全舌(包括舌上和舌下)、舌色、舌形、苔质、苔色、舌下络脉的顺序逐级进行特征标注,确保不遗漏任何特征信息。
4.2 舌体区域分割技术
在分析舌象特征之前,通常需要从采集到的图像中分割出舌体区域,以排除面部、口唇等非舌体区域的干扰。这一步骤不仅有助于去除无用像素点,还能确保分割后的舌象保持完整性,避免遗漏重要的舌面信息。精确的舌体分割对于提高后续处理分析的效率和舌象特征分析的准确性至关重要。我们采用基于VGG16骨干网络的Unet语义分割算法来实现舌体分割,该算法因其U形的网络结构而得名。
Unet网络包含特征提取阶段(编码器)和解码阶段。在特征提取阶段,使用两个3x3的卷积操作提取特征,每个卷积后接ReLU激活函数,并使用2x2的最大池化层缩小特征图尺寸。经过4次这样的操作后,特征图的大小缩小为原来的1/16。在解码阶段,通过步长为2的反卷积操作扩大特征图,并与特征提取阶段的特征图进行拼接。后续操作与特征提取阶段相似,使用2个3x3的卷积操作提取特征,并使用ReLU激活函数。在图像输出阶段,对于二分类任务使用Sigmoid激活函数,多分类任务使用Softmax激活函数,以输出分割图。Unet通过跳层连接融合高层的语义信息和低层的位置信息,从而提高分割的准确性[21]。舌体分割流程包括数据预处理、数据清洗、数据标注、Unet模型训练和Unet模型测试六个阶段。
(1) 步骤1:图像预处理。将采集、清洗、标注好的数据转换成舌体掩膜图。
(2) 步骤2:数据清洗。数据清洗分为两个阶段:标注前和标注后。标注前的数据清洗主要是排除未达标注标准的图像,如过亮或过暗、模糊、舌体拍摄过远或不全等。标注后的数据清洗是指对标注结果进行审核,修正舌体位置标注不准确或漏标的情况,以避免脏数据影响模型训练效果。
(3) 步骤3:数据标注。使用中医舌象辅助诊断系统软件对舌体进行标注。
(4) 步骤4:图像预处理。将标注好的数据基于多尺度编解码网络转换成舌体掩膜图,并统一缩放至1504x832像素。在网络训练前,将缩放后的图像随机截取为512x512像素送入网络进行训练。
(5) 步骤5:模型训练。使用标注好的数据训练Unet模型。训练参数设置为:学习率为0.0001,迭代次数为100次,训练框架为PyTorch深度学习框架,编码语言为Python。训练过程中使用的损失函数为多分类交叉熵函数。
注:n为图像中像素点总数,y为图像中像素点x期望的输出,a为网络实际输出。训练过程目的是将标注图像掩码图和Unet分割效果图之间的差距越来越小,实质就是将loss下降到最低。
(7)步骤6:模型评估。对步骤5中训练完成的Unet模型进行舌体分割效果的测试。常用的评价指标包括平均交并比(mIoU)。下图中,A区域代表分割结果区域,B区域代表实际标注区域,TP表示A和B两个区域的交集。mIoU即平均交并比,在舌体分割任务中,M为2,分别对应舌面和舌下两个部分。
(7) 步骤7:应用Unet进行舌体分割。将舌图像输入到经过训练的Unet网络中,执行舌体分割任务。
4.3 舌面区域细分及颜色值提取
中医舌诊涉及的变量众多,包括舌色、苔色在每个像素点的颜色值变化大,苔质在不同区域分布不均,以及舌形特征(如老嫩、胖瘦、点刺、齿痕、裂纹等),这些因素使得舌面包含的信息量巨大。若仅对舌面进行整体分析,可能会忽略一些细微特征。舌象分区理论是舌诊的重要理论基础,起源于《内经》并经过历代医家的总结和发展。目前普遍采用的是舌面脏腑分区法,但这种方法仅将舌面粗略划分为舌尖、舌左、舌右、舌中、舌根,缺乏精确性。将舌面分区理论与数字化技术相结合,是确保舌象特征准确处理的关键前提。因此,在舌象分割后,需要对舌面区域进行细分。为解决这一问题,具体流程包括图像预处理、舌体分割、舌苔分割、图像后处理、苔质分割、五分区划定、舌色颜色值提取、舌苔颜色值提取等8个步骤。
(1) 步骤1:图像预处理。对原始图像进行缩放,将输入的图像调整至1504x832像素,并执行归一化等操作。
(2) 步骤2:舌体分割。利用“3.2”节中描述的舌体分割算法,获得舌体分割效果图及舌面mask。
(3) 步骤3:舌苔分割。采用与舌体分割类似的方法获得舌苔分割效果图及舌苔mask,但标注特征和分割目标不同,因此训练得到的Unet权重也不同。
(4) 步骤4:图像后处理。将舌面mask和舌苔mask放大至原始图像尺寸,即将1504x832像素的mask放大至6000x3368像素。
(5) 步骤5:苔质分割。通过舌面mask减去舌苔mask,得到无舌苔的舌面ROI区域。
(6) 步骤6:五分区划定。参照图14所示的舌象五分区标注模型,通过OpenCV的cv2.minAreaRect算子对步骤4得到的舌面mask进行最小外接矩形处理,得到最小外接矩形的四个角坐标及高宽,进而确定五个分区的坐标位置。
(7) 步骤7:舌色颜色值提取。利用步骤5得到的无舌苔舌面ROI,按照步骤6的分区划分,提取五个区域的小块图像。对每个区域的图像计算颜色值,颜色值计算规则为非零像素点的平均值。通过OpenCV的cv2.cvtColor函数在RGB、HSV、HIS、Lab四个颜色空间内进行颜色值转换。
(8) 步骤8:舌苔颜色值提取。类似于步骤7,对舌苔分割mask进行五分区,并计算每个区域的平均像素值。如果某个分区的颜色值全为0,则默认该区域的舌苔颜色值与对应舌色区域的颜色值相同。
4.4 舌上特征分析
在中医舌诊中,舌象特征是诊断和治疗的重要参考。舌象特征分析揭示了特征之间的共存性、互斥性、全面性和局部性。例如,嫩舌和胖舌可能同时出现,显示了特征的共存性;而胖舌和瘦舌不可能同时存在,体现了特征的互斥性。此外,如老舌、嫩舌、胖舌等特征是基于整个舌面进行识别的,这反映了特征的全面性;而点刺舌、裂纹舌、齿痕舌等特征则只需识别舌面的部分区域,显示了特征的局部性。舌苔特征也具有这些特性,如满舌白苔或舌根部白苔,也可能存在舌面无苔或多种舌苔共存的情况。因此,为了准确高效地识别这些特征,需要为不同特征设计定制化的多模型组合。
4.4.1 基于舌面整体的特征分析
基于舌面整体的特征分析可以分为五大类,包括部分舌色、舌形特征以及苔色、苔质。舌色主要涵盖淡红舌、淡白舌、枯白舌、红舌、绛舌、青舌、紫舌、淡紫舌、紫红舌、绛紫舌等10种类型;舌形识别包括老舌、嫩舌、胖舌、肿胀舌、瘦薄舌、点刺舌、裂纹舌、齿痕舌、肝郁线、舌中凹陷等10个类别。由于特征之间存在互斥性和全面性,需要将基于整个舌面判定的舌形特征分开处理,分为老舌、嫩舌一组,胖舌、肿胀舌、瘦薄舌一组。舌苔方面,也需考虑苔质和苔色满布舌面的情况。因此,采用5个分类算法对基于舌面整体的特征进行识别。整体流程包括图像预处理、舌体分割、图像后处理、舌图像抠图、分类模型训练、分类模型测试以及基于舌面整体的特征识别等7个步骤。
针对全局区域病症特征分布广泛且难以区分的问题,采用多分支细粒度卷积神经网络进行识别。多分支细粒度网络、包含位置分支和类别分支,分别处理舌象症状的位置和类别概率,有效处理舌象细粒度的区分,扩大类间距离,缩小类内距离。为多个全局舌像症状设计训练多个细粒度识别网络,定制化识别特定症状,解决不同症状不易区分的问题。
(1) 步骤1:图像预处理。对输入图像进行预处理,统一调整至832x1504像素尺寸。
(2) 步骤2:舌体分割。从图像中分离出舌体区域,获得舌体分割图mask,具体流程参考“3.2”节的舌体分割算法。
(3) 步骤3:图像后处理。将832x1504像素的mask图放大至输入图像尺寸;使用OpenCV的cv2.minAreaRect算子对mask进行最小外接矩形处理,得到舌面区域的左上角和右下角坐标。
(4) 步骤4:舌面抠图。根据步骤3得到的坐标确定矩形框区域,对原图进行抠图,提取舌面图patch_img。后续的模型训练、测试、识别都将基于patch_img进行。
(5) 步骤5:分类模型训练。分类模型采用卷积神经网络VGG16结构,适合对图像类型进行识别。分为5部分,包括10种舌色类型以及舌形识别的两部分,舌形识别1包括老舌、嫩舌、正常舌(非老舌且非嫩舌);舌形识别2包括胖舌、肿胀舌、瘦薄舌、正常舌(非胖舌且非肿胀舌且非瘦薄舌)以及苔色、苔质的识别。训练框架采用Keras深度学习框架。
(6) 步骤6:分类模型测试。对训练好的模型进行测试,测试评价指标为准确率(accuracy)。
注:式中f(xi)为分类模型预测的舌色类别,yi为医生诊断的舌色类别,I为统计函数,若f(xi)与yi相等,则为1,否则为0,n为舌头样本数量,accuracy的范围0-1,若所有舌头样本分类模型预测的舌色与医生诊断的舌色都不一致,则准确率为0,若所有舌头样本分类模型预测的舌色与医生诊断的舌色都是一致的,则准确率为1。
(7) 步骤7:舌色、舌形及苔特征识别;利用经过测试验证的分类模型对舌面图像patch_img进行特征分析,以识别舌色、舌形(包括舌形1和舌形2)、苔色和苔质等特征。
4.4.2 基于舌面局部特征的识别技术
针对舌面局部特征的识别可以细分为四个部分,主要涉及舌形特征中的点刺舌、裂纹舌、齿痕舌、肝郁线和舌中凹陷(统称为舌形特征3),以及苔色与苔质的局部分布。鉴于这些特征仅涉及舌面的特定区域,因此特别适合采用YOLOv3目标检测算法。YOLOv3是2018年提出的一种目标检测领域的经典one-stage算法,它包含了Darknet-53网络结构、anchor锚框、FPN等先进结构。
YOLOV3网络结构
YOLOv3算法兼具定位和识别功能,其中定位功能通过矩形框确定舌形特征在图像中的位置,识别功能则是根据指定区域判断舌形的类型。
(1) 步骤1:离线训练
舌体分割:对上传的图像执行舌体分割,提取舌面区域;舌体分割的算法原理和流程参见“4.2”节。
步骤2:抠图及标签转换:通过抠图技术获取舌区域图像patch_img,具体抠图过程与前文描述相似,此处不再赘述。由于苔色的标注是基于全图的多边形标注,需要将最小外接矩形转换为矩形标签,并对舌面最小外接矩形的左上角坐标进行转换,以获得基于patch_img的标签坐标和特征类型。
步骤3:图像预处理:将patch_img调整至608x608像素,同时转换标签坐标。
步骤4:YOLOv3操作:将预处理后的图像输入YOLOv3网络进行推理,得到预测结果。
步骤5:后处理操作:对YOLOv3的输出结果执行阈值筛选和非极大值抑制等操作,以去除多余的预测框,从而得到最终的预测结果。
步骤6:损失函数计算:根据预测结果和标签数据计算算法的损失值,通过反复训练降低损失值,最终获得训练好的特征检测模型。
(2) 在线测试:
(1) 步骤1:舌体分割。对上传的图像执行舌体分割,以提取舌面区域;具体的舌体分割算法原理和流程参见“4.2”节。
(2) 步骤2:抠图。通过抠图技术获取舌区域图像patch_img。
(3) 步骤3:图像预处理。将patch_img调整至608x608像素,以适配模型输入尺寸。
(4) 步骤4:推理阶段。将预处理后的图像输入至训练完成的YOLOv3网络模型中进行推理,以获取预测结果。
(5) 步骤5:后处理操作。对YOLOv3推理结果进行阈值筛选和非极大值抑制等后处理操作,以精细化预测结果。
(6) 步骤6:基于舌面局部的特征识别。对后处理结果进行分析,确定舌面的具体位置和对应的特征类别。
4.5 舌下特征分析
4.5.1 络脉分割与颜色识别
络脉分割的目的是为了后续的络脉颜色识别和形状识别打下基础。由于络脉颜色识别在所有特征中较为困难,若在目标检测阶段同时进行定位和颜色识别,可能会降低颜色识别的准确率。因此,这一过程被分为两个阶段:第一阶段通过分割算法精确划分络脉区域;第二阶段则基于分割结果,使用分类算法对络脉颜色进行分类。
(1) 步骤1:数据清洗,排除标注前后的不合格数据。
(2) 步骤2:数据标注;使用中医舌象辅助诊断系统软件对舌体进行多边形标注,专注于络脉特征。
(3) 步骤3:图像预处理;将标注好的数据转换成络脉掩膜图,并统一调整图像及掩膜图至1504x832像素;在网络训练前,将调整后的图像随机裁剪成512x512像素送入网络。
(4) 步骤4:模型训练;利用标注好的数据训练Unet模型;训练参数设置为学习率0.0001,迭代100次,使用PyTorch深度学习框架,编码语言为Python。
(5) 步骤5:模型测试;评估训练得到的Unet模型在络脉分割上的效果,常用的评价指标为mIoU。
(6) 步骤6:使用Unet进行络脉分割;将舌图像输入训练好的Unet网络中进行络脉分割。舌下络脉颜色共分为淡红、暗红、淡紫、青、紫、绛紫、紫黑7类。整个算法分为离线训练和在线测试两个阶段。
离线训练:
(1) 步骤1:络脉分割;对舌下区域进行络脉分割,定位络脉区域。
(2) 步骤2:抠图;对步骤1得到的络脉区域进行最小外接矩形抠图。
(3) 步骤3:图像预处理;对抠出的络脉图像进行缩放,统一调整至64x128像素。
(4) 步骤4:将预处理后的图像输入VGG16分类网络,获取颜色预测类别。
(5) 步骤5:根据VGG16预测的颜色类别与标签颜色类别计算多分类交叉熵损失函数值,通过多次迭代优化颜色分类模型。
在线测试:
(1) 步骤1:络脉分割;对舌下区域进行络脉分割,定位络脉区域。
(2) 步骤2:抠图;对步骤1得到的络脉区域进行最小外接矩形抠图。
(3) 步骤3:图像预处理;对抠出的络脉图像进行缩放,统一调整至64x128像素。
(4) 步骤4:将预处理后的图像输入训练好的VGG16分类模型,确定络脉颜色类别。
4.5.2 络脉粗细判断
络脉粗细的判定有两种方法:一种是通过计算络脉宽度与舌下宽度的像素值比值,若比值超过阈值A则判定为粗络脉,若低于阈值B则判定为细络脉。但由于络脉形状不规则,难以精确测量每条络脉的宽度,导致比值波动大,影响判定准确率。另一种方法是将络脉图像输入深度学习分类网络,通过大量数据样本训练出一个粗细判定的分类网络。因此,选择第二种方法进行判定,络脉粗细共分为三类:粗络脉、细络脉和正常络脉。
离线训练:
(1) 步骤1:络脉分割;对舌下区域进行分割,以确定络脉区域。
(2) 步骤2:抠图;对步骤1中确定的络脉区域进行最小外接矩形抠图。
(3) 步骤3:图像预处理;对抠出的络脉图像进行尺寸调整,统一缩放至64x128像素。
(4) 步骤4:将预处理后的图像输入VGG16分类网络,预测络脉的粗细类别,分为粗、细、正常三类。
(5) 步骤5:根据VGG16预测的类别与实际标签类别计算多分类交叉熵损失函数值,通过多次迭代优化,获得最优分类模型。
在线测试:
(1) 步骤1:络脉分割;对舌下区域进行分割,以确定络脉区域。
(2) 步骤2:抠图;对步骤1中确定的络脉区域进行最小外接矩形抠图。
(3) 步骤3:图像预处理;对抠出的络脉图像进行尺寸调整,统一缩放至64x128像素。
(4) 步骤4:将预处理后的图像输入训练好的VGG16分类模型,确定络脉的粗细类别。
4.5.3 络脉长短评估
鉴于舌象图片的拍摄距离存在差异,无法直接测量舌下络脉的精确长度。因此,在评估络脉长短时,我们采用络脉高度与舌下图像高度的比值来衡量络脉的长短,而非绝对数值。若比值超过设定的阈值A,则判定为长络脉;若比值低于设定的阈值B,则判定为短络脉。
(1) 步骤1:对络脉进行分割,提取络脉区域。
(2) 步骤2:对络脉区域进行最小外接矩形处理,并统计每条络脉的高度。
(3) 步骤3:将步骤2得到的高度除以舌图像的高度,计算络脉与舌下的高度比值。
(4) 步骤4:基于实践设定,阈值A为0.65,阈值B为0.3。若络脉高度与舌下高度的比值大于0.65,则判定为长络脉;若比值小于0.3,则判定为短络脉。
3.5.4 舌下其他特征识别
舌下其他特征包括结节、瘀斑瘀点、迂曲等,这些特征与舌面上基于局部识别的特征相似,主要存在于舌面的局部区域,且位置不固定。因此,继续采用目标检测算法YOLOv3进行目标定位和特征类型识别。具体的舌下特征检测算法流程详见图26。
(1) 离线训练:
步骤1:图像预处理;将舌下图像调整至608x608像素,同时转换标签坐标。
步骤2:YOLOv3操作;将预处理后的图像输入YOLOv3网络进行推理,输出预测结果。
步骤3:后处理操作;对YOLOv3输出的结果执行阈值筛选和非极大值抑制等操作,以去除多余的预测框,得到最终的预测结果。
步骤4:损失函数计算;根据预测结果和标签数据计算算法的损失值,通过反复训练降低损失值,最终获得训练好的舌下特征检测模型。
(2) 在线测试:
步骤1:图像预处理;调整舌下图像的尺寸至608x608像素,并相应地转换标签坐标。
步骤2:推理阶段;将经过预处理的图像输入至训练完成的YOLOv3网络模型中进行推理,以获取预测结果。
步骤3:后处理操作;对YOLOv3推理结果执行阈值筛选和非极大值抑制等后处理步骤,以精细化预测结果。
步骤4:舌下特征检测识别;对经过后处理的结果进行分析,确定舌下图像中各特征的具体位置和类型。
五、中医舌象辅助诊断系统架构设计
中医舌象的数字化采集和辅助诊断流程较为复杂,涉及的图像预处理和特征提取算法计算密集,对CPU和存储资源需求较高,这限制了系统在移动平台上的移植和用户体验。为了实现系统的轻量化、便携性和普及化,本设计采用客户端与服务器分离的架构,将计算任务最小化,以减少对用户设备的影响。系统由客户端(安卓APP)和服务器端(包括医生管理平台和算法服务)组成,客户端以APP形式提供用户界面,而服务器端负责资源、数据和服务管理,如舌象数据管理、算法服务调度、数据安全等。算法服务在算法服务器上运行,通过HTTP协议提供API接口服务,接口设计依据算法功能定制。
5.1 服务器端构建
服务器端系统以网页形式服务于医生和管理员,运行在服务器上,支持系统维护、诊断、标注、量表等功能。后端基础框架采用Spring Boot,支持多种数据存储技术,包括关系型数据库、NoSQL数据库和嵌入式数据库,以及云平台和消息中间件,提供高扩展性和定制化选项,易于搭建和集成。数据库选用MySQL,以其速度快、灵活性高、多系统兼容性、多语言支持、稳定性和开源免费等优点。缓存使用Redis,支持多种数据类型和排序方式。文件存储系统采用MinIO,以其简单的部署、多平台支持、优异的读写性能、大容量存储和高容忍度的磁盘损坏容忍度。图像标注功能使用fabric插件和canvas技术实现,以便人工提取舌象特征。
5.2 客户端构建
客户端登录后提供数据采集、个人信息维护、量表问卷填写以及查看舌象诊断报告和量表结果等功能。客户端集成了图像质量判定、颜色校正等算法功能。采用Android原生开发,组件化框架分离业务和功能模块,提高兼容性和管理效率,快速访问设备接口,支持大量图形和动画,确保流畅的用户体验。开发框架采用Kotlin+Jetpack+MVVM,高效集成主流第三方功能库。封装了常用模块,如ARoute路由跳转、RecyclerView通用适配器、Event Bus事件发布/订阅、Bugly异常上报、Android权限请求框架,并采用开源的屏幕适配方案。
5.3 系统运行流程概述
5.3.1 客户端算法执行
用户通过手机客户端拍摄舌象图像并上传,系统首先对图像进行颜色校正,随后依次进行清晰度、亮度评估和全舌检测。只有当图像通过清晰度、亮度和全舌检测后,才将其传输至服务器端进行舌上和舌下的算法分析。
5.3.2 舌上算法处理
舌上算法负责分析舌面的舌色、舌形、苔色、苔质以及舌面分区颜色值。服务器接收客户端传输的校正后合格的舌图像,依据已知的舌上/舌下标签信息,首先执行舌体分割,区分舌上和舌下区域。对于舌上区域,系统将并行执行舌色识别、舌形识别、苔色识别、苔质识别以及舌上五分区划分。基于五分区划分和苔质分类结果,计算各分区的颜色值。最终,汇总所有算法结果,输出舌面检测的综合结果。
5.3.3 舌下算法处理
舌下算法专注于分析舌下络脉的颜色、形状、舌下结节、迂曲和瘀斑瘀点。在确定图像为舌下区域后,系统将执行基于舌下区域的特征检测,包括结节、迂曲、瘀斑瘀点。同时,对舌下络脉进行分割,抠图获取络脉区域小图,并对该小图进行颜色识别和形状判定。最后,汇总检测和识别结果,输出舌下检测的综合结果。
系统运行流程图
六、结语
本研究针对舌象采集的基本属性、舌诊图像信息构建、舌象特征精准提取等关键技术,采用多维度场景提示控制采集环境,运用深度学习模型映射方法还原图像基本属性并筛选图像质量,以及采用深度学习多模型定制化结合实现舌象特征精准提取。这些技术解决了中医舌诊人工智能临床转化应用的关键技术难点,并构建了完整的舌诊辅助诊断平台,具有重要的科学意义和研究价值,为中医与人工智能的深度融合及转化应用提供了有益参考。学科间的交叉渗透是科技创新的动力,也是科技发展的必然趋势。中医舌诊图像信息的数字化和智能化分析是实现中医科学性问题的有效途径,是现代技术诠释传统中医药的有效手段,增强了医道、医理、医术自信,推进了中医的国际化和产业化进程。此外,该平台可应用于中医诊断临床、教学、科研,培养跨“医-药-工”新型交叉学科及高层次医学人才,助力中医药传承与创新的国家战略。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.