<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
  <title></title>
</head>
<body text="#000000" bgcolor="#ffffff">
Hi @all,<br>
<br>
when I try to run the deformableRegistration1 example, it <br>
crashes with the following message:<br>
<br>
Microsoft Windows XP [Version 5.1.2600]<br>
(C) Copyright 1985-2001 Microsoft Corp.<br>
<br>
<font color="#ff0000">C:\DFG-Projekt\RIP\build\RelWithDebInfo&gt;registrationImagingPlattform
params.txt<br>
Reading config file...params.txt<br>
Example configured. E 0 rho 0<br>
&nbsp;reading moving<br>
&nbsp;reading fixed<br>
&nbsp;beginning level 0<br>
&nbsp;scaling 1<br>
&nbsp;scaling 1<br>
&nbsp;scaling 1<br>
&nbsp;ElementsPerDim 512 512 52<br>
File&nbsp; not found!<br>
&nbsp;applying loads<br>
<br>
no landmark file specified.<br>
&nbsp;num of LM loads 0<br>
&nbsp;landmarks done<br>
&nbsp;allocating deformation field<br>
&nbsp;load sizes [512, 512, 52]&nbsp; image [512, 512, 52]<br>
&nbsp;load sizes [512, 512, 52]&nbsp; image [512, 512, 52]<br>
&nbsp;energy 0<br>
<br>
This application has requested the Runtime to terminate it in an
unusual way.<br>
Please contact the application's support team for more information.</font><br>
<br>
<br>
I use the following configurations file:<br>
<br>
<font color="#3333ff">% Note: the paths in the parameters assume you
have the traditional<br>
% ITK file hierarchy as shown below:<br>
%<br>
% ITK/Insight/Examples/Registration/DeformableRegistration1.cxx<br>
% ITK/Insight/Examples/Data/RatLungSlice*<br>
% ITK/Insight-Bin/bin/DeformableRegistration1<br>
%<br>
% ---------------------------------------------------------<br>
% Parameters for the single- or multi-resolution techniques<br>
% ---------------------------------------------------------<br>
1 % Number of levels in the multi-res pyramid (1 = single-res)<br>
1 % Highest level to use in the pyramid<br>
1 1 % Scaling at lowest level of pyramid<br>
8 % Number of pixels per element<br>
1.e4 % Elasticity (E)<br>
1.e4 % Density x capacity (RhoC)<br>
1 % Image energy scaling (gamma) - sets gradient step size<br>
2 % NumberOfIntegrationPoints<br>
1 % WidthOfMetricRegion<br>
20 % MaximumIterations<br>
% -------------------------------<br>
% Parameters for the registration<br>
% -------------------------------<br>
0 0.99 % Similarity metric (0=mean sq, 1 = ncc, 2=pattern int, 3=MI,
5=demons)<br>
1.0 % Alpha<br>
0 % DescentDirection (1 = max, 0 = min)<br>
0 % DoLineSearch (0=never, 1=always, 2=if needed)<br>
1.e1 % TimeStep<br>
0.5 % Landmark variance<br>
0 % Employ regridding / enforce diffeomorphism ( &gt;= 1 -&gt; true)<br>
% ----------------------------------<br>
% Information about the image inputs<br>
% ----------------------------------<br>
512 % Nx (image x dimension)<br>
512 % Ny (image y dimension)<br>
52&nbsp; % Nz (image z dimension - not used if 2D)<br>
rigid_reg_CT1.hdr % ReferenceFileName<br>
CT.hdr % TargetFileName<br>
<br>
% -------------------------------------------------------------------<br>
% The actions below depend on the values of the flags preceding them.<br>
% For example, to write out the displacement fields, you have to set<br>
% the value of WriteDisplacementField to 1.<br>
% -------------------------------------------------------------------<br>
0 % UseLandmarks? - read the file name below if this is true<br>
- % LandmarkFileName<br>
./RatLung_result % ResultsFileName (prefix only)<br>
0 % WriteDisplacementField?<br>
./RatLung_disp % DisplacementsFileName (prefix only)<br>
0 % ReadMeshFile?<br>
- % MeshFileName<br>
END<br>
<br>
<font color="#000000">I also changed the code of the example a little
bit to work in 3D (see the following part of<br>
the message).<br>
I hope that I didn't do a mistake here.<br>
Help would be very appreciated to find the cause of this error.<br>
I use ITK Version 2.4.0 and compile in release with deb.inf. mode.<br>
<br>
Best regards,<br>
Markus<br>
&nbsp;<br>
<br>
<br>
<br>
<br>
/*=========================================================================<br>
<br>
&nbsp; Program:&nbsp;&nbsp; Insight Segmentation &amp; Registration Toolkit<br>
&nbsp; Module:&nbsp;&nbsp;&nbsp; $RCSfile: DeformableRegistration1.cxx,v $<br>
&nbsp; Language:&nbsp; C++<br>
&nbsp; Date:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Date: 2005/11/19 16:31:50 $<br>
&nbsp; Version:&nbsp;&nbsp; $Revision: 1.32 $<br>
<br>
&nbsp; Copyright (c) Insight Software Consortium. All rights reserved.<br>
&nbsp; See ITKCopyright.txt or <a class="moz-txt-link-freetext" href="http://www.itk.org/HTML/Copyright.htm">http://www.itk.org/HTML/Copyright.htm</a> for
details.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp; This software is distributed WITHOUT ANY WARRANTY; without even <br>
&nbsp;&nbsp;&nbsp;&nbsp; the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR <br>
&nbsp;&nbsp;&nbsp;&nbsp; PURPOSE.&nbsp; See the above copyright notices for more information.<br>
<br>
=========================================================================*/<br>
#if defined(_MSC_VER)<br>
#pragma warning ( disable : 4786 )<br>
#endif<br>
<br>
<br>
#include "itkImageFileReader.h" <br>
#include "itkImageFileWriter.h" <br>
<br>
#include "itkRescaleIntensityImageFilter.h"<br>
#include "itkHistogramMatchingImageFilter.h"<br>
<br>
//&nbsp; Software Guide : BeginLatex<br>
//<br>
// The finite element (FEM) library within the Insight Toolkit can be<br>
// used to solve deformable image registration problems.&nbsp; The first
step in<br>
// implementing a FEM-based registration is to include the appropriate<br>
// header files.<br>
//<br>
//&nbsp; \index{Registration!Finite Element-Based}<br>
//<br>
//&nbsp; Software Guide : EndLatex <br>
<br>
<br>
// Software Guide : BeginCodeSnippet<br>
#include "itkFEM.h"<br>
#include "itkFEMRegistrationFilter.h"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
// Software Guide : EndCodeSnippet<br>
<br>
//#include "itkFEMFiniteDifferenceFunctionLoad.h"<br>
<br>
<br>
//&nbsp; Software Guide : BeginLatex<br>
//<br>
//&nbsp; Next, we use \code{typedef}s to instantiate all necessary classes.&nbsp;
We<br>
//&nbsp; define the image and element types we plan to use to solve a<br>
//&nbsp; two-dimensional registration problem.&nbsp; We define multiple element<br>
//&nbsp; types so that they can be used without recompiling the code.<br>
//<br>
//&nbsp; Software Guide : EndLatex <br>
<br>
<br>
//&nbsp; Software Guide : BeginCodeSnippet<br>
typedef itk::Image&lt;unsigned char, 2&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
fileImageType;<br>
typedef itk::Image&lt;float, 2&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ImageType;<br>
typedef itk::fem::Element2DC0LinearQuadrilateralMembrane&nbsp;&nbsp; ElementType;<br>
typedef itk::fem::Element2DC0LinearTriangularMembrane&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ElementType2;<br>
//&nbsp; Software Guide : EndCodeSnippet<br>
<br>
<br>
//&nbsp; Software Guide : BeginLatex<br>
//<br>
//&nbsp; Note that in order to solve a three-dimensional registration<br>
//&nbsp; problem, we would simply define 3D image and element types in lieu<br>
//&nbsp; of those above.&nbsp; The following declarations could be used for a 3D<br>
//&nbsp; problem:<br>
//<br>
//&nbsp; SoftwareGuide : EndLatex<br>
<br>
<br>
//&nbsp; SoftwareGuide : BeginCodeSnippet<br>
typedef itk::Image&lt;short, 3&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
fileImage3DType;<br>
typedef itk::Image&lt;short, 3&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Image3DType;<br>
typedef itk::fem::Element3DC0LinearHexahedronMembrane&nbsp;&nbsp; Element3DType;<br>
typedef itk::fem::Element3DC0LinearTetrahedronMembrane&nbsp; Element3DType2;<br>
//&nbsp; Software Guide : EndCodeSnippet<br>
<br>
<br>
//&nbsp; Software Guide : BeginLatex<br>
//&nbsp; <br>
//&nbsp; Here, we instantiate the load types and explicitly template the<br>
//&nbsp; load implementation type.&nbsp; We also define visitors that allow the<br>
//&nbsp; elements and loads to communicate with one another.&nbsp; <br>
//<br>
//&nbsp; Software Guide : EndLatex<br>
<br>
<br>
//typedef itk::fem::ImageMetricLoad&lt;ImageType,ImageType&gt;&nbsp;&nbsp;&nbsp;&nbsp;
ImageLoadType;<br>
<br>
//&nbsp; Software Guide : BeginCodeSnippet<br>
<br>
typedef
itk::fem::FiniteDifferenceFunctionLoad&lt;Image3DType,Image3DType&gt;
ImageLoadType;<br>
template class
itk::fem::ImageMetricLoadImplementation&lt;ImageLoadType&gt;;<br>
<br>
typedef Element3DType::LoadImplementationFunctionPointer&nbsp;&nbsp;&nbsp;&nbsp; LoadImpFP;<br>
typedef Element3DType::LoadType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ElementLoadType;<br>
<br>
typedef Element3DType2::LoadImplementationFunctionPointer&nbsp;&nbsp;&nbsp; LoadImpFP2;<br>
typedef Element3DType2::LoadType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ElementLoadType2;<br>
<br>
typedef itk::fem::VisitorDispatcher&lt;Element3DType,ElementLoadType,
LoadImpFP&gt;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
DispatcherType;<br>
<br>
typedef itk::fem::VisitorDispatcher&lt;Element3DType2,ElementLoadType2,
LoadImpFP2&gt;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
DispatcherType2;<br>
//&nbsp; Software Guide : EndCodeSnippet<br>
<br>
<br>
//&nbsp; Software Guide : BeginLatex<br>
//<br>
//&nbsp; Once all the necessary components have been instantiated, we can<br>
//&nbsp; instantiate the \doxygen{FEMRegistrationFilter}, which depends on
the<br>
//&nbsp; image input and output types.<br>
//<br>
//&nbsp; Software Guide : EndLatex<br>
<br>
<br>
//&nbsp; Software Guide : BeginCodeSnippet<br>
typedef itk::fem::FEMRegistrationFilter&lt;Image3DType,Image3DType&gt;
RegistrationType;<br>
//&nbsp; Software Guide : EndCodeSnippet<br>
<br>
<br>
int main(int argc, char *argv[])<br>
{<br>
&nbsp; char *paramname;<br>
&nbsp; if ( argc &lt; 2 )<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "Parameter file name missing" &lt;&lt; std::endl;<br>
&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "Usage: " &lt;&lt; argv[0] &lt;&lt; "
param.file" &lt;&lt; std::endl;<br>
&nbsp;&nbsp;&nbsp; return -1;<br>
&nbsp;&nbsp;&nbsp; } <br>
&nbsp; else <br>
&nbsp;&nbsp;&nbsp; { <br>
&nbsp;&nbsp;&nbsp; paramname=argv[1]; <br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
<br>
//&nbsp; Software Guide : BeginLatex<br>
//&nbsp; <br>
//&nbsp; The \doxygen{fem::ImageMetricLoad} must be registered before it<br>
//&nbsp; can be used correctly with a particular element type.&nbsp; An example<br>
//&nbsp; of this is shown below for ElementType.&nbsp; Similar<br>
//&nbsp; definitions are required for all other defined element types.<br>
//<br>
//&nbsp; Software Guide : EndLatex<br>
&nbsp; <br>
&nbsp; // Register the correct load implementation with the element-typed
visitor dispatcher. <br>
&nbsp; {<br>
//&nbsp; Software Guide : BeginCodeSnippet<br>
&nbsp; Element3DType::LoadImplementationFunctionPointer fp = <br>
&nbsp;&nbsp;&nbsp;
&amp;itk::fem::ImageMetricLoadImplementation&lt;ImageLoadType&gt;::ImplementImageMetricLoad;<br>
&nbsp; DispatcherType::RegisterVisitor((ImageLoadType*)0,fp);<br>
//&nbsp; Software Guide : EndCodeSnippet&nbsp; <br>
&nbsp; }<br>
&nbsp; {<br>
&nbsp; Element3DType2::LoadImplementationFunctionPointer fp =<br>
&nbsp;&nbsp;&nbsp;
&amp;itk::fem::ImageMetricLoadImplementation&lt;ImageLoadType&gt;::ImplementImageMetricLoad;<br>
&nbsp; DispatcherType2::RegisterVisitor((ImageLoadType*)0,fp);<br>
&nbsp; }<br>
<br>
<br>
//&nbsp; Software Guide : BeginLatex<br>
//&nbsp; <br>
//&nbsp; In order to begin the registration, we declare an instance of the<br>
//&nbsp; FEMRegistrationFilter.&nbsp; For simplicity, we will call<br>
//&nbsp; it \code{registrationFilter}.<br>
// <br>
//&nbsp; Software Guide : EndLatex<br>
<br>
//&nbsp; Software Guide : BeginCodeSnippet<br>
&nbsp; RegistrationType::Pointer registrationFilter =
RegistrationType::New(); <br>
//&nbsp; Software Guide : EndCodeSnippet<br>
<br>
<br>
//&nbsp; Software Guide : BeginLatex<br>
// <br>
//&nbsp; Next, we call \code{registrationFilter-&gt;SetConfigFileName()} to
read the parameter<br>
//&nbsp; file containing information we need to set up the registration<br>
//&nbsp; filter (image files, image sizes, etc.).&nbsp; A sample parameter file
is shown at the end of this<br>
//&nbsp; section, and the individual components are labeled.&nbsp; <br>
//<br>
//&nbsp; Software Guide : EndLatex<br>
<br>
<br>
&nbsp; // Attempt to read the parameter file, and exit if an error occurs<br>
&nbsp; registrationFilter-&gt;SetConfigFileName(paramname);<br>
&nbsp; if ( !registrationFilter-&gt;ReadConfigFile( <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (registrationFilter-&gt;GetConfigFileName()).c_str() ) ) <br>
&nbsp;&nbsp;&nbsp; { <br>
&nbsp;&nbsp;&nbsp; return -1; <br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;<br>
&nbsp; // Read the image files<br>
&nbsp; typedef itk::ImageFileReader&lt; fileImage3DType &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
FileSourceType;<br>
&nbsp; typedef fileImageType::PixelType PixType;<br>
<br>
&nbsp; FileSourceType::Pointer movingfilter = FileSourceType::New();<br>
&nbsp; movingfilter-&gt;SetFileName(
"rigid_reg_ct1.hdr"/*(registrationFilter-&gt;GetMovingFile()).c_str()*/
);<br>
&nbsp; FileSourceType::Pointer fixedfilter = FileSourceType::New();<br>
&nbsp; fixedfilter-&gt;SetFileName(
"ct.hdr"/*(registrationFilter-&gt;GetFixedFile()).c_str()*/ );<br>
&nbsp; std::cout &lt;&lt; " reading moving " &lt;&lt;
registrationFilter-&gt;GetMovingFile() &lt;&lt; std::endl;<br>
&nbsp; std::cout &lt;&lt; " reading fixed " &lt;&lt;
registrationFilter-&gt;GetFixedFile() &lt;&lt; std::endl;<br>
&nbsp; <br>
<br>
&nbsp; try<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; movingfilter-&gt;Update();<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp; catch( itk::ExceptionObject &amp; e )<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "Exception caught during reference file reading
" &lt;&lt; std::endl;<br>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; e &lt;&lt; std::endl;<br>
&nbsp;&nbsp;&nbsp; return -1;<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp; try<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; fixedfilter-&gt;Update();<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp; catch( itk::ExceptionObject &amp; e )<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "Exception caught during target file reading "
&lt;&lt; std::endl;<br>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; e &lt;&lt; std::endl;<br>
&nbsp;&nbsp;&nbsp; return -1;<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp; <br>
<br>
&nbsp; // Rescale the image intensities so that they fall between 0 and 255<br>
&nbsp; typedef
itk::RescaleIntensityImageFilter&lt;fileImage3DType,Image3DType&gt;
FilterType;<br>
&nbsp; FilterType::Pointer movingrescalefilter = FilterType::New();<br>
&nbsp; FilterType::Pointer fixedrescalefilter = FilterType::New();<br>
<br>
&nbsp; movingrescalefilter-&gt;SetInput(movingfilter-&gt;GetOutput());<br>
&nbsp; fixedrescalefilter-&gt;SetInput(fixedfilter-&gt;GetOutput());<br>
<br>
&nbsp; const double desiredMinimum =&nbsp; 0.0;<br>
&nbsp; const double desiredMaximum =&nbsp; 255.0;<br>
<br>
&nbsp; movingrescalefilter-&gt;SetOutputMinimum( desiredMinimum );<br>
&nbsp; movingrescalefilter-&gt;SetOutputMaximum( desiredMaximum );<br>
&nbsp; movingrescalefilter-&gt;UpdateLargestPossibleRegion();<br>
&nbsp; fixedrescalefilter-&gt;SetOutputMinimum( desiredMinimum );<br>
&nbsp; fixedrescalefilter-&gt;SetOutputMaximum( desiredMaximum );<br>
&nbsp; fixedrescalefilter-&gt;UpdateLargestPossibleRegion();<br>
&nbsp; <br>
<br>
&nbsp; // Histogram match the images<br>
&nbsp; typedef
itk::HistogramMatchingImageFilter&lt;Image3DType,Image3DType&gt;
HEFilterType;<br>
&nbsp; HEFilterType::Pointer IntensityEqualizeFilter = HEFilterType::New();<br>
<br>
&nbsp; IntensityEqualizeFilter-&gt;SetReferenceImage(
fixedrescalefilter-&gt;GetOutput() );<br>
&nbsp; IntensityEqualizeFilter-&gt;SetInput(
movingrescalefilter-&gt;GetOutput() );<br>
&nbsp; IntensityEqualizeFilter-&gt;SetNumberOfHistogramLevels( 100);<br>
&nbsp; IntensityEqualizeFilter-&gt;SetNumberOfMatchPoints( 15);<br>
&nbsp; IntensityEqualizeFilter-&gt;ThresholdAtMeanIntensityOn();<br>
&nbsp; IntensityEqualizeFilter-&gt;Update();<br>
<br>
&nbsp;
registrationFilter-&gt;SetFixedImage(fixedrescalefilter-&gt;GetOutput());<br>
&nbsp;
registrationFilter-&gt;SetMovingImage(IntensityEqualizeFilter-&gt;GetOutput());<br>
<br>
<br>
&nbsp; itk::ImageFileWriter&lt;Image3DType&gt;::Pointer writer;<br>
&nbsp; writer = itk::ImageFileWriter&lt;Image3DType&gt;::New();<br>
&nbsp; std::string ofn="fixed.hdr";<br>
&nbsp; writer-&gt;SetFileName(ofn.c_str());<br>
&nbsp; writer-&gt;SetInput(registrationFilter-&gt;GetFixedImage() ); <br>
&nbsp; writer-&gt;Write();<br>
<br>
&nbsp; ofn="moving.hdr";<br>
&nbsp; itk::ImageFileWriter&lt;Image3DType&gt;::Pointer writer2;<br>
&nbsp; writer2 =&nbsp; itk::ImageFileWriter&lt;Image3DType&gt;::New();<br>
&nbsp; writer2-&gt;SetFileName(ofn.c_str());<br>
&nbsp; writer2-&gt;SetInput(registrationFilter-&gt;GetMovingImage() ); <br>
&nbsp; writer2-&gt;Write();<br>
&nbsp;<br>
<br>
<br>
<br>
//&nbsp; Software Guide : BeginLatex<br>
// <br>
//&nbsp; In order to initialize the mesh of elements, we must first create<br>
//&nbsp; ``dummy'' material and element objects and assign them to the<br>
//&nbsp; registration filter.&nbsp; These objects are subsequently used to<br>
//&nbsp; either read a predefined mesh from a file or generate a mesh using<br>
//&nbsp; the software.&nbsp; The values assigned to the fields within the<br>
//&nbsp; material object are arbitrary since they will be replaced with<br>
//&nbsp; those specified in the parameter file.&nbsp; Similarly, the element<br>
//&nbsp; object will be replaced with those from the desired mesh.<br>
// <br>
//&nbsp; Software Guide : EndLatex<br>
&nbsp; <br>
//&nbsp; Software Guide : BeginCodeSnippet<br>
&nbsp; // Create the material properties<br>
&nbsp; itk::fem::MaterialLinearElasticity::Pointer m;<br>
&nbsp; m = itk::fem::MaterialLinearElasticity::New();<br>
&nbsp; m-&gt;GN = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Global number of the material<br>
&nbsp; m-&gt;E = registrationFilter-&gt;GetElasticity();&nbsp; // Young's modulus
-- used in the membrane<br>
&nbsp; m-&gt;A = 1.0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Cross-sectional area<br>
&nbsp; m-&gt;h = 1.0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Thickness<br>
&nbsp; m-&gt;I = 1.0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Moment of inertia<br>
&nbsp; m-&gt;nu = 0.;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Poisson's ratio -- DONT CHOOSE 1.0!!<br>
&nbsp; m-&gt;RhoC = 1.0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Density<br>
&nbsp; <br>
&nbsp; // Create the element type <br>
&nbsp; Element3DType::Pointer e1=Element3DType::New();<br>
&nbsp; e1-&gt;m_mat=dynamic_cast&lt;itk::fem::MaterialLinearElasticity*&gt;(
m );<br>
&nbsp; registrationFilter-&gt;SetElement(e1);<br>
&nbsp; registrationFilter-&gt;SetMaterial(m);<br>
//&nbsp; Software Guide : EndCodeSnippet<br>
<br>
<br>
//&nbsp; Software Guide : BeginLatex<br>
//<br>
//&nbsp; Now we are ready to run the registration:<br>
//<br>
//&nbsp; Software Guide : EndLatex<br>
<br>
//&nbsp; Software Guide : BeginCodeSnippet<br>
&nbsp; registrationFilter-&gt;RunRegistration();<br>
//&nbsp; Software Guide : EndCodeSnippet<br>
<br>
<br>
//&nbsp; Software Guide : BeginLatex<br>
//<br>
//&nbsp; To output the image resulting from the registration, we can call<br>
//&nbsp; \code{WriteWarpedImage()}.&nbsp; The image is written in floating point<br>
//&nbsp; format.<br>
//<br>
//&nbsp; Software Guide : EndLatex<br>
<br>
//&nbsp; Software Guide : BeginCodeSnippet<br>
&nbsp; registrationFilter-&gt;WriteWarpedImage(<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (registrationFilter-&gt;GetResultsFileName()).c_str());<br>
//&nbsp; Software Guide : EndCodeSnippet<br>
<br>
//&nbsp; Software Guide : BeginLatex<br>
//<br>
//&nbsp; We can also output the displacement fields resulting from the<br>
//&nbsp; registration, we can call \code{WriteDisplacementField()} with the<br>
//&nbsp; desired vector component as an argument.&nbsp; For a $2D$ registration,<br>
//&nbsp; you would want to write out both the $x$ and $y$ displacements, and<br>
//&nbsp; this requires two calls to the aforementioned function.<br>
//<br>
//&nbsp; Software Guide : EndLatex<br>
<br>
//&nbsp; Software Guide : BeginCodeSnippet<br>
&nbsp; if (registrationFilter-&gt;GetWriteDisplacements()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; //registrationFilter-&gt;WriteDisplacementField(0);<br>
&nbsp;&nbsp;&nbsp; //registrationFilter-&gt;WriteDisplacementField(1);<br>
&nbsp;&nbsp;&nbsp; // If this were a 3D example, you might also want to call this line:<br>
&nbsp;&nbsp;&nbsp; // registrationFilter-&gt;WriteDisplacementField(2);<br>
<br>
&nbsp;&nbsp;&nbsp; // We can also write it as a multicomponent vector field<br>
&nbsp;&nbsp;&nbsp; registrationFilter-&gt;WriteDisplacementFieldMultiComponent();<br>
&nbsp;&nbsp;&nbsp; }<br>
//&nbsp; Software Guide : EndCodeSnippet<br>
<br>
&nbsp; //&nbsp; This is a documented sample parameter file that can be used with<br>
&nbsp; //&nbsp; this deformable registration example.<br>
&nbsp; //<br>
&nbsp; //&nbsp; ../Data/FiniteElementRegistrationParameters1.txt<br>
&nbsp; //<br>
<br>
&nbsp; return 0;<br>
}<br>
<br>
<br>
<br>
</font></font>
</body>
</html>