注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

在路上...

点滴感悟,成长记录...

 
 
 

日志

 
 

【Practice】基于DCMTK开发包的DICOM格式图像生成  

2011-12-05 18:40:40|  分类: Practice |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

接着上次写的关于DCMTK使用的日志继续下去,经过这两天的折腾,终于可以把裸数据写入到DICOM格式的数据集(dataset)中并生成DICOM格式的图像,虽然还有一些其他诸如射线源、探测器、模体等的位置信息没有弄清如何加入,但是心里还是挺高兴的,毕竟取得了一个阶段性的进步。下面具体说说。

其实要往dataset里面写数据,关键是要弄明白往哪里写以及数据的格式问题。这两天一直在搞的像素信息的写入,其实就是把存放在某个存储区域的像素值添加到DCM_PixelData所标识的element中,也就是tag为(7FE0,0010)的区域。关键是如何添加呢?

首先要明确图像的大小,即rows和columns,然后把这两个信息分别加入到dataset中,然后根据它俩的大小相乘得出存放像素信息的数组(pixData)的大小(count),之后,需要从裸数据文件中一一读出像素信息,注意,在裸数据中,每个像素值都是用两个字节(16bit)进行存储的,也就是高八位和低八位的形式,把这两个字节的数据读入到一个含有两个元素的char型数组中(buffer),然后用一个short类型的指针变量(data)来获取buffer中所读到的数据,然后一一存入到pixData中,这样就得到了一个存放像素信息的完整数组pixData,最后,调用putAndInsertUint16Array,并把DCM_PixelData标识、pixData的首地址以及需要重复写入的次数count加到该函数的参数表中,这样就可以将原始裸数据写入到dataset中了,最后再把dataset保存到.dcm文件即可得到最终的DICOM格式图像。

下面是主要的代码:

   //Read data from raw data file
   fstream ifile("test.raw",ios::in | ios::binary);
   char *buffer = new char[2];
   unsigned short *data = (unsigned short*) buffer;

 

   if(!ifile)
   {
    cerr << "error: unable to open input file!" << endl;
    
   }
   //Each pixel data is 16-bits,stored in 2 bytes
   for (unsigned long i=0;i<count;i++)
   {
    if(!ifile.eof())
     ifile.read(buffer,2);
     pixData[i] = (*data);
     
   }

 **************************************************

   //A pointer points to the data array
   const void *pixel = pixData;
   //Insert the pixel data to the DICOM dataset
   dataset->putAndInsertUint16Array(DCM_PixelData,OFstatic_cast(Uint16 *, OFconst_cast(void *, pixel)),count);
  
   //Save the DICOM dataset to achieve a DICOM file
   OFCondition status = fileformat.saveFile("test.dcm",EXS_LittleEndianExplicit);

另外非常重要的是,还需要对像素信息设置位分配和位存储,也就是Bits Allocated(0028,0100)和Bits Stored(0028,0101)这两个elements的写入。具体可以看这里
下面是对所生成的图像进行正确性验证。可以使用Matlab也可以使用MeVisLab打开DICOM格式的图像。下图是用后者打开DICOM图像的结果:
【Practice】基于DCMTK开发包的DICOM格式图像生成 - 紫玄客 - 在路上...
 
  评论这张
 
阅读(1268)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017