VTK读取rawdata
生活随笔
收集整理的這篇文章主要介紹了
VTK读取rawdata
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
VTK 讀取本地rawdata數(shù)據(jù)
- 體渲染rawdata讀取
- IntPtr傳入rawData數(shù)據(jù)
最近項(xiàng)目中要求將設(shè)備采集的數(shù)據(jù)以三維的形式顯示出來(lái),經(jīng)過(guò)檢索發(fā)現(xiàn)VTK的體渲染能夠滿足項(xiàng)目需求。
現(xiàn)在先對(duì)設(shè)備采集的數(shù)據(jù)做一些描述:設(shè)備每幀采集320根線,每根線由1024個(gè)點(diǎn)組成,每個(gè)點(diǎn)保存為無(wú)符號(hào)字符型(unsigned char),每次采集320幀。也即每次采集320 x 1024 x 320 x sizeof(unsigned char)數(shù)據(jù)量的rawdata。
體渲染rawdata讀取
VTK 提供了很多的圖像讀取類(lèi)以讀取相應(yīng)的圖像格式(如 vtkPNGReader),經(jīng)過(guò)檢索,要讀取項(xiàng)目中的這種數(shù)據(jù)我用到了vtkImageReader,下面代碼展示了讀取方式(C#):
vtkImageReader reader = vtkImageReader.New();reader.SetFileName("rawdata_path.bin");reader.SetNumberOfScalarComponents(1);reader.SetDataScalarTypeToUnsignedChar();//將數(shù)據(jù)設(shè)定為unsigned char型 reader.SetFileDimensionality(3);//設(shè)置顯示圖像的維數(shù) reader.SetDataExtent(0, 319, 0, 1023, 0, 319);//圖片屬性圖片像素320*1024,最后兩參數(shù)表示有320張圖//故x方向索引為0~319,y:0~1023,z:0~319reader.SetDataSpacing(1, 0.5, 1); //設(shè)置x,y,z像素間間距,為了不讓生成的模型太長(zhǎng),把y方向做了壓縮reader.update();之后就可以將reader.GetOutputPort()加入到后續(xù)處理管線當(dāng)中。但此種方法在嘗試后發(fā)現(xiàn)即便調(diào)用reader.Dispose();釋放,程序仍然占有rawdata_path.bin文件,在后續(xù)程序其他位置繼續(xù)讀取該文件時(shí)就會(huì)導(dǎo)致讀取失敗。不知道是什么原因。。。
IntPtr傳入rawData數(shù)據(jù)
為了解決上面提到的文件占用問(wèn)題,我決定不直接調(diào)用VTK的vtkImageReader,改為先將數(shù)據(jù)讀到內(nèi)存中,再將數(shù)據(jù)傳給VTK,以下為相應(yīng)C#代碼( 其中:rawDataIntPtr 為上面rawdata_path.bin文件讀取到內(nèi)存的句柄,具體讀取方法略):
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() 加入到后續(xù)處理管線當(dāng)中。
總結(jié)
以上是生活随笔為你收集整理的VTK读取rawdata的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: kettle 下载
- 下一篇: ISO 37301:2021《合规管理体