[vtkusers] Transform resulting ICP to data!!
    Siti Khatijah 
    khaty111 at hotmail.com
       
    Sat Jan 15 23:51:22 EST 2005
    
    
  
Hi,
I'm new to this vtk and i need your help...I want to register two images 
together using Iterative Closest Point Transform...How do i transform the 
resulting ICP to my data or setting it to user's transform...I think i am 
missing something out..Any help is appreaciated..Thx..Below is my source 
code..
//Declaring all the variables needed
#include "vtkPolyDataMapper.h"  //maps polygonal data  to graphics
#include "vtkActor.h"	       //represents an object (geometry & properties) 
in a rendered scene
#include "vtkProperty.h"      //represent surface properties of a geometric 
object
#include "vtkRenderWindow.h"  //create a window for renderers to draw into
#include "vtkRenderer.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkCamera.h"
#include "vtkIterativeClosestPointTransform.h"
#include "vtkSTLReader.h"
#include "vtkPolyDataNormals.h"
#include "vtkLODActor.h"
#include "vtkOBJReader.h"
#include "vtkPolyData.h"
main()
{
//Create a rendering window and the renderer
vtkRenderWindow * renWin = vtkRenderWindow::New();
vtkRenderer * ren1 = vtkRenderer::New();
//Adding the renderers inside the rendering window
renWin->AddRenderer(ren1);
//Input the ctForehead image(.stl)
vtkSTLReader * ctForehead = vtkSTLReader::New();
ctForehead->SetFileName("C:/Documents and 
Settings/Khatijah/Desktop/examples/ctForehead.stl");
vtkPolyDataNormals * foreheadnormals = vtkPolyDataNormals::New();
foreheadnormals->SetInput(ctForehead->GetOutput());
vtkPolyDataMapper * foreheadMapper = vtkPolyDataMapper::New();
foreheadMapper->SetInput(foreheadnormals->GetOutput());
vtkLODActor  * foreheadActor = vtkLODActor::New();
foreheadActor->SetMapper(foreheadMapper);
//Reading .obj image
vtkOBJReader  * inspeckForehead = vtkOBJReader::New();
inspeckForehead->SetFileName("C:/Documents and 
Settings/Khatijah/Desktop/examples/initinspeckForehead.obj");
vtkPolyDataNormals * forehead2normals = vtkPolyDataNormals::New();
forehead2normals->SetInput(inspeckForehead->GetOutput());
vtkPolyDataMapper * forehead2Mapper = vtkPolyDataMapper::New();
forehead2Mapper->SetInput(forehead2normals->GetOutput());
vtkLODActor * forehead2Actor = vtkLODActor::New();
forehead2Actor->SetMapper(forehead2Mapper);
//vtkIterativeClosestPoint function
vtkIterativeClosestPointTransform *ICPTransform = 
vtkIterativeClosestPointTransform::New();
ICPTransform->SetSource(inspeckForehead->GetOutput());
ICPTransform->SetTarget(ctForehead->GetOutput());
ICPTransform->SetCheckMeanDistance(1);
ICPTransform->SetMaximumMeanDistance(0.001);
ICPTransform->SetMaximumNumberOfIterations(30);
ICPTransform->SetMaximumNumberOfLandmarks(500);
//assign actor to the renderer
ren1->AddActor(foreheadActor);
ren1->AddActor(forehead2Actor);
renWin->SetSize(800,400);
// Now we loop over 360 degreeees and render the cone each time.
  int i;
  for (i = 0; i < 360; ++i)
    {
    // render the image
    renWin->Render();
    // rotate the active camera by one degree
    ren1->GetActiveCamera()->Azimuth(0.1);
  }
//Begin mouse interaction
vtkRenderWindowInteractor * iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
  iren->Initialize();
  iren->Start();
  return 0;
}
_________________________________________________________________
Keep track of Singapore & Malaysia stock prices. 
http://www.msn.com.sg/money/
    
    
More information about the vtkusers
mailing list