医疗化验单区域检测方法研究

2021-06-03 06:39王希畅吕学强董志安
计算机技术与发展 2021年5期
关键词:化验单阈值直线

王希畅,吕学强,何 健,董志安

(1.北京信息科技大学 网络文化与数字传播北京市重点实验室,北京 100101;2.北京洛奇智慧医疗科技有限公司,北京 100015;3.清华大学互联网产业研究院,北京 100084)

0 引 言

随着信息化时代的到来,医疗化验单识别已成为医疗领域重要的研究话题。医疗OCR[1-2](optical character recognition,光学字符识别)生成的电子化验单可以解决纸质化验单数量过大,不便于保存,且患者无法正确理解各项指标含义的困扰[3]。而区域检测是指需检测到化验单的检验项区域,为化验单识别做预处理,对提取化验单的有效信息进而进行后续的自动处理具有重要的作用。因此如何检测检验项区域成为一项必不可少的研究。利用合适的检测方法,可以得到较准确的检验项区域,对之后的识别[4-5]起到了重要的作用。

与其他区域检测不同,医疗化验单具有规定版型的特征,可以根据化验单中的直线特点进行检测。因此文中基于直线检测进行化验单检验项的区域检测。在直线检测领域内,霍夫变换占据着核心地位,分为标准霍夫变换与累积概率霍夫变换。同时,结合检验项区域特征,提出了基于二值化的单侧区域检测与双侧区域检测方法,适用于不同倾斜程度的化验单。

综上所述,以某医院真实化验单为实验数据进行区域检测并切割,通过应用不同的区域检测方法,对比区域切割的效果,对每种方法所适合的场景进行分析。

1 相关工作

为寻找合适的区域检测方法进行化验单检测,下面将着重介绍三种基于直线检测的方法:基于霍夫直线检测、单侧区域检测、双侧区域检测。不同方法的区域检测效果不同,利用合适的区域检测方法可以得到较好的区域检测效果。

1.1 基于霍夫直线检测

1.1.1 霍夫直线检测原理

霍夫直线检测[6]在计算机视觉领域中有着重要的研究意义,其基本原理在于利用图像空间中的边缘像素点映射参数空间中参考点的可能轨迹。即图像空间与参数空间中的点线是一一对应的,图像空间中的某个点对应着参数空间中的某条线,反之同理。由此可知,参数空间中多条线映射着图像空间中多个不同的点,而多条线的交点即为图像空间中的某条直线[7],通过计算累计结果的局部最大值得到直线集合。

依照上述原理进行图像中的直线检测,利用公式ρ=xcosθ+ysinθ求解两空间的对应关系[8]。首先遍历图像中的像素点,将像素点的坐标值与规定范围内θ角度值代入公式计算距离ρ值,以ρ值与θ角度值为横纵坐标存入计数器矩阵中,计算两值相同的像素点的数量。每个像素点的角度变换极值为180。,均遍历后得到计数器矩阵。在规定阈值的前提下,矩阵中元素值超过阈值的横纵坐标(θ,ρ)为直线在参数空间中的映射表示,代入公式求解x值与y值即得到基于霍夫变换[9]检测到的直线坐标集合。

1.1.2 边缘检测

为使医疗化验单区域检测的效果更佳,在霍夫直线检测之前对图像进行边缘检测[10]。所谓边缘是指图像信息周围灰度值急剧变化的像素集合,是不同属性区域的交界处,通常代表着内容的变化[11-12],它是图像分割所依赖的最重要的依据。

Canny边缘检测包含四个步骤:(1)利用高斯滤波器进行滤波操作,降低噪声点的干扰;(2)使用Sobel算子,计算各个点的梯度幅值与梯度方向;(3)利用非极大值抑制,消除边缘检测的杂散效应;(4)通过设置双阈值,确定边缘。

本节针对边缘检测使用python环境的cv2.Canny()函数[13],该函数对上述功能进行封装,可直接调用。在调用时需设置阈值1与阈值2,一般来说阈值2大于阈值1,利用阈值2可检测出大部分明显的边缘,确定真实边缘,但仍有纰漏。需要设置[14]较小的阈值1连接断断续续的直线,确定潜在边缘。

设置合适的阈值可以较为完整地显示图像中的轮廓信息,双阈值设置过大或过小时均会造成图像信息的不准确。双阈值均过小时除描述轮廓外会产生较多杂质,即筛选条件过低,将不属于轮廓的噪声也一并显示,容易对区域检测造成干扰。而双阈值过大代表着筛选条件过高,原本图像中的轮廓易被当作杂质忽略,会筛除真实边缘,无法完整表示图像轮廓信息,造成图像信息缺失。

