VTK皮肤与骨骼抽取

读取一系列人体头部二维切片,抽取皮肤与骨骼

console下实现如下:

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
#include<vtkRenderer.h>
#include<vtkRenderWindow.h>
#include<vtkRenderWindowInteractor.h>
#include<vtkInteractorStyleTrackballCamera.h>
#include<vtkVolume16Reader.h>
#include<vtkPolyDataMapper.h>
#include<vtkActor.h>
#include<vtkOutlineFilter.h>
#include<vtkCamera.h>
#include<vtkProperty.h>
#include<vtkPolyDataNormals.h>
#include<vtkContourFilter.h>
#include<vtkSmartPointer.h>
#include<vtkStripper.h>
int main()
{
	vtkSmartPointer<vtkRenderer>render = vtkSmartPointer<vtkRenderer>::New();
	vtkSmartPointer<vtkRenderWindow>renWin = vtkSmartPointer<vtkRenderWindow>::New();
	renWin->AddRenderer(render);

	vtkSmartPointer<vtkRenderWindowInteractor>iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	iren->SetRenderWindow(renWin);

	vtkSmartPointer<vtkVolume16Reader>v16 = vtkSmartPointer<vtkVolume16Reader>::New();
	v16->SetDataDimensions(64, 64);
	v16->SetDataByteOrderToLittleEndian();
	v16->SetFilePrefix("F:\\vtkshuju\\Data\\headsq\\quarter");
	v16->SetImageRange(1, 93);
	v16->SetDataSpacing(3.2, 3.2, 1.5);

	vtkSmartPointer<vtkContourFilter>skinExtractor = vtkSmartPointer<vtkContourFilter>::New();
	skinExtractor->SetInputConnection(v16->GetOutputPort());
	skinExtractor->SetValue(0, 500);

	vtkSmartPointer<vtkPolyDataNormals>skinNorms = vtkSmartPointer<vtkPolyDataNormals>::New();
	skinNorms->SetInputConnection(skinExtractor->GetOutputPort());
	skinNorms->SetFeatureAngle(60.0);

	vtkSmartPointer<vtkStripper>skinStrip = vtkSmartPointer<vtkStripper>::New();
	skinStrip->SetInputConnection(skinNorms->GetOutputPort());

	vtkSmartPointer<vtkPolyDataMapper>skinMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	skinMapper->SetInputConnection(skinStrip->GetOutputPort());
	skinMapper->ScalarVisibilityOff();

	vtkSmartPointer<vtkActor>skinActor = vtkSmartPointer<vtkActor>::New();
	skinActor->SetMapper(skinMapper);
	skinActor->GetProperty()->SetDiffuseColor(1, 0.49, 0.25);
	skinActor->GetProperty()->SetSpecular(0.3);
	skinActor->GetProperty()->SetSpecularPower(20);
	skinActor->GetProperty()->SetOpacity(0.5);

	vtkSmartPointer<vtkContourFilter>boneExtractor = vtkSmartPointer<vtkContourFilter>::New();
	boneExtractor->SetInputConnection(v16->GetOutputPort());
	boneExtractor->SetValue(0, 1150);

	vtkSmartPointer<vtkPolyDataNormals>boneNormals = vtkSmartPointer<vtkPolyDataNormals>::New();
	boneNormals->SetInputConnection(boneExtractor->GetOutputPort());
	boneNormals->SetFeatureAngle(60.0);

	vtkSmartPointer<vtkStripper>boneStrip = vtkSmartPointer<vtkStripper>::New();
	boneStrip->SetInputConnection(boneNormals->GetOutputPort());

	vtkSmartPointer<vtkPolyDataMapper>boneMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	boneMapper->SetInputConnection(boneStrip->GetOutputPort());
	boneMapper->ScalarVisibilityOff();

	vtkSmartPointer<vtkActor>bone = vtkSmartPointer<vtkActor>::New();
	bone->SetMapper(boneMapper);
	bone->GetProperty()->SetDiffuseColor(1, 1, 0.9412);

	vtkSmartPointer<vtkOutlineFilter>outLineData = vtkSmartPointer<vtkOutlineFilter>::New();
	outLineData->SetInputConnection(v16->GetOutputPort());

	vtkSmartPointer<vtkPolyDataMapper> mapOutline = vtkSmartPointer<vtkPolyDataMapper>::New();
	mapOutline->SetInputConnection(outLineData->GetOutputPort());

	vtkSmartPointer<vtkActor>outline = vtkSmartPointer<vtkActor>::New();
	outline->SetMapper(mapOutline);
	outline->GetProperty()->SetColor(0, 0, 0);

	vtkSmartPointer<vtkCamera>camera = vtkSmartPointer<vtkCamera>::New();
	camera->SetViewUp(0, 0, -1);
	camera->SetPosition(0, 1, 0);
	camera->SetFocalPoint(0, 0, 0);
	camera->ComputeViewPlaneNormal();
	camera->Azimuth(30.0);
	camera->Elevation(30.0);

	render->AddActor(outline);
	render->AddActor(skinActor);
	render->AddActor(bone);
	render->SetActiveCamera(camera);
	render->ResetCamera();
	render->SetBackground(0.2, 0.3, 0.4);
	camera->Dolly(1.5);
	render->ResetCameraClippingRange();

	vtkSmartPointer<vtkInteractorStyleTrackballCamera>style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
	iren->SetInteractorStyle(style);

	iren->Initialize();
	iren->Start();
	
	return 0;
}


猜你喜欢

转载自blog.csdn.net/thecentry/article/details/79175841
今日推荐