VTK读取rawdata

VTK 读取本地rawdata数据


最近项目中要求将设备采集的数据以三维的形式显示出来,经过检索发现VTK的体渲染能够满足项目需求。
现在先对设备采集的数据做一些描述:设备每帧采集320根线,每根线由1024个点组成,每个点保存为无符号字符型(unsigned char),每次采集320帧。也即每次采集320 x 1024 x 320 x sizeof(unsigned char)数据量的rawdata。

体渲染rawdata读取

VTK 提供了很多的图像读取类以读取相应的图像格式(如 vtkPNGReader),经过检索,要读取项目中的这种数据我用到了vtkImageReader,下面代码展示了读取方式(C#):

         vtkImageReader reader = vtkImageReader.New();
         reader.SetFileName("rawdata_path.bin");
         reader.SetNumberOfScalarComponents(1);
         reader.SetDataScalarTypeToUnsignedChar();//将数据设定为unsigned char型                
         reader.SetFileDimensionality(3);//设置显示图像的维数                
         reader.SetDataExtent(0, 319, 0, 1023, 0, 319);
         //图片属性图片像素320*1024,最后两参数表示有320张图
         //故x方向索引为0~319,y:0~1023,z:0~319
         reader.SetDataSpacing(1, 0.5, 1); 
         //设置x,y,z像素间间距,为了不让生成的模型太长,把y方向做了压缩
         reader.update();

之后就可以将reader.GetOutputPort()加入到后续处理管线当中。但此种方法在尝试后发现即便调用reader.Dispose();释放,程序仍然占有rawdata_path.bin文件,在后续程序其他位置继续读取该文件时就会导致读取失败。不知道是什么原因。。。

IntPtr传入rawData数据

为了解决上面提到的文件占用问题,我决定不直接调用VTK的vtkImageReader,改为先将数据读到内存中,再将数据传给VTK,以下为相应C#代码( 其中:rawDataIntPtr 为上面rawdata_path.bin文件读取到内存的句柄,具体读取方法略):

         vtkImageImport imageImport = vtkImageImport.New();
         imageImport.SetImportVoidPointer(rawDataIntPtr);
         imageImport.SetDataScalarTypeToUnsignedChar();
         imageImport.SetWholeExtent(0, 319, 0, 1023, 0, 319);
         imageImport.SetDataSpacing(1, 0.5, 1); 
         imageImport.SetDataExtentToWholeExtent();         
         imageImport.Update();

之后就可以将 imageImport.GetOutputPort() 加入到后续处理管线当中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值