如上所述,阈值过大或过小均会造成图像轮廓信息无法正确显示。因此,找到合适的双阈值可以有效地对图像进行边缘检测。经过对比,实验设置的双阈值为(50,150),可较为完整地显示图像轮廓,无其余杂质,效果较佳。

1.1.3 基于霍夫直线检测具体流程

利用霍夫直线检测进行医疗化验单的区域检测具体流程如图1所示。

图1 区域检测具体流程

首先,对化验单灰度图进行边缘检测生成二值图。再利用概率霍夫变换函数cv2.HoughLinesP()生成检测到的所有线段头尾坐标集合。由于集合中有部分线段不符合后续区域检测的要求,因此需要对线段集合进行筛选。筛选条件设置为两个:(1)删除竖直线段,即起点与终点横坐标相差距离较小的线段;(2)删除平行距离过近的线段,由于化验单中的黑线不只由一行像素点表示,因此需删去相邻的线段,保留靠近下边缘的线段。

将筛选后的线段纵坐标放入新的集合,需在该集合中自动检测出检验项区域的上下边界,筛除不符合条件的线段。该医院化验单的特点为检验项呈现在表格之中。因此,可基于该特点确定区域上边界max_up与下边界max_down。通过比较相邻两直线的距离进行判断,直线相差距离较大的下方直线为下边界,上边界为距离较小的上方直线,依据最终上下边界进行切割即得到化验单检验项区域。

该方法的难点在于调试合适的参数,使检验项区域检测效果达到最佳。边缘检测,霍夫直线检测均需要针对不同的医疗化验单进行阈值调试,往往不同化验单所需阈值不同,且调试阈值较花费时间,故该方法无法对大量医疗化验单进行区域检测。

1.2 单侧区域检测

由于医疗化验单具有固定的版型,因此本节通过二值图的黑色像素点是否连续来判断直线坐标,根据图像单侧检测到的直线坐标进行区域检测。利用该方法检测化验单的检验项区域可较准确地提取出所需部分。

1.2.1 图像二值化

为使医疗化验单中区域区分更加明显,预先利用python环境的cv2.cvtColor()函数将原始RGB图像转换为灰度图[15],将色彩三通道变为单通道,以此减少运算量;再对灰度图二值化达到突出前景的目的。二值化是指通过设置阈值,把图像的每个像素值按照阈值大小设定为0或255,使图像呈黑白效果,有效地突出图像轮廓,可明显区分图像前景与背景,方便提取图像中的信息,降低维度。

二值化处理中最重要的是阈值选取,需要根据阈值的大小判断像素点的值,不同阈值的选取会呈现不同的图像效果,合适的阈值选取会提高单侧区域检测方法的检测准确性。阈值选取分为全局阈值与局部阈值。全局阈值是指图像像素均按照一个阈值来划分:大于该值的像素群和小于该值的像素群,该阈值选取方法较单一,无法根据图像亮度等因素进行阈值设定,对光照不均匀的图像容易出现错误的二值分割;局部阈值是指按照图像中不同部分的不同亮度来计算每一个区域的阈值[16-17],该方法按照区域特点[18]设定不同阈值。为准确地突出每一部分的轮廓,避免光照不均匀等误差,实验将使用局部自适应阈值法进行图像预处理。

局部自适应阈值法[19]是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。通过调用函数cv2.adaptiveThreshold()对灰度图实现二值化,针对每一个像素点设置相应的阈值,即对该像素点周围的像素值加权平均,并减去一设定常数,从而得到该像素点的阈值。该方法打破了全局阈值的束缚,减少了相对误差。

1.2.2 单侧区域检测具体流程

单侧区域检测是基于医疗化验单二值图实现的,按照判定范围分为左侧区域检测与右侧区域检测,即从不同侧对化验单进行检验项区域检测。二者针对不同倾斜方向的图像有着不同的效果。单侧区域检测具体流程如图2所示。

图2 单侧区域检测具体流程

首先,对医疗化验单灰度图进行自适应阈值化生成二值图,大于阈值的像素值设为255,反之则设为0。再根据待测图像的特征输入判定范围,可选择左侧或右侧进行区域检测,本节设判定长度为40。从图像纵轴起点开始判定,若该行像素点均为黑色,则将该行横坐标计入直线集合中;若存在白色像素点,则跳到下一行,以此循环。将范围内的像素点均遍历过后,即得到初检测的直线集合。

