我按如下方式读取多帧dicom并获取字节数组中图像的总像素数据.
gdcm.ImageReader _reader = new gdcm.ImageReader();
_reader.SetFileName("FileName");
_reader.Read();
byte[] byteArray= new byte[_reader.GetImage().GetBufferLength()];
_reader.GetImage().GetBuffer(byteArray);
Run Code Online (Sandbox Code Playgroud)
但是对于具有超过300帧的多帧,它会给出内存不足的异常.所以我想一次提取一个字节数组中的单帧像素数据.任何的想法??
我正在尝试使用gdcm的CompositeNetworkFunctions从服务器获取DICOMS 。我的测试服务器是使用“ Orthanc”设置的。
当我运行Move请求时,我得到:
terminate called after throwing an instance of 'gdcm::Exception'
Run Code Online (Sandbox Code Playgroud)
what():/home/myname/Builds/GDCM/Source/Source/Common/gdcmException.h:74():
当我捕获到该异常时,我发现它是“未处理的异常”,没有更多信息。因此,我没有抓住它,而是使用gdb运行该程序。这是我得到的:
0x00007ffff3e4dcc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 0x00007ffff3e4dcc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1 0x00007ffff3e510d8 in __GI_abort () at abort.c:89
#2 0x00007ffff44526b5 in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3 0x00007ffff4450836 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007ffff4450863 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5 0x00007ffff4450aa2 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x0000000000781772 in std::istream& gdcm::DataSet::ReadWithLength<gdcm::ExplicitDataElement, gdcm::SwapperNoOp>(std::istream&, gdcm::VL&) …Run Code Online (Sandbox Code Playgroud) 我想显示具有光度解释MONOCHROME2的DICOM文件.
一些图像规格是 -
Rows: 1024
Columns: 1024
No of Frames: 622
Bits Allocated: 16
Bits Stored: 10
High Bit: 9
Pixel Representation: 0
Sample per pixel: 1
Run Code Online (Sandbox Code Playgroud)
我gdcmRegionReader用以下面的方式提取单帧字节数组.
gdcm.ImageRegionReader _regionReader = new gdcm.ImageRegionReader();
_regionReader.SetRegion(_boxRegion); // _boxRegion is some region
_regionReader.ReadIntoBuffer(Result, (uint)Result.Length);
Marshal.Copy(Result.ToArray(), 0, _imageData.GetScalarPointer(),
Result.ToArray().Length);
_viewer.SetInput(_imageData); // _viewer = vtkImageViewer
Run Code Online (Sandbox Code Playgroud)
那么有人可以帮助我如何加载和显示MONOCHROME2 dicom图像.
我正在使用pydicom,我的代码非常简单:
image = np.stack([s.pixel_array for s in scans])
Run Code Online (Sandbox Code Playgroud)
但这会产生运行时错误:
RuntimeError: The following handlers are available to decode the pixel data however they are missing required dependencies: GDCM (req. GDCM), Pillow (req. Pillow)
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做。任何帮助都会有帮助。
我目前正在GDCM使用MacOSX默认编译器构建项目:clang.此编译器在其自己的标头中触发警告(请参阅参考资料):
In file included from /Users/builder/external/GDCM/Source/MediaStorageAndFileFormat/gdcmJPEG12Codec.cxx:21:
/Users/builder/external/GDCM/Source/MediaStorageAndFileFormat/gdcmJPEGBITSCodec.cxx:336:9: warning: disabled expansion of recursive macro [-Wdisabled-macro-expansion]
if (setjmp(jerr.setjmp_buffer))
^
/Users/builder/llvm/llvm-rel-install/bin/../include/c++/v1/setjmp.h:40:21: note: expanded from macro 'setjmp'
#define setjmp(env) setjmp(env)
^
In file included from /Users/builder/external/GDCM/Source/MediaStorageAndFileFormat/gdcmJPEG12Codec.cxx:21:
/Users/builder/external/GDCM/Source/MediaStorageAndFileFormat/gdcmJPEGBITSCodec.cxx:724:9: warning: disabled expansion of recursive macro [-Wdisabled-macro-expansion]
if (setjmp(jerr.setjmp_buffer))
^
/Users/builder/llvm/llvm-rel-install/bin/../include/c++/v1/setjmp.h:40:21: note: expanded from macro 'setjmp'
#define setjmp(env) setjmp(env)
^
2 warnings generated.
Run Code Online (Sandbox Code Playgroud)
这可能是llvm标题中的一个明显错误(我很难相信),或者我错过了关于使用setjmpin的一些内容C++98.
我在 Windows 10 64 位平台上使用 Grassroot Dicom 查看器版本 2.8.9 编译成 Emscripten 库 bc。
我按照本网站的说明进行操作
emconfigure cmake .
emmake make VERBOSE=1
Run Code Online (Sandbox Code Playgroud)
之后,我得到了以 .a 而不是 .bc 结尾的库文件,类似于
libgdcmcharls.a libgdcmCommon.a libgdcmDICT.a ....
当我查看它开头的每个静态库文件的汇编代码时
!拱。/
代替
公元前
如教程网站中所述注意
使用上述过程,某些构建系统可能无法正确发出位代码,您可能会看到无效的位代码警告。您可以运行 file 来检查文件是否包含位码(您也可以手动检查内容是否以 BC 开头)。还值得运行 emmake make VERBOSE=1 这将打印出它运行的命令 - 您应该看到正在使用 emcc,而不是本机系统编译器。如果不使用 emcc,您可能需要修改 configure 或 cmake 脚本。
我认为这是我无法生成内容以 BC 开头的库的问题,但我得到了!拱 ./ ?
当然这些文件不能从 emcc 链接(找不到参考错误)
error: undefined symbol: _ZN4gdcm11ImageReader8GetImageEv
error: undefined symbol: _ZN4gdcm11ImageReaderC1Ev
error: undefined symbol: _ZN4gdcm11ImageReaderD1Ev
error: undefined symbol: _ZN4gdcm5Trace14GetErrorStreamE
Run Code Online (Sandbox Code Playgroud)
所以我根据 …