赵晓梅,刘兆邦,张正平,谢 璟,陆千琦*
(1.贵州大学 大数据与信息工程学院,贵州 贵阳 550025;2.中国科学院 苏州生物医学工程技术研究所,江苏 苏州 215163;3.温州市人民医院,浙江 温州 325699)
皮肤病是人类中很常见的一种病症,种类繁多,其中属恶性黑色素瘤最为危险,最易导致皮肤癌死亡率上升。皮肤镜是一种检测皮肤病变的非侵入性成像方法,使皮损的亚表面结构更容易被分析,然而,研究表明,皮肤镜检查实际上可能会降低缺乏经验的皮肤科医生的诊断准确性。因此,为了最大化降低由人类主观性引发的诊断错误,科研工作者将近几年飞速发展的计算机图像分析技术和皮肤镜检查融为一体,形成了自动皮肤镜图像分析技术。该技术一般分为3个步骤,分别为图像分割、特征提取和病变分类,其中分割对于图像分析尤为重要,因为它会影响后续步骤的准确性。目前为止,已经开发了许多方法用于皮肤损伤的自动分割,但是由于病变与周围皮肤之间的对比度低、头发和气泡等干扰性因素、病变区域与背景区域的复杂性等原因,导致皮肤镜图像分割仍然是一项艰巨的任务。
皮损分割方法可大致分为基于区域的,基于边缘的和基于阈值的分割算法。基于阈值的方法如文献[1-3],这类方法通常根据图像的直方图选取一个合适的阈值进行分割,但由于大多数皮肤镜图像的皮损区域和背景区域并没有明显分界线,其直方图存在多个峰值,导致阈值分割算法并不适用于皮肤镜图像分割。基于边缘的方法以主动轮廓模型为主,在文献[4-5]中有所体现,这些方法的目的是构造能量泛函,能量函数由内力和外力组成,通过最小化能量函数找到皮损的最佳边缘,然而该类方法依赖于分割参数的选择,并且可变模型通常还需要产生无效停止标准,影响运算效率。基于区域的分割方法[6-9]是指根据预定义的图像特征(如颜色、强度、小波等)将图像划分成不同的区域。这类方法对于弱边缘的检测并不迅捷。近几年,监督学习方法如卷积神经网络(CNNs)被用于皮肤镜图像中的病变分割[10-12],该方法需要大量标记的训练图像从而提高分割正确率,然而,由于手工注释的复杂性和临床医生的主观性,皮肤镜图像数据的获取是极其不易的。文献[13]叙述并讨论了上述所提到的皮肤病分割算法以及它们结合的分割算法。
针对上述算法存在的问题,文中提出了一种基于超像素和密度聚类的皮肤镜图像分割算法。为了验证该算法的性能,从ISIC2018上下载了1 000多张皮肤镜图像,人为挑选并分成了易分,中等,难分各100张图像,从分割指标来看,该算法在易分,中等,难分这3个种类的皮肤镜图像上与其他算法相比都取得了不错的分割效果,尤其边界比较模糊的图像更能体现出该算法的有效性。
皮肤镜图像中皮损结构根据皮肤状况而变化很大,诸如毛发、气泡和凝胶墨水标记之类的伪影降低了分割算法的效果,其中属毛发噪声最常见也最影响分割效果。文献[14]对皮肤镜图像做了全方位的预处理。而文中只处理毛发噪声,新提出了一种毛发去除方法,首先使用低帽操作识别头发,其次进行二值化和腐蚀使得毛发区域突出,最后用原始图像的闭操作图像替换毛发区域。
超像素算法是指具有相似纹理、颜色、亮度等特征的相邻像素构成的不规则像素块,它利用像素之间特征的相似性将像素分组,用少量的超像素代替大量的像素来表达图片特征,很大程度上降低了后续图像处理任务的复杂性,它们已经成为计算机视觉算法的关键步骤。
SLIC是用于生成超像素的方法之一,文献[15]研究调查了28个超像素算法,并说明了SLIC为在实践中使用的最佳6种方法之一。该算法将彩色图像转化为CIELAB颜色空间和XY坐标下的5维特征向量,然后对5维特征向量构造距离度量标准,对图像像素进行局部聚类的过程。SILC包括3个核心步骤:
(2)超像素生成:将每个像素点根据距离度量公式(1)分配到最近的聚类中心,为了加快算法收敛,SLIC将搜索窗口改为2S*2S,而不是k-means算法中的s*s区域。
(1)
其中,dlab和dxy分别为:
(3)聚类中心更新:新的种子点根据所有像素的平均l-a-b-x-y向量进行更新。
该算法是Martin Ester等人[16]提出的对空间噪声数据进行有效聚类的一种方法,核心思想是先发现密度较高的点,然后把相似的高密度点逐步都连成一片,进而生成各种簇。
在文献[17]中提到密度聚类的相关定义分别为:
(1)数据点的邻域:以点p为核心,Eps为半径的邻域定义为:
NEps={q∈D|dist(p,q)≤Eps}
其中,D为空间中数据集的集合,dist(p,q)表示D中p和q间的距离。
(2)直接密度可达:点p由点q直接密度可达需满足p∈NEps,|NEps|≥MinPts。
(3)密度可达:点p由点q密度可达需满足:若有一系列点p1,…,pi,…,pn,p1=q,pn=p,其中pi+1由pi直接密度可达。
(4)密度相连:点p与点q密度相连需满足若存在点o,点p与q都由点o密度可达。
由以上定义可归纳出DBSCAN的定义:由密度可达关系导出的最大密度相连的样本集合,即为最终聚类的一个类别或一个簇。
一般采取灵敏度(sensitivity,SE)、特异度(specificity,SP)、Dc系数、Ja指数、像素精确度Pa和误差概率(error probability,EP)来评价一个分割算法的性能,相关定义如下所示:
(2)
(3)
(4)
(5)
(6)
(7)
其中,TP为真阳性,FN为假阴性,FP为假阳性,TN为真阴性[17]。
所提出的皮肤镜图像分割算法流程如下:
Step1:(预处理)对整理的300张皮肤镜图像进行预处理,由于下载的图像大小不一,图像尺寸过大影响算法运行时间,故将这300张皮肤镜图像统一大小为256*192。
Step2:(SILC超像素分割)该步骤主要参考文献[14],算法描述如算法1所示:
算法1:SILC超像素分割。
输入:皮肤镜图像,超像素个数,迭代次数;
输出:超像素标记图像I,邻接矩阵Am,结构体数组C。
该算法的实现步骤见1.2节阐述部分。
文中在算法1的基础上做了两个细微改变,一是用六边形网格代替了方形,二是聚类的方向不是沿着最低梯度。
Step3:(密度聚类算法)该算法是在超像素分割的基础上将颜色相近的超像素合并在一起,达到皮肤镜图像分割的目的。算法流程见算法2。
算法2:密度聚类算法。
输入:超像素标记图像I,邻接矩阵Am,结构体数组C,颜色阈值t;
输出:超像素新聚类区域的标记图像Ic。
步骤:
将所有的超像素标记为未访问
(1)选择第一个超像素p1,标记为已访问;
(2)根据邻接矩阵Am遍历找出p1满足颜色阈值t的全部邻域,将其划分为N1;
(3)不满足的超像素则划分为N2,找出属于N2的超像素;
(4)继续划分新的簇Ni,直到所有的超像素划分完毕。
输出结果为Ic={N1,N2,…,Nk}。
Step4:(形态学处理)经过上述步骤处理后的皮肤镜图像,由于皮损区域和背景区域的多样性,一些图像会出现离散的小洞,用形态学方法对这些图像进行处理,得到最终的分割图像。
为了判断所提算法的可行性,从ISIC2018上下载了1 000多张皮肤镜图像及其专家标注对应的皮损二值分割图像,从中挑选300张作为所提算法的数据集,同时根据图像背景是否复杂、纹理是否粗糙、皮损区域是否显著将皮肤镜图像分成了易分,中等和难分3个数据集,以此更全面、更综合地评价所提算法的好坏。由于文中只涉及分割,不涉及分类,所以不对皮肤病类型作深入研究。
用1.4节提出的评价指标评估文中算法,所使用的是像素级估计,即与标准分割图像相比,能够正确识别多少个病变像素。其中SE表示的是皮损像素的正确率,SP表示的是背景皮肤像素的正确率,Ja指数和Dc系数估计的是标准分割图像与算法分割病变区域的重叠程度即相似度。选取了文献[1]-自适应阈值分割算法,文献[1,4]-水平集分割算法,文献[8]-结合显著性和OSTU分割算法,与文中算法作比较,表1~表3是各算法的分割指标对比情况。
表1 易分组
表2 中等组
表3 难分组
从表1~表3可看出,无论皮肤镜图像的质量好坏,文中所提出的算法对比于文献[1,4,8]的算法在各项分割指标上都取得了很好的效果。
从易分组来看,除特异度指标外,其他指标文中算法表现得最好,文献[8]中的算法次之,其中灵敏度取得了比第二名高出10%的结果,这说明文中算法在检测皮损像素上具有较高的敏感性,这很大程度上取决于密度聚类算法能够很好地检测到皮肤镜图像的边缘。从中等组来看,文献[8]中的算法与文中算法效果不相上下,但同样从灵敏度可看出,结合显著性和OSTU分割算法在处理图像边缘时效果远远低于文中算法。从难分组来看,所有算法在处理背景比较复杂、皮损区域对比度低的皮肤镜图像时,分割指标都不算理想,相比较而言,文中算法取得了相对较高的结果。其次,分析三组的相似度指标,文中算法的Dc系数在3种类型的图像上的结果分别为0.902 8,0.798 5,0.694 4,都优于文中所提到的算法。
图1是所提算法的整个过程,图2是未经预处理的分割图像,中间省略了部分过程图像。未经过毛发去除的图像会导致分割失败,可见,对于有毛发噪声的图像,预处理步骤可以极大提高分割精度。
图1 文中算法过程
图2 未经过预处理的图像
图3 易分组
图4 中等组
图5 难分组
图3~图5是文中算法在易分、中等和难分上的分割结果以及与其他算法对比情况。对于背景比较单一,皮损区域比较明确的情况,如图3所示,4种算法都能得到很好的分割效果,但是自适应阈值和水平集分割方法并不能捕捉到类似锯齿的边界,相反,文献[8]中的算法和文中算法比较接近真实的分割结果,所以它们的Ja指数和Dc系数都比较高。对于图4中皮损区域不单一以及与背景图像相似的情况,自适应阈值和水平集都分割失败,这两种算法仅能分割出明显的皮损部分,文中算法在图2中第一幅图像上,检测出了右下角和上方的非皮损部位,说明该算法较灵敏。对于图5分辨率低、难于分割的皮肤镜图像,自适应阈值和水平集依然分割失败,文中算法仍然能正确分割出目标区域,但对于极其模糊的边界,该算法并不能准确检测出来,也可以看出,文献[8]中的算法能处理不均匀但无法处理模糊边界。对于那些极难分割的图像,如图6,所有的分割算法都无效。
图6 难分中分割失败的皮肤镜图像
提出了一种基于超像素和密度聚类的皮肤镜图像分割算法,该算法中间过程少,运行速度快(运行一张图片仅需2秒的时间)。能够准确检测皮肤镜图像的弱边缘,这点对比于其他分割算法具有很大的优势,分割精度也与其他分割算法相比更高。同时对于毛发噪声提出了一种新的去除方法,该方法原理简单,效果较好。
对于不同类型的皮肤病图像,因为在密度聚类算法里需要设置合适的阈值,所以所提出的算法对于部分图像需要手动调参,而关于皮肤镜图像分割的算法很多,但通用的算法很少。因此,研究皮肤镜图像的分割将会是一个长期而艰巨的过程。