发明内容
本发明提出一种使用图像分块技术在浏览器上快速显示医学图像的方法,以解决目前医学图像在浏览器加载缓慢的技术问题。
本发明采用如下技术方案实现:一种在浏览器上快速显示医学图像的方法,其包括步骤:
A、根据浏览器的显示区域在DICOM医学图像上的位置,将所述显示区域按照预设的分块长度分割成多个分块区域;
B、浏览器通过WADO协议,从服务端获取所述分块区域对应在DICOM医学图像上的每个分块图像的WADO请求参数,计算每个分块区域的URL;
C、服务端将DICOM医学图像分割成分别对应每个所述分块区域的多个分块图像;
D、浏览器为每个分块区域创建一个图像对象;
E、浏览器为每个分块区域的图像对象设置URL,并将所述图像对象的URL传递给服务端;
F、服务端根据每个分块图像的WADO请求参数,将每个分块区域对应的分块图像加载至浏览器,由浏览器显示所述DICOM医学图像。
其中,所述步骤B具体包括:
Web浏览器创建一个json数组cacheParam用来记录DICOM医学图像的属性;
Web浏览器创建一个″paenl″容器,用来装载多块分块区域;
通过WADO协议从服务端获取所述分块区域对应在DICOM医学图像上的每个分块图像的WADO请求参数,计算每个分块区域的URL。
其中,所述步骤C包括:根据cacheParam记录的医学图像相对于″paenl″容器左位移量cacheParam.left、上偏移量cacheParam.top显示区域的宽imageClientWidth、高imageClientHeight和分块长度imageSplitLen,服务端计算出DICOM医学图像的每个分块图像和分块数量。
其中,所述步骤D包括:
创建一个数组imageArr;
根据每个分块图像的WADO请求参数,为每个分块区域创建一个图像对象并将所述图像对象记录至数组imageArr。
其中,所述为每个分块区域的图像对象设置URL的步骤是将每个分块区域的WADO请求参数赋值给每个分块区域的图像对象的src属性。
其中,通过Ajax方式将图像对象的URL传递给服务端的PHP程序;
以PHP程序作为中转,开启WADO服务,并将参数传递给WADO服务。
其中,所述将分块图像加载至浏览器的步骤包括:
判断服务端的图像服务器中是否存在所述DICOM医学图像,若是,则将所述DICOM医学图像生成为一张JPG图片存放缓存中;
分别判断每个分块区域对应的分块图像是否还在所述DICOM医学图像中存在,若是,将该分块区域对应的分块图像拷贝到一个新的JPG图像文件中。
其中,所述断服务端的图像服务器中是否存在所述DICOM医学图像的步骤包括:
由WADO服务解析得到每个分块区域对应的分块图像的参数,由StudyUID、SeriesUID和SOPUID这三个参数通过Web服务器连接图像服务器,判断图像服务器中是否存在所述DICOM医学图像。
其中,所述由浏览器显示所述DICOM医学图像的步骤包括:
计算所述DICOM医学图像在浏览器的显示区域的位移量;
根据所述位移量在所述显示区域的每个分块区域显示对应的分块图像。
其中,WADO请求参数包含DICOM医学图像StudyUID、SeriesUID、ImageUID、窗位wndCenter、窗宽wndWidth、图像高度Rows、图像宽度Columns、是否反色reverse、分块显示区域SplitPos、分块长度SplitLen和请求类型ContentType。
与现有技术相比,本发明具有如下有益效果:
在浏览器与图像服务器之间的带宽无法大幅度提示的条件下,本发明通过对DICOM医学图像进行分块处理,只加载DICOM医学图像在显示区域的部分,而非显示区域部分不加载,从而减少了浏览器加载图像的数据数量,大大提高了医学图像的加载速度。本发明实现方法简单,且适用于各种Web浏览器。
具体实施方式
目前的Web+DICOM都是加载整幅医学图像来有浏览器显示,加载时间长。而本发明通过对DICOM医学图像进行分块处理,只加载医学影像在显示区域的部分,而非显示区域部分不加载,从而减少了浏览器加载图像的数据数量,大大提高了医学图像的加载速度。
如图1所示,为本发明处理医学图像分块并在Web上快速显示的原理框图中。其中,箭头线条表示的是处理流程。根据浏览器的显示区域在DICOM医学图像(以下简称为“医学图像”)上的位置,将所述显示区域按照预设的分块长度分割成N个分块区域,每个分块区域生成对应的URL,且为每个分块区域创建一个图像对象(或IMG对象),对该IMG对象进行URL设置操作(SetURL)后,通过Ajax方式将参数传送到服务端,其流程如图2所示。
后台通过PHP接收参数后并启用WADO服务。
$wadostr=$_SERVER[′QUERY_STRING′];
$wadostr=urldecode($wadostr);
$wado=new LWADO($wadostr);
WADO服务解析接收到的参数,通过Web服务器(Web Server)取出分块区域对应的分块图像并返回到WEB浏览器显示,图1中的双箭头为医学图像分块操作。图3是我们医学图像分块操作的流程图。
在图3所示的处理医学图像分块设计流程图中,通过WADO服务解析到请求图像的参数,由StudyUID、SeriesUID和SOPUID这三个参数通过Web Server去判断医学图像是否存在,如果不存在,则返回“Block”字符串。如果存在,按照参数中的窗宽窗位,图像的宽高和是否反色将该张DICOM图像生成为一张JPG图片存放在内存中。按照参数中的分块长度和分块区域的参数,计算出需要分块区域在医学图像中对应的分块图像是否还在医学图像中,如果不是,则返回“Block”字符串,如果是,则将该分块区域对应的分块图像拷贝到一个新的JPG图像文件中,并将该JPG文件返回并显示在Web浏览器中。
进一步,结合图1、图2和图3所示,下面以一个具体实例来详细描述本发明使用图像分块技术在浏览器上快速显示医学图像的过程。在本实例中,前端为Web浏览器(或简称浏览器),后端为具有Web服务器和PHP(超级文本预处理语言Hypertext Preprocessor的缩写)脚本程序的服务端,PHP脚本程序主要通过Web服务器转发由浏览器发送的请求参数生成相应的图像返回给浏览器。
由于PHP脚本无法处理二进制数据,我们开发了PHP扩展库,专门用于解析Dicom图像,并在PHP脚本程序中进行了封装。
具体来说,本发明包括如下实现步骤:
步骤1、由Web浏览器获取医学图像参数。
首先,Web浏览器创建一个json数组(json是一种简单的数据交换格式,它几乎可以很好的代替XML让服务器之间灵活的交换数据)cacheParam用来记录医学图像的属性。
然后,Web浏览器创建一个″paenl″容器,用来装载多块分块区域;然后通过WADO协议,计算每个分块区域的URL,请求参数包含请求的DICOM医学图像StudyUID、SeriesUID、ImageUID、窗位wndCenter、窗宽wndWidth、图像高度Rows、图像宽度Columns、是否反色reverse、分块显示区域SplitPos、分块长度SplitLen和请求类型ContentType。
定义变量url_prefix来记录访问地址不变的部分,假定服务端的PHP程序为dicomimage.php,根据WADO协议的要求,
url_prefix=″/dicomimage.php?RequestType=WADO&Studyuid=″+StudyUID+″&seriesuid=″+SeriesUID+″&imageuid=″+ImageUID
图像的窗宽、窗位、高度、宽度、是否反色的值是从医学图像在缩放、移动、改变窗宽窗位、反色等操作中记录在json数组cacheParam的值来赋值。
url_prefix=url_prefix+″&Columns=″cacheParam.width+″&Rows=″cachePara m.height+″&wndCenter=″cacheParam.wndWidth+″&wndWidth=″cacheParam.wn dCenter+″&reverse=″cacheParam.colorReverse
根据cacheParam记录的医学图像相对于″paenl″容器的左位移量cacheParam.left、上偏移量cacheParam.top、显示区域的宽imageClientWidth、显示区域的高imageClientHeight和分块长度imageSplitLen来计算出医学图像的分块图像和分块数量,代码如下
步骤2、根据分块区域的数量,Web浏览器分别创建每个分块区域的图像对象(image)。
创建一个数组imageArr用来记录图像对象var imageArray=new Array();
由于之前获取到每个分块图像的WADO请求参数,根据WADO请求参数创建图像对象并将图像对象记录在数组imageArr里,代码如下:
var x=document.createElement(′img′);
x.style.left=′0px′;
x.style.top=′0px′;
x.style.width=imageSplitLen+′px′;
x.style.height=imageSplitLen+′px′;
var t=new Array;
t.posX=i;
t.posY=j;
t.url=imageUrl;
t.imagedata=x;
imageArr[imageArr.length]=t;
在针对医学图像进行缩放、移动、反色等操作后去更新医学图像时,先根据i、j和imageUrl去数组imageArr遍历,如得到结果,返回保存的图像对象X。如没有,则重新创建。
步骤3、Web浏览器为每个分块区域的图像对象设置URL,并通过Ajax方式将图像对象的URL传递给PHP程序。
在HTML标准中,图像对象的src属性(其中,src属性规定了外部脚本文件的URL)为图像地址,通过指定src属性的值来加载相应图像,在步骤1中,我们获取到每个分块区域的WADO请求参数,在步骤2中,我们创建了每个分块区域的图像对象,将每个分块区域的WADO请求参数赋值给每个分块区域的图像对象的src属性,浏览器会自动根据src的值向图像服务器请求新图像x.setSrc(imageUrl)。
图像对象设置URL后,会通过Ajax方式将图像对象的URL传递给服务端的PHP程序,PHP程序作为中转,开启WADO服务,并将每个分块区域的WADO请求参数传递给WADO服务,由WADO服务解析得到每个分块区域对应的分块图像的参数,由StudyUID、SeriesUID和SOPUID这三个参数通过Web服务器连接图像服务器去判断医学图像是否存在:如果不存在,则返回“Block”字符串;如果存在,按照参数中的窗宽、窗位、图像的宽高和是否反色将该张DICOM医学图像生成为一张JPG图片存放在缓存中。
进一步,按照WADO请求参数中的分块长度和分块区域的参数,分别计算出每个分块区域在DICOM医学图像中对应的分块图像是否还在该DICOM医学图像中:如果不是,则返回“Block”字符串;如果是,则将该分块区域对应的分块图像拷贝到一个新的JPG图像文件中,得到的结果如图4所示,并将该JPG文件返回并显示在Web浏览器中。
步骤4、在浏览器中显示DICOM医学图像。
在步骤2和步骤3中,我们获得了所有加载成功的分块图像的图像对象,以整幅医学图像相对应″paenl″容器的位移cacheParam.left、cacheParam.top和图像对象的i,j值计算出图像对象相对应″paenl″容器的位移量,根据位移量在浏览器中显示医学图像。其中,通过下面公式设置位移量:
X.style.left=i*imageSplitLen+cacheParam.left+′px′;
X.style.top=j*imageSplitLen+cacheParam.top+′px′;
在一个具体实例中,如图5所示为加载显示的一幅医学图像的显示区域的示意图。
综上,在浏览器与图像服务器之间的带宽无法大幅度提示的条件下,本发明通过对DICOM医学图像进行分块处理,只加载DICOM医学图像在显示区域的部分,而非显示区域部分不加载,从而减少了浏览器加载图像的数据数量,大大提高了医学图像的加载速度。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。