本发明属于数据读取技术领域,具体涉及一种超声报告数值自动读取技术。
背景技术:
随着医学技术的发展,超声图像信息也成为疾病诊治中重要的医学诊断依据。现有的主要技术由医生通过超声诊断仪采集图像和数值并合并成单张图像文件,采用多通道显卡通过串行线或者USB线将图像文件传送到计算机主机,提供给医生,用于在计算机中生成超声报告。该技术主要问题是由于只能传输图像信息,而超声诊断仪中采集的数值信息只能以图像方式传输至计算机主机中,医生需要在计算机显示器中根据图像文件显示的数值信息再次手工输入数据,该重复操作除了浪费时间,还有可能因为人为因素造成输入错误。
技术实现要素:
本发明的目的在于提供一种超声报告数值自动读取方法及装置,以实现自动生成超声检查项目的完整报告,避免人为因素录入数据而造成错误的情况,提高数据准确率,减少录入时间,提高工作效率。
为了解决上述技术问题,本发明使用现有的成熟的连通区域检测技术、图像分割技术、字符识别技术等,通过信息化手段和硬件设备的设计,实现超声图像文件中的数值自动读取功能,所采用的具体技术方案如下:
一种超声报告数值自动读取装置,包括:连通区域检测模块,数值区域提取模块,数值行划分模块,字符识别模块,超声报告管理模块;
所述的连通区域检测模块与超声报告管理模块连接;
所述的数值区域提取模块与超声报告管理模块连接;
所述的数值行划分模块与超声报告管理模块连接;
所述的字符识别模块与超声报告管理模块连接;
所述的连通区域检测模块用于进行连通区域的搜索,识别图片信息中各类目标的连通区域信息;
所述的数值区域提取模块对连通区域分析,提取出超声数值区域;
所述的数值行划分模块用于对超声数值区域的位置信息进行分析,将数值区域划分到不同的行,形成单词和数值的行信息;
所述的字符识别模块用于分析数值区域的具体图像信息,识别数值区域中的字母字符和数字字符信息;
所述的超声报告管理模块用于连接和管理各个部件,合并和管理识别出来的字母字符和数字字符信息,根据数值行生成完整的数据信息,进一步生成报告信息。
一种超声报告数值自动读取方法,包括连通区域检测方法,数值区域提取方法,数值行划分方法,字符识别方法,超声报告自动生成方法;
所述的连通区域检测方法如下:
步骤A1超声图像的长度为L,单位为像素点,宽度为W,单位为像素点;整体超声图像由像素点Point{x,y,used,color}组成,x为该像素点的横坐标,y为该像素点的纵坐标,used用于标示该点是否经过计算,0≤Point.x≤W,0≤Point.y≤L,初始化Point.x=0,Point.y=0,Point.used=0;将超声图像二值化处理,得到只有白色或黑色两种颜色的图像,其中黑色像素点为背景点,设置Point.color=0;白色像素点为目标点,设置Point.color=1;矩形数据结构rect{top,left,bottom,right}用于存储连通区域,则数组rect[n]存储所有的连通区域,N为连通区域数量,初始化n=0;堆栈Stack用于存储用于计算的目标点,初始化空堆栈Stack;
步骤A2初始化矩形数据结构rect,设置rect.top=L,rect.left=W,rect.bottom=0,rect.right=0;
步骤A3判断Point.color是否等于1,如果等于1转入A4,否则转入A6;
步骤A4判断Point.used是否等于0,如果是转入A5,否则转入A6;
步骤A5将Point压进栈Stack,转入A10;
步骤A6判断Point.x是否等于W,如果等于W转入A8,否则转入A7;
步骤A7 Point.x=Point.x+1,转入A3;
步骤A8判断Point.y是否等于L,如果等于L转入A14,否则转入A9;
步骤A9 Point.x=0,Point.y=Point.y+1,转入A3;
步骤A10判断Stack是否为空,如果为空转入步骤A13,否则转入步骤A11;
步骤A11将Stack中的栈顶元素Point弹出栈,计算rect[n]的各项数值
rect.left=min(rect.left,Point.x)rect.top=min(rect.top,Point.y)
rect.right=max(rect.right,Point.x)rect.bottom=max(rect.bottom,Point.y);
步骤A12查找Point存在的相邻八个像素点,Point{x-1,y-1,used,color},Point{x-1,y,used,color},Point{x,y,used,color},Point{x,y-1,used,color},Point{x-1,y+1,used,color},Point{x,y+1,used,color},Point{x+1,y,used,color},Point{x+1,y+1,used,color};如果其中的Point.color=1,则将Point压进栈Stack,转入A10;
步骤A13 n=n+1,转入A2;
步骤A14得到所有连通区域rect[n],记录连通区域数量N=n;
步骤A15计算结束;
所述的数值区域提取方法如下:
步骤B1矩形数据结构word{top,left,bottom,right,line}用于存储从连通区域中筛选出来的数值区域,则数组word[m]存储所有的数值区域,M为数值区域数量,设定阈值width,height,CD;
步骤B2采用rect[n]的数值,计算w=(rect.right-rect.left)/W,h=(rect.bottom-rect.top)/H;
步骤B3判断w是否大于width,如果大于width转入步骤B16,否则转入B4;
步骤B4判断h是否大于height,如果大于height转入步骤B16,否则转入B5;
步骤B5连通区域中目标点总数Connect,连通区域中背景点总数Disconnect,初始化Connect=0,Disconnect=0;Point.x=rect.left,Point.y=rect.Top;
步骤B6判断Point.color是否等于1,如果等于1转入B7,否则转入B8;
步骤B7 Connect=Connect+1,转入B9;
步骤B8 Disconnect=Disconnect+1,转入B9;
步骤B9判断Point.x是否等于rect.right,如果等于rect.right转入B11,否则转入B10;
步骤B10 Point.x=Point.x+1,转入B3;
步骤B11判断Point.y是否等于rect.bottom,如果等于rect.bottom转入B13,否则转入B12;
步骤B12 Point.x=0,Point.y=Point.y+1,转入B3;
步骤B13计算cd=Connect/Disconnect;
步骤B14判断cd是否大于CD,如果大于CD转入步骤B16,否则转入B15
步骤B15将rect[n]拷贝至word[m],word[m].top=rect[n].top,word[m].left=rect[n].left,word[m].bottom=rect[n].bottom,word[m].right=rect[n].right,word[m].line=-1;
步骤B16判断n是否小于N,如果小于N转入B2,否则转入B17;
步骤B17得到所有数值区域word[m];
步骤B18计算结束。
所述的数值行划分方法如下:
步骤C1行集合Line,用于存储数值行中所有的数值区域,Line[l]为所有的行集合,l为行号,Line[l].length为l行集合的长度,templ为用于循环的临时行号,tempm为用于循环的临时字号,0≤l≤L,L为数值行总数,初始化l=0,templ=0,m=0,tempm=0,坐标差值阈值MAXY;
步骤C2判断word[m].line是否等于-1,如果等于-1转入C3,否则转入C13
步骤C3 templ=0;
步骤C4 判断templ是否小于L,如果小于L,转入C5,否则转入C12;
步骤C5 tempm=0;
步骤C6判断tempm是否小于Line[templ].length,如果小于Line[templ].length,转入C7,否则转入C10;
步骤C7计算两个数值区域中心点垂直方向上的坐标差值CenterY,计算方法为CenterY=|(word[m].bottom-word[m].top)–(Line[templ].word[tempm].bottom-Line[templ].word[tempm].top)|;
步骤C8判断CenterY是否小于MAXY,如果小于MAXY,转入C9,否则转入C10;
步骤C9 word[m].line=l,将word[m]放入Line[l]行集合,转入C13;
步骤C10 tempm=tempm+1,转入C6;
步骤C11 templ=templ+1,转入C4;
步骤C12 l=l+1,word[m].line=l,将word[m]放入Line[l]行集合;
步骤C13 m=m+1;
步骤C14判断m是否小于M,如果小于M转入C2,否则转入C15;
步骤C15得到所有的行集合Line[l];
步骤C16计算结束。
所述的字符识别方法如下:
步骤D1采用机器学习方法构建字符特征库矩阵,这里采用的机器学习方法可以是基本神经网络分类方法,SVM分类方法,深度神经网络分类方法;
步骤D2将特征库矩阵进行PCA转换,减小特征库矩阵存储空间;
步骤D3初始化l=0,m=0;
步骤D4判断l是否小于L,如果小于L,转入D5,否则转入D10;
步骤D5m=0;
步骤D6判断m是否小于Line[l].length,如果小于Line[l].length,转入D7,否则转入D9;
步骤D7计算Line[l].word[m]与特征库矩阵距离,通过最小距离判断Line[l].word[m]的字符,计算距离的方式可以采用欧式距离或马氏距离方式;
步骤D8 m=m+1,转入D6;
步骤D9 l=l+1,转入D4;
步骤D10得到所有数值行的字符;
步骤D11计算结束。
所述的超声报告自动生成方法如下:
步骤E1预先设定超声报告模版库,模版库由固定内容和自动读取内容组成,超声报告的所有自动读取内容为AutoRead[q],与AutoRead[q]对应的单词为Read[q],0≤q≤Q,q为自动读取内容的编号,Q为自动读取内容的总数;
步骤E2初始化q=0;
步骤E3判断q是否小于Q,如果小于Q,转入E4,否则转入E10;
步骤E4初始化l=0;
步骤E5判断l是否小于L,如果小于L,转入E6,否则转入E8;
步骤E6判断Line[l]中是否包含Read[q]的内容,如果包含,转入E7,否则转入E8;
步骤E7生成自动读取内容AutoRead[q],转入E9;
步骤E8 l=l+1,转入E4;
步骤E9 q=q+1,转入E3;
步骤E10将固定内容和自动读取内容拼凑,得到完整报告;
步骤E11计算结束。
本发明具有有益效果。本发明提供了一种超声报告数值自动读取的新方法,由于超声图像比较复杂,本发明采用“自底向上”方法从像素级开始分析图像的结构,从字符到文本行,自适应性良好。采用相邻八个像素点探寻的连通区域检测方法,可以快速准确的识别超声图像的所有连通区域;采用长度,宽度筛查结合目标点背景点比例判断的数值区域提取方法,可以快速准确的区分数值区域和图像区域,保留纯数值区域;采用数值区域中心点距离衡量的数值行划分方法,可以快速准确的划分数值行;采用机器学习的字符识别方法,可以准确的识别字符。综合以上应用,超声报告数值自动读取方法,可以取代目前手动输入超声报告数值的工作过程,自动生成超声检查项目的完整报告,避免了人为因素录入数据而造成错误的情况,提高了数据准确率,减少了录入时间。
附图说明
图1是本发明装置的总体结构示意图。
标号说明:1-连通区域检测模块,2-数值区域提取模块,3-数值行划分模块,4-字符识别模块,5-超声报告管理模块。
图2是本发明连通区域检测方法的流程图。
图3是本发明实施例一经过二值化处理的超声图像。
图4是本发明实施例一识别出的连通区域示意图。
图5是本发明数值区域提取方法的流程图。
图6是本发明实施例一识别出的数值区域示意图。
图7是本发明数值行划分方法的流程图。
图8是本发明实施例一识别出的数值行示意图。
图9是本发明字符识别方法的流程图。
图10是本发明超声报告自动生成方法的流程图。
图11是本发明实施例二经过二值化处理的超声图像。
图12是本发明实施例二识别出的连通区域示意图。
图13是本发明实施例二识别出的数值区域示意图。
图14是本发明实施例二识别出的数值行示意图。
图15是本发明实施例三经过二值化处理的超声图像。
图16本发明是实施例三识别出的连通区域示意图。
图17本发明是实施例三识别出的数值区域示意图。
图18本发明是实施例三识别出的数值行示意图。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步详细地说明。
由图1所示的一种超声报告数值自动读取装置的总体结构示意图可知,它包括一种超声报告数值自动读取装置,包括:连通区域检测模块1,数值区域提取模块2,数值行划分模块3,字符识别模块4,超声报告管理模块5;
所述的连通区域检测模块1与超声报告管理模块5连接;
所述的数值区域提取模块2与超声报告管理模块5连接;
所述的数值行划分模块3与超声报告管理模块5连接;
所述的字符识别模块4与超声报告管理模块5连接。
本发明在使用时,各部件的功能描述如下。
所述的连通区域检测模块1用于进行连通区域的搜索,识别图片信息中各类目标的连通区域信息;
所述的数值区域提取模块2对连通区域分析,提取出超声数值区域;
所述的数值行划分模块3用于对超声数值区域的位置信息进行分析,将数值区域划分到不同的行,形成单词和数值的行信息;
所述的字符识别模块4用于分析数值区域的具体图像信息,识别数值区域中的字母字符和数字字符信息;
所述的超声报告管理模块5用于连接和管理各个部件,合并和管理识别出来的字母字符和数字字符信息,根据数值行生成完整的数据信息,进一步生成报告信息。
以下是发明人给出的实施例:
实施例1:产检超声图像的数值识别
连通区域检测方法的流程如图2所示。
步骤A1采用GE超声设备,超声图像的长度为576,单位为像素点,宽度为768,单位为像素点;整体超声图像由像素点Point{x,y,used,color}组成,x为该像素点的横坐标,y为该像素点的纵坐标,used用于标示该点是否经过计算,0≤Point.x≤576,0≤Point.y≤768,初始化Point.x=0,Point.y=0,Point.used=0;将超声图像二值化处理,得到只有白色或黑色两种颜色的图像,如图3所示,其中黑色像素点为背景点,设置Point.color=0;白色像素点为目标点,设置Point.color=1;矩形数据结构rect{top,left,bottom,right}用于存储连通区域,则数组rect[n]存储所有的连通区域,N为连通区域数量,初始化n=0;堆栈Stack用于存储用于计算的目标点,初始化空堆栈Stack;
步骤A2初始化矩形数据结构rect,设置rect.top=L,rect.left=W,rect.bottom=0,rect.right=0;
步骤A3判断Point.color是否等于1,如果等于1转入A4,否则转入A6;
步骤A4判断Point.used是否等于0,如果是转入A5,否则转入A6;
步骤A5将Point压进栈Stack,转入A10;
步骤A6判断Point.x是否等于W,如果等于W转入A8,否则转入A7;
步骤A7 Point.x=Point.x+1,转入A3;
步骤A8判断Point.y是否等于L,如果等于L转入A14,否则转入A9;
步骤A9 Point.x=0,Point.y=Point.y+1,转入A3;
步骤A10判断Stack是否为空,如果为空转入步骤A13,否则转入步骤A11;
步骤A11将Stack中的栈顶元素Point弹出栈,计算rect[n]的各项数值
rect.left=min(rect.left,Point.x)rect.top=min(rect.top,Point.y)
rect.right=max(rect.right,Point.x)rect.bottom=max(rect.bottom,Point.y);
步骤A12查找Point存在的相邻八个像素点,Point{x-1,y-1,used,color},Point{x-1,y,used,color},Point{x,y,used,color},Point{x,y-1,used,color},Point{x-1,y+1,used,color},Point{x,y+1,used,color},Point{x+1,y,used,color},Point{x+1,y+1,used,color};如果其中的Point.color=1,则将Point压进栈Stack,转入A10;
步骤A13 n=n+1,转入A2;
步骤A14得到68个连通区域rect[n],如图4所示,记录连通区域数量N=n=68;
步骤A15计算结束。数值区域提取方法的流程如图5所示。
步骤B1矩形数据结构word{top,left,bottom,right,line}用于存储从连通区域中筛选出来的数值区域,则数组word[m]存储所有的数值区域,M为数值区域数量,设定阈值10,14,0.3;
步骤B2采用rect[n]的数值,计算w=(rect.right-rect.left)/576,h=(rect.bottom-rect.top)/768;
步骤B3判断w是否大于10,如果大于10转入步骤B16,否则转入B4;
步骤B4判断h是否大于14,如果大于14转入步骤B16,否则转入B5;
步骤B5连通区域中目标点总数Connect,连通区域中背景点总数Disconnect,初始化Connect=0,Disconnect=0;Point.x=rect.left,Point.y=rect.Top;
步骤B6判断Point.color是否等于1,如果等于1转入B7,否则转入B8;
步骤B7 Connect=Connect+1,转入B9;
步骤B8 Disconnect=Disconnect+1,转入B9;
步骤B9判断Point.x是否等于rect.right,如果等于rect.right转入B11,否则转入B10;
步骤B10 Point.x=Point.x+1,转入B3;
步骤B11判断Point.y是否等于rect.bottom,如果等于rect.bottom转入B13,否则转入B12;
步骤B12 Point.x=0,Point.y=Point.y+1,转入B3;
步骤B13计算cd=Connect/Disconnect;
步骤B14判断cd是否大于0.3,如果大于0.3转入步骤B16,否则转入B15;
步骤B15将rect[n]拷贝至word[m],word[m].top=rect[n].top,word[m].left=rect[n].left,word[m].bottom=rect[n].bottom,word[m].right=rect[n].right,word[m].line=-1;
步骤B16判断n是否小于68,如果小于68转入B2,否则转入B17;
步骤B17得到56个数值区域word[m],如图6所示;
步骤B18计算结束。
数值行划分方法的流程如图7所示。
步骤C1行集合Line,用于存储数值行中所有的数值区域,Line[l]为所有的行集合,l为行号,Line[l].length为l行集合的长度,templ为用于循环的临时行号,tempm为用于循环的临时字号,0≤l≤L,L为数值行总数,初始化l=0,templ=0,m=0,tempm=0,坐标差值阈值5;
步骤C2判断word[m].line是否等于-1,如果等于-1转入C3,否则转入C13;
步骤C3 templ=0;
步骤C4判断templ是否小于L,如果小于L,转入C5,否则转入C12;
步骤C5 tempm=0;
步骤C6判断tempm是否小于Line[templ].length,如果小于Line[templ].length,转入C7,否则转入C10;
步骤C7计算两个数值区域中心点垂直方向上的坐标差值CenterY,计算方法为CenterY=|(word[m].bottom-word[m].top)–(Line[templ].word[tempm].bottom-Line[templ].word[tempm].top)|;
步骤C8判断CenterY是否小于5,如果小于5,转入C9,否则转入C10;
步骤C9 word[m].line=l,将word[m]放入Line[l]行集合,转入C13;
步骤C10 tempm=tempm+1,转入C6;
步骤C11 templ=templ+1,转入C4;
步骤C12 l=l+1,word[m].line=l,将word[m]放入Line[l]行集合;
步骤C13 m=m+1;
步骤C14判断m是否小于56,如果小于56转入C2,否则转入C15;
步骤C15得到9个行集合Line[l],如图8所示;
步骤C16计算结束。
字符识别方法的流程如图9所示。
步骤D1采用机器学习方法构建字符特征库矩阵,这里采用基本神经网络分类方法;
步骤D2将特征库矩阵进行PCA转换,减小特征库矩阵存储空间;
步骤D3初始化l=0,m=0;
步骤D4判断l是否小于9,如果小于9,转入D5,否则转入D10;
步骤D5 m=0;
步骤D6判断m是否小于Line[l].length,如果小于Line[l].length,转入D7,否则转入D9;
步骤D7计算Line[l].word[m]与特征库矩阵距离,通过最小距离判断Line[l].word[m]的字符,计算距离的方式可以采用欧式距离;
步骤D8 m=m+1,转入D6;
步骤D9 l=l+1,转入D4;
步骤D10得到9行字符,如下
Gn-10
C7/M5
P4/E3
SRI II3
BPD 3.38cm
GA 16w3d
OFD 4.10cm
HC 11.89cm
GA 15w6d;
步骤D11计算结束。
超声报告自动生成方法的流程如图10所示。
步骤E1预先设定超声报告模版库,模版库由固定内容和自动读取内容组成,超声报告的所有自动读取内容为AutoRead[q],与AutoRead[q]对应的单词为Read[q],0≤q≤5,q为自动读取内容的编号,5为自动读取内容的总数;
步骤E2初始化q=0;
步骤E3判断q是否小于5,如果小于5,转入E4,否则转入E10;
步骤E4初始化l=0;
步骤E5判断l是否小于9,如果小于9,转入E6,否则转入E8;
步骤E6判断Line[l]中是否包含Read[q]的内容,如果包含,转入E7,否则转入E8;
步骤E7生成自动读取内容AutoRead[q],转入E9;
步骤E8 l=l+1,转入E4;
步骤E9 q=q+1,转入E3;
步骤E10将固定内容和自动读取内容拼凑,得到完整报告如下:
影像检查报告单
设备型号:GE
姓名:某某性别:女年龄:30申请科室:产科
住院号:00312231病床号:16申请医生:某某
诊断:
胎盘:附着于子宫后壁;
步骤E11计算结束。
实施例2:直肠超声图像的数值识别
由图11所示,采用Esaote超声设备,超声图像的长度为576,单位为像素点,宽度为768;将超声图像二值化处理,得到只有白色或黑色两种颜色的图像;
由图12所示,得到30个连通区域rect[n];
由图13所示,得到16个数值区域word[n];
由图14所示,得到2个行集合Line[l];
得到所有数值行的字符:
D1 4.61cm
D2 3.24cm
超声报告生成
影像检查报告单
设备型号:Esaote
姓名:某某性别:男年龄:48申请科室:普外科
住院号:00331931病床号:12申请医生:某某
诊断:
直肠:4.61×3.24cm,边界尚清晰,轮廓欠规则。
实施例3:前列腺超声图像的数值识别
由图15所示,采用GE超声设备,超声图像的长度为576,单位为像素点,宽度为768;将超声图像二值化处理,得到只有白色或黑色两种颜色的图像;
由图16所示,得到36个连通区域rect[n];
由图17所示,得到32个数值区域word[n];
由图18所示,得到6个行集合Line[l];
得到所有数值行的字符
Gn 0
C7 M5
P2 E3
SRI II3
1D 6.62cm
2D 5.71cm
超声报告生成
影像检查报告单
设备型号:GE
姓名:某某性别:男年龄:61申请科室:泌尿外科
住院号:00329982病床号:23申请医生:某某
诊断:
前列腺:大小5.71×6.62cm,边界尚清晰,轮廓欠规则,内部回声欠均匀、增粗,内见强回声伴声影,
CDFI:内血流信号未见明显异常。