<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:tahoma,new york,times,serif;font-size:10pt">Hallo,<br><br>I wanted to have my MI-Registration in sagittal and coronal view. I made the registration in ITK and I presented it with VTK. But the output-direction is only in the axial-slice. How can I get the registration in sagittal and coronal view represent?<br><br>Thanks<br><br>Here is my Code:<br><br>&nbsp;&nbsp;&nbsp; const&nbsp;&nbsp;&nbsp; unsigned int&nbsp;&nbsp;&nbsp; Dimension = 2;<br>&nbsp;&nbsp;&nbsp; typedef&nbsp; unsigned short&nbsp; PixelType;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; typedef itk::Image&lt; PixelType, Dimension &gt;&nbsp; FixedImageType;<br>&nbsp;&nbsp;&nbsp; typedef itk::Image&lt; PixelType, Dimension &gt;&nbsp; MovingImageType;<br><br>&nbsp;&nbsp;&nbsp; typedef itk::TranslationTransform&lt; double, Dimension &gt; TransformType;<br>&nbsp;&nbsp;&nbsp; typedef
 itk::RegularStepGradientDescentOptimizer OptimizerType;<br>&nbsp;&nbsp;&nbsp; typedef itk::LinearInterpolateImageFunction&lt; MovingImageType,double &gt; InterpolatorType;<br>&nbsp;&nbsp;&nbsp; typedef itk::ImageRegistrationMethod&lt;FixedImageType,MovingImageType&gt; RegistrationType;<br><br>&nbsp;&nbsp;&nbsp; typedef itk::MattesMutualInformationImageToImageMetric&lt;FixedImageType,MovingImageType &gt; MetricType;<br><br>&nbsp;&nbsp;&nbsp; TransformType::Pointer transform= TransformType::New();<br>&nbsp;&nbsp;&nbsp; OptimizerType::Pointer&nbsp; optimizer= OptimizerType::New();<br>&nbsp;&nbsp;&nbsp; InterpolatorType::Pointer interpolator= InterpolatorType::New();<br>&nbsp;&nbsp;&nbsp; RegistrationType::Pointer registration= RegistrationType::New();<br><br>&nbsp;&nbsp;&nbsp; registration-&gt;SetOptimizer(optimizer);<br>&nbsp;&nbsp;&nbsp; registration-&gt;SetTransform(transform);<br>&nbsp;&nbsp;&nbsp;
 registration-&gt;SetInterpolator(interpolator);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; MetricType::Pointer metric = MetricType::New();<br>&nbsp;&nbsp;&nbsp; registration-&gt;SetMetric( metric&nbsp; );<br><br>&nbsp;&nbsp;&nbsp; unsigned int numberOfBins = 24;<br>&nbsp;&nbsp;&nbsp; unsigned int numberOfSamples = 10000;<br><br>&nbsp;&nbsp;&nbsp; numberOfBins =24;<br>&nbsp;&nbsp;&nbsp; numberOfSamples =10000;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; metric-&gt;SetNumberOfHistogramBins( numberOfBins );<br>&nbsp;&nbsp;&nbsp; metric-&gt;SetNumberOfSpatialSamples( numberOfSamples );<br>&nbsp;&nbsp;&nbsp; metric-&gt;SetUseExplicitPDFDerivatives(4);<br>&nbsp;&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp;&nbsp; typedef itk::ImageFileReader&lt; FixedImageType&nbsp; &gt; FixedImageReaderType;<br>&nbsp;&nbsp;&nbsp; typedef itk::ImageFileReader&lt; MovingImageType &gt; MovingImageReaderType;<br><br>&nbsp;&nbsp;&nbsp; FixedImageReaderType::Pointer&nbsp;
 fixedImageReader&nbsp; = FixedImageReaderType::New();<br>&nbsp;&nbsp;&nbsp; MovingImageReaderType::Pointer movingImageReader = MovingImageReaderType::New();<br><br>&nbsp;&nbsp;&nbsp; //std::cout&lt;&lt;"pfad"&lt;&lt;filesSecondFusion.at((int)this-&gt;sliderFusion2-&gt;value()).c_str()&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; fixedImageReader-&gt;SetFileName(filesFirstFusion.at((int)this-&gt;sliderFusion1-&gt;value()).c_str());<br>&nbsp;&nbsp;&nbsp; movingImageReader-&gt;SetFileName(filesSecondFusion.at((int)this-&gt;sliderFusion2-&gt;value()).c_str());<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; registration-&gt;SetFixedImage(fixedImageReader-&gt;GetOutput());<br>&nbsp;&nbsp;&nbsp; registration-&gt;SetMovingImage(movingImageReader-&gt;GetOutput());<br><br>&nbsp;&nbsp;&nbsp; fixedImageReader-&gt;Update();<br><br>&nbsp;&nbsp;&nbsp;
 registration-&gt;SetFixedImageRegion(fixedImageReader-&gt;GetOutput()-&gt;GetBufferedRegion());<br><br>&nbsp;&nbsp;&nbsp; typedef RegistrationType::ParametersType ParametersType;<br>&nbsp;&nbsp;&nbsp; ParametersType initialParameters( transform-&gt;GetNumberOfParameters() );<br><br>&nbsp;&nbsp;&nbsp; initialParameters[0] = 0.0;&nbsp; // Initial offset in mm along X<br>&nbsp;&nbsp;&nbsp; initialParameters[1] = 0.0;&nbsp; // Initial offset in mm along Y<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; registration-&gt;SetInitialTransformParameters( initialParameters );<br><br>&nbsp;&nbsp;&nbsp; optimizer-&gt;MinimizeOn();<br>&nbsp;&nbsp;&nbsp; optimizer-&gt;SetMaximumStepLength(2.00);&nbsp; <br>&nbsp;&nbsp;&nbsp; optimizer-&gt;SetMinimumStepLength(0.001);<br>&nbsp;&nbsp;&nbsp; optimizer-&gt;SetNumberOfIterations(2000);<br>&nbsp;&nbsp;&nbsp; optimizer-&gt;SetRelaxationFactor(0.8);<br><br>&nbsp;&nbsp;&nbsp; ParametersType finalParameters =
 registration-&gt;GetLastTransformParameters();<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; double TranslationAlongX= finalParameters[0];<br>&nbsp;&nbsp;&nbsp; double TranslationAlongY= finalParameters[1];<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; unsigned int numberOfIterations = optimizer-&gt;GetCurrentIteration();<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; double bestValue = optimizer-&gt;GetValue();<br><br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "Result = " &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; " Translation X = " &lt;&lt; TranslationAlongX&nbsp; &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; " Translation Y = " &lt;&lt; TranslationAlongY&nbsp; &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; " Iterations&nbsp;&nbsp;&nbsp; = " &lt;&lt; numberOfIterations &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; " Metric value&nbsp; = " &lt;&lt;
 bestValue&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; " Stop Condition&nbsp; = " &lt;&lt; optimizer-&gt;GetStopCondition() &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; <br><br>&nbsp;&nbsp;&nbsp; typedef itk::ResampleImageFilter&lt;MovingImageType,FixedImageType&gt;&nbsp; ResampleFilterType;<br><br>&nbsp;&nbsp;&nbsp; TransformType::Pointer finalTransform = TransformType::New();<br><br>&nbsp;&nbsp;&nbsp; finalTransform-&gt;SetParameters(finalParameters);<br>&nbsp;&nbsp;&nbsp; finalTransform-&gt;SetFixedParameters( transform-&gt;GetFixedParameters() );<br><br>&nbsp;&nbsp;&nbsp; ResampleFilterType::Pointer resample = ResampleFilterType::New();<br><br>&nbsp;&nbsp;&nbsp; resample-&gt;SetTransform( finalTransform );<br>&nbsp;&nbsp;&nbsp; resample-&gt;SetInput( movingImageReader-&gt;GetOutput() );<br><br>&nbsp;&nbsp;&nbsp; FixedImageType::Pointer fixedImage =
 fixedImageReader-&gt;GetOutput();<br><br>&nbsp;&nbsp;&nbsp; PixelType defaultPixelValue= 100;<br>&nbsp;&nbsp;&nbsp; defaultPixelValue= 100;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; resample-&gt;SetSize(fixedImage-&gt;GetLargestPossibleRegion().GetSize());<br>&nbsp;&nbsp;&nbsp; resample-&gt;SetOutputOrigin(fixedImage-&gt;GetOrigin());<br>&nbsp;&nbsp;&nbsp; resample-&gt;SetOutputSpacing(fixedImage-&gt;GetSpacing());<br>&nbsp;&nbsp;&nbsp; resample-&gt;SetOutputDirection(fixedImage-&gt;GetDirection());<br>&nbsp;&nbsp;&nbsp; resample-&gt;SetDefaultPixelValue(defaultPixelValue);<br><br><br>&nbsp;&nbsp;&nbsp; typedef&nbsp; unsigned char&nbsp; OutputPixelType;<br>&nbsp;&nbsp;&nbsp; typedef itk::Image&lt;OutputPixelType, Dimension&gt; OutputImageType;<br>&nbsp;&nbsp;&nbsp; typedef itk::CastImageFilter&lt;FixedImageType,OutputImageType&gt; CastFilterType;<br>&nbsp;&nbsp;&nbsp; typedef itk::ImageFileWriter&lt;OutputImageType&gt;&nbsp;
 WriterType;<br><br>&nbsp;&nbsp;&nbsp; WriterType::Pointer writer=&nbsp; WriterType::New();<br>&nbsp;&nbsp;&nbsp; CastFilterType::Pointer caster=&nbsp; CastFilterType::New();<br><br>&nbsp;&nbsp;&nbsp; writer-&gt;SetFileName("registration1.jpg");<br><br>&nbsp;&nbsp;&nbsp; caster-&gt;SetInput(resample-&gt;GetOutput());<br>&nbsp;&nbsp;&nbsp; writer-&gt;SetInput(caster-&gt;GetOutput());<br>&nbsp;&nbsp;&nbsp; writer-&gt;Update();<br><br>&nbsp;&nbsp;&nbsp; typedef itk::CheckerBoardImageFilter&lt; FixedImageType &gt; CheckerBoardFilterType;<br>&nbsp;&nbsp;&nbsp; CheckerBoardFilterType::Pointer checker = CheckerBoardFilterType::New();<br><br>&nbsp;&nbsp;&nbsp; checker-&gt;SetInput1(fixedImage);<br>&nbsp;&nbsp;&nbsp; checker-&gt;SetInput2(resample-&gt;GetOutput());<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if(imageRegistrationCheckerboardChoice-&gt;value()== 0){<br>&nbsp;&nbsp;&nbsp; unsigned int checkerArray[3]= {2,2,2};<br>&nbsp;&nbsp;&nbsp;
 checker-&gt;SetCheckerPattern(checkerArray);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; if(imageRegistrationCheckerboardChoice-&gt;value()== 1){<br>&nbsp;&nbsp;&nbsp; unsigned int checkerArray[3]= {4,4,4};&nbsp; <br>&nbsp;&nbsp;&nbsp; checker-&gt;SetCheckerPattern(checkerArray);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; if(imageRegistrationCheckerboardChoice-&gt;value()== 2){<br>&nbsp;&nbsp;&nbsp; unsigned int checkerArray[3]= {8,8,8};&nbsp; <br>&nbsp;&nbsp;&nbsp; checker-&gt;SetCheckerPattern(checkerArray);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; if(imageRegistrationCheckerboardChoice-&gt;value()== 3){<br>&nbsp;&nbsp;&nbsp; unsigned int checkerArray[3]= {16,16,16};&nbsp; <br>&nbsp;&nbsp;&nbsp; checker-&gt;SetCheckerPattern(checkerArray);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;
 caster-&gt;SetInput(checker-&gt;GetOutput());<br>&nbsp;&nbsp;&nbsp; writer-&gt;SetInput(caster-&gt;GetOutput() );<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; resample-&gt;SetDefaultPixelValue(100);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; // Before registration<br>&nbsp;&nbsp;&nbsp; TransformType::Pointer identityTransform = TransformType::New();<br>&nbsp;&nbsp;&nbsp; identityTransform-&gt;SetIdentity();<br>&nbsp;&nbsp;&nbsp; resample-&gt;SetTransform( identityTransform );<br><br>&nbsp;&nbsp;&nbsp; writer-&gt;SetFileName("registration2.jpg");<br>&nbsp;&nbsp;&nbsp; writer-&gt;Update();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp; // After registration<br>&nbsp;&nbsp;&nbsp; resample-&gt;SetTransform( finalTransform );<br>&nbsp;&nbsp;&nbsp; writer-&gt;SetFileName("registration3.jpg");<br>&nbsp;&nbsp;&nbsp; writer-&gt;Update();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; typedef itk::VTKImageExport&lt;
 OutputImageType&nbsp; &gt; ExportFilterType;<br>&nbsp;&nbsp;&nbsp; ExportFilterType::Pointer itkExporter = ExportFilterType::New();<br>&nbsp;&nbsp;&nbsp; itkExporter-&gt;SetInput(caster-&gt;GetOutput() );<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; vtkImageImport* vtkImporter = vtkImageImport::New();&nbsp; <br>&nbsp;&nbsp;&nbsp; ConnectPipelines(itkExporter, vtkImporter);<br>&nbsp;&nbsp;&nbsp; vtkImporter-&gt;Update();<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; modeFusion = vtkInteractorStyleTrackballCamera::New();<br><br>&nbsp;&nbsp;&nbsp; rendererFusion = vtkRenderer::New();<br><br>&nbsp;&nbsp;&nbsp; renderWindowFusion = vtkRenderWindow::New();<br>&nbsp;&nbsp;&nbsp; renderWindowFusion-&gt;AddRenderer(rendererFusion);<br><br>&nbsp;&nbsp;&nbsp; imageFusionBox-&gt;SetRenderWindow(renderWindowFusion);<br>&nbsp;&nbsp;&nbsp; imageFusionBox-&gt;SetInteractorStyle(modeFusion);<br>&nbsp;&nbsp;&nbsp;
 imageFusionBox-&gt;Initialize();<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; imgFirstColorMap =&nbsp; vtkLookupTable::New();<br>&nbsp;&nbsp;&nbsp; imgFirstColorMap-&gt;SetTableRange(-250, 1200);<br>&nbsp;&nbsp;&nbsp; imgFirstColorMap-&gt;SetSaturationRange(0,0);<br>&nbsp;&nbsp;&nbsp; imgFirstColorMap-&gt;SetHueRange(0, 0);<br>&nbsp;&nbsp;&nbsp; imgFirstColorMap-&gt;SetValueRange(0, 2);<br>&nbsp;&nbsp;&nbsp; imgFirstColorMap-&gt;Build();<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; firstColorMapper =&nbsp; vtkImageMapToColors::New();<br>&nbsp;&nbsp;&nbsp; firstColorMapper-&gt;SetInput(vtkImporter-&gt;GetOutput());<br>&nbsp;&nbsp;&nbsp; firstColorMapper-&gt;SetLookupTable(imgFirstColorMap);<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; imgFusionMIActor = vtkImageActor::New();<br>&nbsp;&nbsp;&nbsp; imgFusionMIActor-&gt;SetInput(firstColorMapper-&gt;GetOutput());<br>&nbsp;&nbsp;&nbsp;
 imgFusionMIActor-&gt;SetOpacity(1.0);<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; cameraFusion = vtkCamera::New();<br>&nbsp;&nbsp;&nbsp; cameraFusion-&gt;SetViewUp(0, 0, -1);<br>&nbsp;&nbsp;&nbsp; cameraFusion-&gt;SetPosition(0, 1, 0);<br>&nbsp;&nbsp;&nbsp; cameraFusion-&gt;SetFocalPoint(0, 0, 0);<br>&nbsp;&nbsp;&nbsp; cameraFusion-&gt;ComputeViewPlaneNormal();&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; cameraFusion-&gt;Roll(-90);<br>&nbsp;&nbsp;&nbsp; cameraFusion-&gt;Azimuth(90);<br>&nbsp;&nbsp;&nbsp; cameraFusion-&gt;Roll(90);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; rendererFusion-&gt;AddActor(imgFusionMIActor);<br>&nbsp; &nbsp; rendererFusion-&gt;SetActiveCamera(cameraFusion);<br>&nbsp; &nbsp; rendererFusion-&gt;ResetCamera();<br>&nbsp; &nbsp; cameraFusion-&gt;Dolly(1.7);<br>&nbsp; &nbsp; rendererFusion-&gt;ResetCameraClippingRange();<br><br><div>&nbsp;<br><br><br><br></div>Mit freundlichen Grüßen<br>Yusuf
 ÖZBEK<div><br></div>
</div><br></body></html>