上述所得到的直线集合是范围内未经筛选的全部直线,为找出检验项区域的上下边界,需对该集合进行筛选[20],筛选条件与基于霍夫检测方法相同,筛选后即得到检验项区域上下边界,依据检测到的上下边界进行区域切割。

单侧区域检测的特点是以单侧检测的坐标为基准进行切割,对于倾斜角度较小的化验单具有良好的检测效果,不同侧的区域检测方法适用于不同倾斜方向的化验单。同时,该方法无需耗费过多时间进行参数调试,即可实现大量化验单的检验项区域检测。

1.3 双侧区域检测

双侧区域检测是在单侧区域检测的基础上完成的,具体流程相似。二者均预先对医疗化验单灰度图进行二值化处理,生成像素值为0或255的二值图;再利用判定直线算法产生初直线集合;最后基于筛选条件生成检验项区域的上下边界,以此完成检验项区域检测。但不同于单侧的左侧遍历或右侧遍历,双侧区域检测的特点是相继输入左侧与右侧的判定范围,分别实现上述过程后返回两组输出值,对比两组输出值生成检验项区域的上下边界,以此进行区域切割。

直线判定范围是决定区域检测效果的重要因素,合适的判定范围可优化检验项区域的检测效果,双侧区域检测需设定不同侧的直线判定范围。设医疗化验单宽度为w,宽度系数为100。实验分别对比了横轴起点为左侧w/25,左侧w/6,右侧w/6的图像信息。结果表明图像在不同的范围内呈现不同的信息。故选定左侧w/6与右侧w/6作为双侧区域检测范围。

左侧与右侧分别输出检验项区域上下边界的目的是防止左右倾斜相差过大,为均衡左右边界坐标,减少杂质切割,即对左右两侧的输出值进行对比得到最终的上下边界(max_up,max_down),并进行检验项区域切割。

通过对比左右侧返回的坐标,判断该化验单是否处于倾斜状态。若倾斜角度过大,可依据四点坐标进行倾斜图像的矫正。

2 实验分析

上文介绍了三种不同的区域检测方法:基于霍夫直线检测、单侧区域检测与双侧区域检测方法,下面将针对三种方法的检测效果进行分析总结。实验数据为某医院30张真实医疗化验单:16张手机拍摄+14张高拍仪拍摄。针对以下问题展开具体分析:(1)针对不同设备拍摄的化验单,三种区域检测方法效果是否相同;(2)是否对所有类型的化验单图像均可准确检测,如在不同倾斜角度下拍摄的化验单。

2.1 针对高拍仪拍摄的化验单

据高拍仪拍摄的14张图像显示,由于高拍仪设备具有自动裁剪与亮度均匀的特点,可精准裁剪化验单的整体轮廓。故拍摄的图像均为水平放置,且无背景噪声。

由此可见,医疗化验单经高拍仪拍摄后,均显示为规整模式的图像,无区域检测难度。分别利用三种区域检测方法对14张高拍仪拍摄的化验单进行检测,发现由于化验单的类型相同,任意一种方法均能准确地检测出14张图像的检验项区域,检测效果良好且相同。因此,若对高拍仪拍摄的医疗化验单进行区域检测,采用任意一种检测方法均可。

2.2 针对手机拍摄的化验单

针对16张手机拍摄的医疗化验单进行区域检测时发现,不同于高拍仪拍摄的化验单,由于手机拍摄缺乏专业性,会出现化验单倾斜、背景噪声等问题,对区域检测造成干扰。因此对每种方法所适合的检测场景展开研究。

(1)由于霍夫直线检测有设置阈值的限制,利用基于霍夫直线检测方法进行区域检测时,需设置最小线长度阈值(minLineLength)与最大线差值(maxLineGap),因此研究不同阈值与化验单的关系是区域检测的基础。为确定不同阈值对同一张医疗化验单区域检测效果的影响,设置不同阈值进行对比实验。选定任意一张手机拍摄的医疗化验单,在该化验单的基础上设置不同的最小线长度阈值(minLineLength),并对检测效果进行对比。首先对化验单a选定两个不同的最小线长度阈值,分别为147与180。可以看出,对化验单a进行阈值调试时,阈值为147的检测效果较好,可较准确的检测出检验项区域。

由此可得,对于同一张手机拍摄的医疗化验单,设置不同的阈值检测效果有明显差异。因此,对医疗化验单进行区域检测时,需针对不同化验单进行阈值的调试,阈值可直接影响检测效果。将阈值设为最佳数值时能准确地检测出医疗化验单的检验项区域,检测效果较好。

