可以关注技术大牛博客https://blog.csdn.net/zssureqh
WADO-URI
accept:请求中的accept表明客户端(通常是浏览器)自身能够支持的从服务器返回的数据类型,例如上图中支持image/webp,image/,/*;q=0.8表示图片的质量
accept-encoding:表示客户端(通常是浏览器)支持的编码格式,通常用于压缩和解压缩
accept-language:表示客户端(通常是浏览器)支持的字符集,通常跟乱码有关。
因为DICOM文件有多种类型,主要有Single frame(简单的可以理解为一个DICOM文件内部只有一个图片)、Multi frame(一个DICOM文件有多个图片)。每种类型在WADO-URI的Response返回结果中有所体现,大致如下:
类型 | 内容 | 备注 |
---|---|---|
single frame | application/dicom image/jpeg | 还可以支持image/gif,image/png,image/jp2 |
multi frame | application/dicom video/mpeg image/gif | |
text文本信息 | application/dicom text/plain text/html | 还可以支持text/xml,application/pdf,text/rtf |
请求中唯一与DICOM有关的是GET请求的参数
WADO-URI的query参数主要有以下几类:
参数 | 含义 | 示例 |
---|---|---|
Request type | 请求的类型,即WADO | requestType=WADO |
Unique identifier of the Study | 检查的UID | studyUID=xxxx |
Unique identifier of the Series | 序列的UID | seriesUID=xxx |
Unique identifier of the Object | 对象(文件)UID,可以叫做SOP、instance等 | objectUID=xxx |
MIME type of response | 返回数据的类型 | 该参数可选,contentType=application/dicom |
Charset of the response | 字符集类型 | 该参数可选,charset=xxx |
Anonymize object | 数据匿名化 | 该参数可选anonymize=yes |
针对于DICOM Image图像有如下可选参数
参数 | 含义 | 示例 |
---|---|---|
Annotation on the object | 注释标记 | annotation= |
Number of pixel rows | 图像的行数 | rows=64,当contentType=application/dicom时不存在 |
Number of pixel columns | 图像的列数 | columns=64,当contentType=application/dicom时不存在 |
Region of the image | 图像区域,期左上角像素点的x/y坐标和右下角像素点的x/y坐标,范围是0.0-1.0 | region=0.0,0.0,1.0,1.0,当contentType=application/dicom时不存在 |
Window center of the image | 窗位,类型是Decimal String,即DS | windowCenter=xxx,,当contentType=application/dicom时不存在 |
Window width of the image | 窗宽,类型是Decimal String,即DS | windowWidth=xxx,,当contentType=application/dicom时不存在 |
Frame number | 图像帧位置 | frameNumber=1,当对应的对象时Multi-frame时有效,另外当contentType=application/dicom时不需要存在 |
Image Quality | 图像质量 | imageQuality=xxx,档contentType=application/dicom时不需要存在,但是如果同时给出了一个压缩语义transferSyntax参数时需要设定ImageQuality。例如如果返回值为image/jpeg类型,那么imageQuality可以设置1-100来表示图像质量 |
Transfer Syntax UID | 传输语义,用于表示返回的DIOCM数据的字节顺序和编码方式 | transferSyntax=1.2.840.10008.1.2.1,默认是Explicit VR Little Endian(即1.2.840.10008.1.2.1)。 |
下面直接给出几个具体示例:
功能 | 链接 | 备注 |
---|---|---|
请求一个DICOM图像,并进行匿名化处理 | http://www.linkingmed.com?requestType=WADO&studyUID=1.2.250.1.59.40211.12345678.678910 &seriesUID=1.2.250.1.59.40211.789001276.14556172.67789 &objectUID=1.2.250.1.59.40211.2678810.87991027.899772.2 &contentType=application%2Fdicom &anonymize=yes &transferSyntax=1.2.840.10008.1.2.4.50 | |
请求一个简单的DICOM图像,并要求转换成JPEG格式 | http://www.linkingmed.com?requestType=WADO&studyUID=1.2.250.1.59.40211.12345678.678910 &seriesUID=1.2.250.1.59.40211.789001276.14556172.67789 &objectUID=1.2.250.1.59.40211.2678810.87991027.899772.2 | |
请求一个DICOM SR报告,要求以HTML格式返回 | http://www.linkingmed.com?requestType=WADO&studyUID=1.2.250.1.59.40211.12345678.678910 &seriesUID=1.2.250.1.59.40211.789001276.14556172.67789 &objectUID=1.2.250.1.59.40211.2678810.87991027.899772.2 &charset=UTF-8 | |
https://www.linkingmed.com?requestType=WADO&studyUID=1.2.250.1.59.40211.12345678.678910 &seriesUID=1.2.250.1.59.40211.789001276.14556172.67789 &objectUID=1.2.250.1.59.40211.2678810.87991027.899772.2 &contentType=image%2Fjp2;level=1,image%2Fjpeg;q=0.5 &annotation=patient,technique &columns=400 &rows=300 ®ion=0.3,0.4,0.5,0.5 &windowCenter=-1000 &windowWidth=2500 | 这个请求链接几乎包含了上述提到的所有关于DICOM Image的操作参数 |
WADO-RS
WADO-RS支持的操作有:
- RetrieveStudy
- RetrieveSeries
- RetrieveInstance
- RetrieveFrames
- RetrieveBulkdata
- RetrieveMetadata
上述操作的实现的功能可以直接从名称中看出来这里就不详细介绍了。由于WADO-RS是基于HTTP的GET来实现DICOM的交互的,因此需要将上述操作的结果封装到HTTP的Response中返回。对应的关系图如下所示:
WADO-RS各个操作的格式:
WADO-RS Action | 参数 | 示例 |
---|---|---|
RetrieveStudy Request | Resource: {SERIVE}/studies/{StudyInstanceUID} Method:GET Headers:Accept:multipart/related;type=”application/dicom”或者type=”application/octet-stream”或者type=”{media-type}” | Accept: multipart/related; type=”image/jpx”; transfer-syntax=1.2.840.10008.1.2.4.92,, multipart/related; type=”image/jpx”; transfer-syntax=1.2.840.10008.1.2.4.93, multipart/related; type=”image/jpeg” |
RetrieveStudy Response | Content-type:multipart/related;type=application/dicom;boundary={MessageBodunary} | |
RestireveSeries Request | Resource:{SERVICE}/studies/{StudyInstanceUID}/series/{SeriesInstanceUID} Method:GET Headers:Accept:multipart/related;type=”application/dicom”;或者type=”application/octet-stream”或者type=”{media-type}” | |
RetrieveSeries Response | Content-type:multipart/related;type=”application/octet-stream”;boundary={MessageBodunary} | |
RetrieveInstance Request | Resource:{SERVICE}/studies/{StudyInstanceUID}/series/{SeriesInstanceUID}/instances/{SOPInstanceUID} Method:GET Headers:Accept:multipart/related;type=”application/dicom”或者type=”application/octet-stream”或者type=”media-type” | |
RetrieveInstance Response | Content-Type:multipart/related; type=”application/dicom”; boundary={MessageBoundary} | |
RetrieveFrames Request | Resource:{SERVICE}/studies/{StudyInstanceUID}/series/{SeriesInstanceUID}/instances/{SOPInstanceUID}/frames/{FrameList} Method:GET Headers:Accept:multipart/related; type=”application/octet-stream”或者type=”{media-type}” | {FrameList}需要用逗号或者%2C隔离开,例如/frames/1,2,4,3 |
RetrieveFrames Response | Content-Type:multipart/related; type=”application/octet-stream”; boundary={MessageBoundary} [dcm-parameters] | |
RetrieveBulkdata Request | Resource:{BulkDataURI} Method:GET Headers:Accept:multipart/related; type=”application/octet-stream” [dcm-parameters]或者multipart/related; type=”{media-type}” [dcm-parameters] | |
RetrieveBulkdata Response | Content-Type:multipart/related; type=”application/octet-stream”; boundary={MessageBoundary} [dcm-parameters] | |
RetrieveMetadata | Resources:{SERVICE}/studies/{StudyInstanceUID}/metadata或者 {SERVICE}/studies/{StudyInstanceUID}/series/{SeriesInstanceUID}/metadata或者{SERVICE}/studies/{StudyInstanceUID}/series/{SeriesInstanceUID}/instances/{SOPInstanceUID}/metadata Method:GET Headers:Accept:multipart/related; type=”application/dicom+xml”或者application/dicom+json | |
RetrieveMetadata | Content-Type:multipart/related; type=”application/dicom+xml” [dcm-parameters]或者application/dicom+json [dcm-parameters] |
最后看一下WADO-RS Retrieve Rendered Transaction,用于实现DICOM数据到图像格式的转换。请求的格式如下:
针对各个级别的请求如下:
对于DICOM图像格式转换,最重要的是请求中的{?parameter*}参数,参数详细配置如下:
上述参数主要用于配置图像的区域和截取的窗宽窗位,与WADO-URI中的URL中的参数发挥的作用一致。具体的转换格式在“1#rendered-media-type”中给出,这个参数类似于WADO-URI中的&contentType=image%2Fjp2。
由此可以看出WADO-RS与WADO-URI的实现方式是类似的,除了在获取基础对象(Study、Series、Instance)时刻的方式不同(WADO-URI时基于&拼接完成的URL字符串,而WADO-RS是利用的REST实现框架),参数的传递方式是一样的。通过在资源定位URI后的{?parameter*}参数来实现转换操作。或者说WADO-RS仅仅是将WADO-URI放在基础URI后面{?parameter*}参数中的三级UID(studyUID、seriesUID、objectUID)挪到了URI中,仅仅在{?parameter*}中传递转换操作的相关参数。
3.总结
由最初的WADO-URI,到WADO-WS,再到WADO-RS,实现框架越来越简捷清晰,开发工作越来越方便。虽然上文介绍了诸多繁琐的标准和条款,但是其本质是一样的,最终都需要落实到DICOM的解析、DICOM的格式转换、DICOM的存储上来。这也是DICOM标准委员会制定标准的初衷,只规定与医疗服务相关的协议和标准,对于具体的实现路径不做强制约束。