//测试
#include <vtkSmartPointer.h>
#include <vtkImageData.h>
#include <vtkMetaImageReader.h>
#include <vtkMatrix4x4.h> //
#include <vtkImageReslice.h>
#include <vtkLookupTable.h>
#include <vtkImageMapToColors.h>
#include <vtkImageActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>
int main(int argc, char *argv[])
{
//vtkSmartPointer<vtkDICOMImageReader> reader = vtkSmartPointer<vtkDICOMImageReader>::New(); //创建读取dicom图片指针对象
//reader->SetDirectoryName("D:/workSpace/DICM/sunguihua/SGH"); //设置医学图像文件夹路径
//reader->SetDataByteOrderToLittleEndian();
//reader->Update();
//cout << "读取数据完成" << endl;
vtkNew<vtkMetaImageReader> reader;
reader->SetFileName("C:\\Users\\lijian\\AppData\\Local\\UEG\\Navigation\\Data\\1509717-15419-1-0\\data.mhd");
reader->Update();
int extent[6];
double spacing[3];
double origin[3];
reader->GetOutput()->GetExtent(extent);
reader->GetOutput()->GetSpacing(spacing);
reader->GetOutput()->GetOrigin(origin);
//获取图像信息
std::cout << "extent:" << extent[0] << " " << extent[1] << " " << extent[2] << " "<< extent[3] << " " << extent[4] << " " << extent[5] << std::endl;
int dims[3];
reader->GetOutput()->GetDimensions(dims);
std::cout << "dims" << dims[0] << "*" << dims[1] << "*" << dims[2] << std::endl;
reader->GetOutput()->GetOrigin(origin);
std::cout << "origin" << origin[0] << " " << origin[1] << " " << origin[2] << std::endl;
reader->GetOutput()->GetSpacing(spacing);
std::cout << "spacing" << spacing[0] << " " << spacing[1] << " " << spacing[2] << std::endl;
double center[3];
reader->GetOutput()->GetCenter(center);
std::cout << "center:" << center[0] << " " << center[1] << " " << center[2] << std::endl;
center[0] = origin[0] + spacing[0] * 0.5 * (extent[0] + extent[1]);
center[1] = origin[1] + spacing[1] * 0.5 * (extent[2] + extent[3]);
center[2] = origin[2] + spacing[2] * 0.5 * (extent[4] + extent[5]);
std::cout << "center2:" << center[0] << " " << center[1] << " " << center[2] << std::endl;
//*****************************************************************//
static double axialElements[16] = {
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
};
static double coronalElements[16] = {
1, 0, 0, 0,
0, 0, 1, 0,
0,-1, 0, 0,
0, 0, 0, 1 };
vtkSmartPointer<vtkMatrix4x4> resliceAxes =
vtkSmartPointer<vtkMatrix4x4>::New();
resliceAxes->DeepCopy(coronalElements);
resliceAxes->SetElement(0, 3, center[0]);
resliceAxes->SetElement(1, 3, center[1]);
resliceAxes->SetElement(2, 3, center[2]);
vtkSmartPointer<vtkImageReslice> reslice =
vtkSmartPointer<vtkImageReslice>::New();
reslice->SetInputConnection(reader->GetOutputPort());
reslice->SetOutputDimensionality(2);
reslice->SetResliceAxes(resliceAxes);
reslice->SetInterpolationModeToLinear();
//*****************************************************************//
vtkSmartPointer<vtkLookupTable> colorTable =
vtkSmartPointer<vtkLookupTable>::New();
colorTable->SetRange(-500, 1500);
colorTable->SetValueRange(0.0, 1.0);
colorTable->SetSaturationRange(0.0, 0.0);
colorTable->SetRampToLinear();
colorTable->Build();
vtkSmartPointer<vtkImageMapToColors> colorMap =
vtkSmartPointer<vtkImageMapToColors>::New();
colorMap->SetLookupTable(colorTable);
colorMap->SetInputConnection(reslice->GetOutputPort());
colorMap->Update();
//*****************************************************************//
vtkSmartPointer<vtkImageActor> imgActor =
vtkSmartPointer<vtkImageActor>::New();
imgActor->SetInputData(colorMap->GetOutput());
colorMap->GetOutput()->GetDimensions(dims);
std::cout << "dims" << dims[0] << "*" << dims[1] << "*" << dims[2] << std::endl;
colorMap->GetOutput()->GetOrigin(origin);
std::cout << "origin" << origin[0] << " " << origin[1] << " " << origin[2] << std::endl;
colorMap->GetOutput()->GetSpacing(spacing);
std::cout << "spacing" << spacing[0] << " " << spacing[1] << " " << spacing[2] << std::endl;
colorMap->GetOutput()->GetCenter(center);
std::cout << "center:" << center[0] << " " << center[1] << " " << center[2] << std::endl;
colorMap->GetOutput()->GetExtent(extent);
std::cout << "extent:" << extent[0] << " " << extent[1] << " " << extent[2] << extent[3] << " " << extent[4] << " " << extent[5] <<std::endl;
center[0] = origin[0] + spacing[0] * 0.5 * (extent[0] + extent[1]);
center[1] = origin[1] + spacing[1] * 0.5 * (extent[2] + extent[3]);
center[2] = origin[2] + spacing[2] * 0.5 * (extent[4] + extent[5]);
std::cout << "center2:" << center[0] << " " << center[1] << " " << center[2] << std::endl;
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(imgActor);
renderer->SetBackground(0.4, 0.5, 0.6);
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindow->Render();
renderWindow->SetSize(640, 480);
renderWindow->SetWindowName("Extract3Dslice");
vtkSmartPointer<vtkRenderWindowInteractor> rwi =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<vtkInteractorStyleImage> imagestyle =
vtkSmartPointer<vtkInteractorStyleImage>::New();
rwi->SetInteractorStyle(imagestyle);
rwi->SetRenderWindow(renderWindow);
rwi->Initialize();
rwi->Start();
return 0;
}
vtk ImageInfo
最新推荐文章于 2024-05-07 15:52:13 发布
该代码示例使用VTK库读取MetaImage格式的医学图像,进行图像切片操作,并通过颜色映射进行可视化展示。首先,从指定文件中读取图像数据,获取其尺寸、间距、原点等信息,然后定义切片方向,使用vtkImageReslice进行切片,并通过vtkLookupTable和vtkImageMapToColors调整颜色。最后,将结果渲染并显示在窗口中,提供交互功能。
摘要由CSDN通过智能技术生成