VTK用VtkDICOMImageReader读取DCM文件绘制时图像的厚度(Z轴厚度)不对怎么办?

yhy5217 2008-12-03 11:25:47
我用vtkImageReader读取一系列DCM文件(例如35张连续DCM文件)。每张Dcm文件的厚度(Slice Thickness)都不一样,有的是3mm,有的是8mm。发现绘制出来的体数据的厚度是272,也就是34*8。而不是所有Dcm图像各自的厚度相加(正确的厚度应该是147)。我只读取第一张和最后一张Dcm文件,绘制出来的厚度就是正确的(147),但中间很多信息都是丢失的,体数据肯定不准确。
后来又加入部分其他的Dcm文件,发现厚度又变大了。经过一系列试验,发现,VtkDicomImageReader在处理一系列连续的Dcm文件时,是取倒数第二张的厚度作为所有Dcm文件的默认厚度,然后乘以总文件数减1,即上例中的34*8。这样的计算方法明显是不对的。现在问了,怎么才能让绘制出来的Volume的厚度(volume->GetMaxZBound())是正确的厚度(即所有Dcm文件各自厚度加起来)?

注:
我用体绘制,绘制出来的volume厚度是272,用面绘的actor的厚度也是272。所以觉得应该还是reader的问题,跟绘制方法没有关系。
...全文
1161 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhy5217 2008-12-04
  • 打赏
  • 举报
回复
我觉得体数据的厚度应该是最后一张DCM图片的Z轴坐标减去第一张图片的Z轴坐标,不知道你说的是不是这个意思。
VtkDicomImageReader似乎只能处理等间距的文件(个人感觉),那对于不等间距的呢?
实验的结果确实证明了VtkDicomImageReader是将所有文件都按同一厚度计算的。那如果想分厚度处理呢,该怎么办?
VtkDicomImageReader确实只能处理同一序列的Dcm文件,不同序列的会报错的。
qq_sugar 2008-12-03
  • 打赏
  • 举报
回复
1 你说的dcm文件的厚度是指前后两个dcm文件中z方向位置的差值?我认为体数据的厚度应该是第一张图像和最后一张图像,在Z方向的插值,而不是厚度的累加!

2 按照道理来说,在计算体数据的大小的时候,不是根据slice thickness,而是应该根据图像的z方向的大小来决定。

3 我认为VtkDICOMImageReader在读取文件的时候,是把所有输入文件当成等间距的,这样在读取大量数据的时候,只要读前两个图像就可以知道图像的层间距,那么也就很容易算出整个图像需要的层间距,如果图像层间距是不同的话,则要读取所有的文件头信息后才能决定大小,这样就会需要很多的时间,对吧?

4 你可以看看VtkDICOMImageReader的说明,看看它对输入文件的层间距有没有什么要求,是否要求是同一组序列?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