VTK: 转化DICOM ST 数据为vtkPolyData显示

一、简介

        放疗的靶区等勾画数据通常会存储为DICOM-RT文件,该文件通常存储勾画点坐标数据。新的需要中DICOM-RT中存储了一个固定模版,需要进行3D打印,因此需要对其格式进行转化,以便进行三维渲染、编辑、保存和打印功能。

       处理流程:读取DICOM-RT文件中的坐标信息(设备),将坐标转化为图象坐标系下,根据每层坐标,构建闭合曲线,填充获得一张数据(和原始DICOM数据同大小,数据类型为unsigned char的vtkImageData),依次完成对所有层的操作,最后将三维数据转化为vtkPolyData。

二、坐标转化并生成vtkImageData,验证其正确性

        坐标转换:读取DICOM文件中的[ (0020,0032), DS, Image Position(Patient) ],对从小到大排序;读取DICOM-RT文件中的所有坐标信息,将其通过平移变换到图像空间。坐标变换到图象空间为: X Y Z

         将点坐标转化为闭合的掩码,此步骤采用opencv来完。

// pData 为指向某层图像的指针
cv::Mat dstMat(mDim[1], mDim[0], CV_8UC1, pData);
// 绘制轮廓
cv::drawContours(dstMat, smoothContours, 0, cv::Scalar(255, 255, 255), -1);

        将绘制的图像保存为jpg,以验证转化是否正确。

 

         验证正确后,将该掩码在DICOM数据上进行显示,结果如下,其中白色的区域为DICOM-RT点转为掩码后的区域。

 三、将掩码转化为vtkPolyData

        掩码转vtkPolyData

    // 提取表面
	vtkNew<vtkDiscreteMarchingCubes> discrete;
	discrete->SetInputData(maskData);
	discrete->GenerateValues(1, 255, 255);
	discrete->Update();

	// 平滑处理
	unsigned int smoothingIterations = 15;
	double passBand = 0.001;
	double featureAngle = 120.0;

	vtkNew<vtkWindowedSincPolyDataFilter> smoother;
	smoother->SetInputConnection(discrete->GetOutputPort());
	smoother->SetNumberOfIterations(smoothingIterations);  // 迭代次数
	smoother->BoundarySmoothingOff();
	smoother->FeatureEdgeSmoothingOff();
	smoother->SetFeatureAngle(featureAngle);
	smoother->SetPassBand(passBand);  // 值越小越光滑
	smoother->NonManifoldSmoothingOn();
	smoother->NormalizeCoordinatesOn();
	smoother->Update();

        转化完成后,进行三维渲染。

 四、总结

       DICOM-RT转化为vtkPolyData过程中,在生成掩码时,按照轴位图像进行掩码的生成,会导致一些错误,需要进一步的优化和完善转化过程。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值