目录
引言:
今天朋友给了一份数据是OCT 采集到的数据, VTK 格式,但是我打不开;
用文本打开看了一下;
vtk DataFile Version 2.0
BINARY
DATASET STRUCTURED_POINTS
DIMENSIONS 512 512 512
SPACING 0.0035 0.00791947 0.010472
ORIGIN 0 0 0
POINT_DATA 134217728
SCALARS volume_scalars float 1
LOOKUP_TABLE default
搜索了一下,是结构化点集数据;
vtkStructuredPoints
vtkStructuredPoints类继承自vtkImageData,是图像数据的一种,要求数据范围与更新范围完全匹配。矢量图数据允许数据范围大于更新范围。StructuredPoints类对原点的定义也与vtkImageData不同。对于结构化点(structured points),原点是第一个点的位置。而图像将原点定义为点(0,0,0)的位置。图像原点存储在ivar中,结构化点具有Set/GetOrigin/Extents的特殊方法。
可以拿 它当 vtkImageData用;
Reader
vtkStructuredPointsReader
读取,转polydata
auto reader = vtkSmartPointer<vtkStructuredPointsReader>::New();
reader->SetFileName(pathTwo.toStdString().c_str());
reader->Update();
显示:
#include <vtkStructuredPointsReader.h>
#include <vtkStructuredPoints.h>
// init imageview
mImageView = vtkSmartPointer<vtkImageViewer2>::New();
auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
mImageView->SetRenderWindow(mVTKWidget->GetRenderWindow());
mImageView->SetupInteractor(interactor);
mImageView->SetInputData(reader->GetOutput());
mImageView->SetColorLevel(100);
mImageView->SetColorWindow(200);
mImageView->SetSliceOrientationToYZ();
mImageView->GetRenderer()->SetBackground(0, 0, 0);
mImageView->SetSlice((mImageView->GetSliceMin() + mImageView->GetSliceMax()) / 2);
mImageView->Render();
转vtkPolydata 显示;
vtkSmartPointer<vtkImageDataGeometryFilter> geometryFilter =
vtkSmartPointer<vtkImageDataGeometryFilter>::New();
geometryFilter->SetInputConnection(reader->GetOutputPort());
geometryFilter->Update();
or
vtkSmartPointer< vtkMarchingCubes > boneExtractor =
vtkSmartPointer< vtkMarchingCubes >::New();
boneExtractor->SetInputData(mImageOne);
boneExtractor->SetValue(0, 30);
//boneExtractor->SetNumberOfContours(1);
boneExtractor->Update();
//mVtkPolyData->DeepCopy(connectivityFilter->GetOutput());
//剔除旧的或废除的数据单元,提高绘制速度(可略去这一步)
vtkSmartPointer< vtkStripper > boneStripper =
vtkSmartPointer< vtkStripper >::New(); //三角带连接
boneStripper->SetInputConnection(boneExtractor->GetOutputPort());
boneStripper->Update();
mVtkPolyData->DeepCopy(boneStripper->GetOutput());
mPolyMapper->SetInputData(mVtkPolyData);
mPolyMapper->ScalarVisibilityOff();
mPolyMapper->Update();
m3DRenderer->ResetCamera();
m3DRenderer->ResetCameraClippingRange();
m3DRenderer->ResetCamera();
m3DRenderer->Render();