如何从iOS上的DICOM文件中提取像素数据?

ric*_*ick 2 iphone dicom ios

有谁知道如何从DICOM文件中提取像素数据并将其传递给iOS上的图像查看器?

很抱歉,如果这是一个简单的问题,但它似乎是我打开的大量蠕虫的主要组成部分.

Sea*_*yle 6

我在iOS上使用GDCM.我还没有非常努力地推动它,但到目前为止它仍然运作良好.在这篇关于ITK的优秀文章中,我基本上遵循了在iOS上运行XCode项目的指导.

以下是我为iOS编译的方法:

  1. 从sourceforge下载源,通过端口安装cmake.你需要一个最新版本的cmake(我使用的是2.8.2)
  2. 如果源位于名为gdcm-2.0.17 /的文件夹中,则在该级别创建另一个目录(例如gdcmbin),cd到该目录,然后在终端窗口中输入ccmake -GXCode ../gdcm-2.0.17/.这将创建XCode项目.当我这样做时,我没有创建任何示例程序或创建共享库(这在iOS中不起作用).只需运行默认值.
  3. 按照ITK文章中有关更改构建选项的说明进行操作(第4页上的步骤#7).
  4. 然后使用Clint Harris博客上的优秀说明将GDCM链接到您的项目中
  5. 当您在项目中将标题搜索路径设置为GDCM时 - 您必须输入两个路径:blah /gdcm-2.0.17/Source/**和blah/gdcmbin/**.第一个路径上的尾部'/ Source'是必需的 - 否则您将获得不适合您的体系结构的标头.
  6. 一个小故障(烦人但尚未花时间搞清楚):当你从模拟器切换到设备时,你会得到一堆链接错误(反之亦然).这是因为gdcm项目不会将输出放入不同目标的不同目录中.所以 - 在切换时在gdcm项目中运行清理和重建.我可能很快就会对此感到恼火,以改变它:-).

以下是您如何调用库并将结果放在Objective-C字典中的粗略摘要:

NSMutableDictionary * imageDictionary = [[NSMutableDictionary alloc] initWithCapacity:40];
// The output of gdcm::Reader is a gdcm::File
gdcm::File &file = reader.GetFile();

// the dataset is the the set of element we are interested in:
gdcm::DataSet &ds = file.GetDataSet();
const Tag studyInstance(0x0020,0x000d); // Study Instance UID
const DataElement &dicomVal = ds.GetDataElement(studyInstance);
std::string stringVal( dicomVal.GetByteValue()->GetPointer(), dicomVal.GetByteValue()->GetLength() );
NSString *val = [NSString stringWithCString:stringVal.c_str() encoding:[NSString defaultCStringEncoding]];
[imageDictionary setObject:val forKey:@"studyInstanceUID"];
Run Code Online (Sandbox Code Playgroud)

(注意:这是一个混合了C++和ObjectiveC的*.mm文件)