为更清晰地分析基于霍夫直线检测的区域检测方法适合的场景,需以同一阈值对不同的医疗化验单进行区域检测。在化验单a中最小线长度阈值为147时检测效果较佳,故利用该阈值对化验单b进行区域检测。通过对比同一阈值下不同化验单的检测效果判断该方法能否进行批量化验单的区域检测。实验结果如图3所示,图3(a)为当minLineLength=147时对化验单a进行检测的效果,图3(b)为当minLineLength=147时,对另一张手机拍摄的化验单b进行区域检测的效果,可明显看出,效果不佳。

(a)当minLineLength=147时化验单a的检测效果

(b)当minLineLength=147时化验单b的检测效果

如上文所述,基于霍夫直线检测的区域检测方法应用在手机拍摄的化验单上有一定的局限性。当对某张化验单进行不同阈值测试时,可根据检测效果得到适合该化验单的最佳阈值;利用该阈值对其他化验单进行检测时发现效果较差,是由于手机拍摄的图像类型不尽相同,例如倾斜程度的不同会产生不同的干扰。因此对于手机拍摄的单张化验单,需调到适合该化验单的检测阈值进行检测。不同图像的检测阈值往往不同,且调试到合适的阈值较花费时间,故无法应用此方法对大批量化验单进行检验项区域检测。

(2)单侧区域检测方法没有霍夫阈值的限制,因此无需对不同化验单进行阈值调试,检测花费时间较少。该方法分为左侧区域检测与右侧区域检测,即按照左侧或右侧检测的坐标进行检验项区域切割。二者适用于不同倾斜方向的图像,对顺时针倾斜或逆时针倾斜的化验单有不同的检测效果。若利用左侧检测方法对顺时针倾斜的化验单进行区域检测,可较准确地检测出检验项区域,减少背景杂质的出现。通过对比不同方法对同一倾斜图像的检测效果,找到适合该类型图像的检测方法。如图4(a)为对顺时针倾斜的化验单进行左侧检测的效果,图4(b)为对相同图像进行右侧检测的效果。

经对比可知,左侧区域检测方法适用于顺时针倾斜的化验单图像,依照左侧检测的坐标对该类型图像进行切割可减少背景噪声,防止切割到其余杂质。同理,针对逆时针倾斜的化验单图像,利用右侧区域检测方法较为合适,以右侧检测到的边界线对逆时针倾斜的图像进行区域切割,可得到较准确的检验项区域。

(a)对顺时针倾斜的化验单左侧检测的效果

(b)对顺时针倾斜的化验单右侧检测的效果

综上所述,单侧区域检测方法适用于不同倾斜方向的化验单。根据化验单的状态选择左侧检测或右侧检测,可得到较优效果。即对不同倾斜方向的医疗化验单进行区域检测,需选择适合该检测场景的区域检测方法。

(3)对手机拍摄的16张医疗化验单进行区域检测时发现,双侧区域检测的特点是会返回左右两侧检测到的纵轴坐标值,该值为检验项区域的上下边界坐标。当图像趋于倾斜时返回的坐标会有明显差异,左右两侧坐标未处于同一水平线,可以此判断图像是否处于倾斜状态。通过对比左右两侧坐标值,将倾斜图像校正并切割检验项区域。

3 结束语

医疗领域的发展已成为社会热点,医疗化验单识别在医疗领域中占据着重要的研究地位。检验项区域检测是化验单识别必不可少的预处理,前者的检测效果对识别的准确率有着重要的影响。因此找到区域检测方法所适合的检测场景有着重要的研究意义。

该文提出了三种区域检测方法,分别描述每种方法的原理与流程,为后续对比实验奠定基础。同时,以某医院真实化验单为实验数据,利用不同设备对医疗化验单进行拍摄,通过对比化验单的区域检测效果对每种方法适合的拍摄情景进行说明。

不同的区域检测方法适合不同类型的化验单。根据化验单特点找到适合的区域检测方法,可得到较好的检测效果,为后续的识别做铺垫,效果显著。

猜你喜欢
化验单阈值直线
非平稳声信号下的小波变换去噪方法研究
土石坝坝体失稳破坏降水阈值的确定方法
一种改进小波阈值去噪法及其仿真
一种小波阈值函数构建的图像去噪算法研究
检验科微生物污染状况调查及化验单消毒方法比较
画直线
一样长吗?
命若游丝
你喜欢直线吗?
巨幼细胞性贫血多与营养不足有关