Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2093454
  • 博文数量: 454
  • 博客积分: 10921
  • 博客等级: 上将
  • 技术积分: 5396
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-15 15:20
个人简介

伪IT男

文章分类

全部博文(454)

文章存档

2016年(2)

2013年(6)

2012年(17)

2011年(29)

2010年(24)

2009年(54)

2008年(53)

2007年(202)

2006年(67)

分类: C/C++

2007-04-28 17:53:21

   原来都是使用dcmtk来读dicom的文件.最近打算将一些dicom rt的信息写到dicom文件里.有些数据是嵌套的序列,就打算使用findOrCreateSequenceItem这个函数往里面写sequence的信息,看了看函数的参数也没什么,就直接往里面写了.原来自己写过一个创建dicom CT图象的代码,就直接往里面加了这几行:
  OFCondition result1;
  DcmItem *ditem1 =NULL;
  result1 = dataset1->findOrCreateSequenceItem(DCM_DoseReferenceSequence, ditem1);
  if (result1.good())
  {
       ditem1->putAndInsertString(DCM_DoseReferenceDescription,"12325252535");
       ditem1->putAndInsertString(DCM_DoseReferenceType,"12325252535");
  }
     写完之后想检验一下.手头有两个工具,一个是easydicom,打开view dicom information,已经能看到写进去的信息了,感觉应该是用对了;另一个是leadtools 的dicom demo,可以用节点树的方式查看dicom的信息,却怎么也找不到写的信息在哪里,连那个module也没有.就感觉很奇怪,肯定是哪里有问题.
     上网搜了一下,也没找到相关的信息.以前还写过一个读取dicom的嵌套数据的代码,拿过来读取了一下自己刚刚生成的文件,发现确实是写进去了.可是为什么leadtools却读不出来呢,不太对劲.
      在dcmtk里面搜索了一下,找到了一个使用findOrCreateSequenceItem的例句.
result = record->findOrCreateSequenceItem(DCM_IconImageSequence, ditem);
      直接加进去,生成一个文件,leadtools打开,立刻就能看到那个modual下面多出了一个节点.看来函数的时候是没有什么问题的.那问题到底出在哪里呢,奇怪了.
      是不是在这个语句之前还有什么语句相关呢.干脆采取了逐步排除的办法.把这个语句之前的都屏蔽掉,发现生成的文件里面光剩下这个干巴巴的节点了,moduale都不见了.看来确实是有控制moduale的语句,反过来再逐行增加.当增加到下面一行的时候.leadtools里面出现了那个moduale,和那个节点.
dataset1->putAndInsertString(DCM_SOPClassUID, UID_CTImageStorage);
      可是为什么没有我写的 general rt的moduale呢.仔细看了这一行,原来UID_CTImageStorage这个参数好像有点问题,应该是换成UID_RTPlanStorage.然后再试,ok!
      原因分析,leadtools是根据SOPClassUID来显示moduale和节点的.tags 的信息和SOPClassUID必须保持一致.我原来的代码是写CT图象的,这次没改,直接加了dicom rt的信息,leadtools还是按照ct 图象来分析的,当然也就不会显示rt plan的节点信息了,尽管已经写进所谓dicom文件了.
阅读(2666) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~