总而言之,我正在使用像dicom文件的api这样的观众,称为基石,为此,我连接到dc4chee的WADO服务以获取dicom,dcm4chee运行端口8080,我的节点上的应用程序使用端口3000,所以我试图显示浏览器的dicom.
https://www.npmjs.com/package/cornerstone-wado-image-loader
这是浏览器显示的错误
XMLHttpRequest can not load http: // localhost: 8080 / wado? RequestType = WADO & studyUID = 1.2.840.113704.1.111.5 ... 26513.429 & contentType = application% 2Fdicom & transferSyntax = 1.2.840.10008.1.2. In 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http: // localhost: 3000' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)
在指定的文档中
请注意,Web服务器必须支持跨源资源共享,否则图像将无法加载.如果您无法在Web服务器上启用CORS,而您正在加载DICOM P10实例,则可以使用反向代理.这是一个基于http-proxy的简单Node.js,它添加了你可能觉得有用的CORS头文件.
并显示此示例代码,但我使用快递,此代码不起作用
Var http = require ('http'),
HttpProxy = require ('http-proxy');
Var proxy = httpProxy.createProxyServer ({target: 'http: // localhost: 8042'}) .listen (8000);
Proxy.on ('proxyRes', function (proxyReq, req, res, …Run Code Online (Sandbox Code Playgroud) 因此,如果我有一个图像(CT,MRI等)或甚至放射治疗的剂量,我可以通过以下方式将剂量或图像值拉出到阵列中:
import dicom
ds = dicom.read_file("dicom_file.dcm")
print ds.pixel_array
Run Code Online (Sandbox Code Playgroud)
这非常简单,让我能够按照自己的意愿操纵图像/剂量.但是,通常您还有一个结构文件,其中包含不同的轮廓结构,您可以在图像查看器中查看这些结构或类似的结构.再次,非常简单.
我的问题是我也希望这些单独的结构也是一个数组.如果我运行相同的代码我就会得到TypeError: No pixel data found in this dataset.
我猜测结构DICOM文件不像剂量/图像DICOM文件那样"制作".
那么有一个我无法找到的解决方案吗?我也看了一下这个dicompyler_core软件包,但从我看到的情况来看,没有任何办法可以"只是"将不同的结构输出到数组中.
这是一个非常狭隘和具体的问题,但我知道有其他人在那里使用这个,所以我会保持我的手指交叉,希望你们中的任何人都可以提出这个问题.
我正在开发一个WPF应用程序,其中一部分是Dicom查看器.我们想使用第三方组件来处理Dicom的东西,ClearCanvas是我们迄今为止最好的印象.我们能够加载Dicom文件并获取属性,但是我们在将图像数据放在Image控件的Source属性上以显示它时遇到问题.任何有关如何实现这一目标的提示?
这是我用于提取图像数据的代码:
var file = new DicomFile(dicomFilePath);
var patientName = file.DataSet.GetAttribute(DicomTags.PatientsName);
var imageData = file.DataSet.GetAttribute(DicomTags.PixelData);
Run Code Online (Sandbox Code Playgroud)
也尝试过使用ImageViewer库,但它仍然是相同的数据..
var localSopDataSource = new LocalSopDataSource(new DicomFile(dicomFilePath));
var patientName = localSopDataSource.File.DataSet.GetAttribute(DicomTags.PatientsName);
var imageData = localSopDataSource.File.DataSet.GetAttribute(DicomTags.PixelData);
Run Code Online (Sandbox Code Playgroud) 我有一些与DCMTK有关的代码.如果我从命令行使用g ++,我可以成功构建并运行它.这是代码:
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"
int main()
{
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile("test.dcm");
if (status.good())
{
OFString patientsName;
if (fileformat.getDataset()->findAndGetOFString(DCM_PatientsName, patientsName).good())
{
cout << "Patient's Name: " << patientsName << endl;
} else
cerr << "Error: cannot access Patient's Name!" << endl;
} else
cerr << "Error: cannot read DICOM file (" << status.text() << ")" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是构建命令:
g++ testeapp.cxx -DHAVE_CONFIG_H -I/path_to_dcmtk/include -L/path_to_dcmtk/lib -pthread -ldcmdata -lz -loflog -lofstd -o main
Run Code Online (Sandbox Code Playgroud)
我想制作一个CMakeLists.txt来在Kdevelop中构建它.这就是我目前拥有的:
# Configure toplevel …Run Code Online (Sandbox Code Playgroud) 这种传输语法中的数据是如何组织的?标准说明:
此传输语法适用于整个DICOM数据集的编码.首先根据第A.2节中规定的规则对整个数据集进行编码.然后使用Internet RFC 1951中定义的"Deflate"算法压缩整个字节流.
最初我认为这意味着整个DICOM文件本身都是gzip压缩.但是如果整个文件被gzip压缩,包括包含识别传输语法的头,那么解析器/查看器如何能够读取传输语法以知道它被gzip压缩?
从给定这种类型文件的查看器的角度来看,它如何知道这种传输语法?寻找GZIP标题?
是否有使用此传输语法的公开示例图像?
我有 csv 格式的原始心电图电压样本,例如:
time voltage (mV)
0.000 9.169110459
0.001 9.144672532
0.002 9.144672532
0.003 9.169110459
0.004 9.169110459
0.005 9.169110459
0.006 9.169110459
0.007 9.144672532
0.008 9.217986315
0.009 9.169110459
0.01 9.169110459
0.011 9.169110459
0.012 9.169110459
0.013 9.144672532
0.014 9.144672532
0.015 9.169110459
0.016 9.169110459
0.017 9.169110459
0.018 9.169110459
0.019 9.169110459
0.02 9.169110459
0.021 9.169110459
0.022 9.144672532
0.023 9.169110459
Run Code Online (Sandbox Code Playgroud)
并希望将其转换为 DICOM 文件,以便我可以在心电图查看器中查看它,例如 C# 的 ECG 工具包: https: //sourceforge.net/projects/ecgtoolkit-cs/
我将如何进行此转换?我已经进行了一些谷歌搜索,但没有找到能够从原始数据写入 dicom 文件的工具。
编辑:
我最终选择了 SCP 文件,因为这更容易。我最终使用上面的库创建了一个 scp 文件。代码如下:
using System;
using System.Linq;
using ECGConversion;
using ECGConversion.ECGDemographics; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 freesurfer 的实用程序将大量 DTI siemens DICOM 转换为 NifTi,dcm2nii但在某些文件上失败,因为它们缺少生成和文件DiffusionGradientDirection tag (0x19,0x100E)所必需的。这并不是说标签没有值,而是它们似乎根本不存在。.bvec.bval
ds[0x19,0x100E] 回溯(最近一次调用):文件“”,第 1 行,文件“/space/jazz/1/users/gwarner/anaconda/lib/python2.7/site-packages/pydicom-0.9 .9-py2.7.egg/dicom/dataset.py”,第 277 行,在getitem data_elem = dict 中。getitem (self, tag) KeyError: (0019, 100e)
我尝试添加它,但出现以下错误:
ds[0x19,0x100E].value = 'yes' 回溯(最近一次调用):文件“”,第 1 行,文件“/space/jazz/1/users/gwarner/anaconda/lib/python2.7/site -packages/pydicom-0.9.9-py2.7.egg/dicom/dataset.py”,第 277 行,在getitem data_elem = dict 中。getitem (self, tag) KeyError: (0019, 100e)
有没有办法可以手动插入这个标签?
该应用程序尝试在患者级别进行CFind,获取研究,进行研究,获取系列,最后得到图像。
该代码在查询两个不同的PACS实现时有效,但在研究级别的第三个失败。
发出患者请求的代码部分
var request = DicomCFindRequest.CreatePatientQuery(patientId: _patientid, patientName: _patientname);
var client = new DicomClient();
client.AddRequest(request);
await client.SendAsync(destip, port, useTLS, callingAE, calledAE);
Run Code Online (Sandbox Code Playgroud)
对于学习水平
request = DicomCFindRequest.CreateStudyQuery(patientId: _patientid);
Run Code Online (Sandbox Code Playgroud)
通过检查日志并比较工具中的日志,似乎应该有一个抽象语法列表,而不仅仅是一个?还是什么问题?
var request = DicomCFindRequest.CreatePatientQuery(patientId: _patientid, patientName: _patientname);
var client = new DicomClient();
client.AddRequest(request);
await client.SendAsync(destip, port, useTLS, callingAE, calledAE);
Run Code Online (Sandbox Code Playgroud)
来自jdicom的日志,该日志可以在学习级别执行cfind请求
request = DicomCFindRequest.CreateStudyQuery(patientId: _patientid);
Run Code Online (Sandbox Code Playgroud)
编辑,
这是一致性声明。
https://sectramedical.blob.core.windows.net/uploads/2018/04/pacs-dicom-conformance-statement-20.1.pdf
但是,如果不支持CFind,将使用哪种方法检索研究和序列?我在这里迷路了,但我非常感谢您抽出宝贵的时间来提示。
这是其他工具的日志(由于帖子的最大长度而被截断了),该工具设法列出了患者和研究内容,并且一些屏幕截图显示了可能的结果。Radiant还提供了一个屏幕截图,该屏幕截图也可以连接,显示患者并显示图像。
PatientRootLog
# 14 1 PatientID
(0020,000d) UI [1.3.6.1.4.1.30071.8.345050320220.6024574499476158]# 50 1 StudyInstanceUID
(0020,000e) UI [] # 0 0 SeriesInstanceUID
(0020,0011) IS [] # 0 …Run Code Online (Sandbox Code Playgroud) 关于 comp.protocols.dicom google group 的其他讨论。
具体例子:
鉴于实例 UID 是从 UUID 派生的,如PS3.5 B.2 中所述。
例如,给定以下 DICOM 实例 UID:
2.25.329800735698586629295641978511506172918
Run Code Online (Sandbox Code Playgroud)
通过添加附加组件是否标准符合该 UID 的后缀?
2.25.329800735698586629295641978511506172918.1,
2.25.329800735698586629295641978511506172918.2,
...
Run Code Online (Sandbox Code Playgroud)
忧虑:
通过阅读标准,我以某种方式得到的印象是,DICOM 标准仅将这种形式的 UID 定义为有效,前提是它仅包含2.25有效 UUID的前缀和十进制表示——仅此而已:
ISO/IEC 9834-8 / ITU-T X.667定义了一种可以从根“2.25”构建 UID 的方法。后跟通用唯一标识符 (UUID) 的十进制表示。该十进制表示将 128 位 UUID 视为整数,因此可能长达 39 位(必须抑制前导零)。
它没有明确说明是否可以有后缀。
它的最大长度为 5 + 39 个字符,因此在 UID 的 64 个字符限制之前仍有一些空间。
PS3.5 9.1 的所有规则是否仍然适用于具有固定根的PS3.5 B.2的 UID 定义?还是PS3.5 B.2是一个独立的定义?
有关 UUID 派生 …