您的位置:首页 > 其它

VTK读取序列JPG图片MC算法进行三维重建

2016-11-10 15:18 627 查看
VTK读取序列JPG图片用MC算法进行三维重建,JPG图片是用底层代码插值生成

#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkJPEGReader.h>
#include <vtkMarchingCubes.h>
#include <vtkStripper.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkOutlineFilter.h>
#include <vtkSmartPointer.h>
#include <vtkCamera.h>

void main()
{
vtkSmartPointer<vtkRenderer>ren=vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow>renWin=vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(ren);
vtkSmartPointer<vtkRenderWindowInteractor>iren=vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);

vtkSmartPointer<vtkJPEGReader>Reader=vtkSmartPointer<vtkJPEGReader>::New();
Reader->SetDataScalarTypeToUnsignedChar();
Reader->SetFileDimensionality(3);
Reader->SetFilePrefix("E:\\JPG\\rgb");
Reader->SetFileNameSliceSpacing(1);
Reader->SetFilePattern("%s%d.jpg");
Reader->SetDataExtent( 0, 200, 0, 400, 1,9);
Reader->SetDataSpacing(1,1,10);
Reader->Update();

vtkSmartPointer<vtkMarchingCubes>marchingcube=vtkSmartPointer<vtkMarchingCubes>::New();
marchingcube->SetInput((vtkDataSet *)Reader->GetOutput());
//marchingcube->SetInputConnection(Reader->GetOutputPort());      //第二种读取数据的方法
marchingcube->SetValue(0,200);

vtkSmartPointer<vtkStripper>Stripper=vtkSmartPointer<vtkStripper>::New();
Stripper->SetInput( marchingcube->GetOutput());

vtkSmartPointer<vtkPolyDataMapper>polyMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
polyMapper->SetInput(Stripper->GetOutput());
polyMapper->ScalarVisibilityOff();

vtkSmartPointer<vtkActor>actor=vtkSmartPointer<vtkActor>::New();
actor->SetMapper(polyMapper);
actor->GetProperty()->SetDiffuseColor(1,0.19,0.15);
actor->GetProperty()->SetSpecular(0.1);
actor->GetProperty()->SetSpecularPower(10);
actor->GetProperty()->SetColor(1,0,0);

vtkSmartPointer<vtkOutlineFilter>outlinefilter=vtkSmartPointer<vtkOutlineFilter>::New();
outlinefilter->SetInputConnection(Reader->GetOutputPort());

vtkSmartPointer<vtkPolyDataMapper>outlineMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
outlineMapper->SetInputConnection(outlinefilter->GetOutputPort());

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

vtkSmartPointer<vtkCamera>aCamera=vtkSmartPointer<vtkCamera>::New();
aCamera->SetViewUp(0,0,-1);
aCamera->SetPosition(0,1,0);
aCamera->SetFocalPoint(0,0,0);
aCamera->ComputeViewPlaneNormal();

ren->AddActor(actor);
ren->AddActor(outlineActor);
ren->SetActiveCamera(aCamera);
ren->ResetCamera();
aCamera->Dolly(1.5);

ren->SetBackground(1,1,1);
renWin->SetSize(640,640);

ren->ResetCameraClippingRange();
iren->Initialize();
iren->Start();
}




JPG图片的读取可参考:VTK序列图像的读取[转][改] - vranger - 博客园  https://www.cnblogs.com/vranger/p/3821476.html点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: