[ITK-users] ITK and VTK connection problem

Ashef Shahrior <[email protected]> Thu, 5 Jul 2018 19:52:02 +0600
Newsgroups gmane.comp.lib.itk.user
Message-ID <CAB8nWDw+sb+mv76GaV9EtqOHuptjHFM6kSyZ=Qq92DO5yL615Q@mail.gmail.com>
--===============0231704065==
Content-Type: multipart/alternative; boundary="000000000000ce574b057040dac0"

--000000000000ce574b057040dac0
Content-Type: text/plain; charset="UTF-8"

From ITK Software Guide Book, I am trying to do Region Growing - Connected
Threshold segmentation and show it using VTK. In the guide book, the
segmented image is written into another file. But I don't want to write it
but rather display it using VTK renderer. But it seems to be not working.
Can anyone see my code and help me out, please? Here's my code:

#include <iostream>
#include <string.h>
#include <windows.h>
#include <time.h>
#include <dos.h>

#include "itkConnectedThresholdImageFilter.h"

#include "itkImage.h"
#include "itkCastImageFilter.h"

#include "itkCurvatureFlowImageFilter.h"

#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"

#include "itkVTKImageExport.h"
#include "itkVTKImageImport.h"
#include "itkRGBPixel.h"

#include "vtkImageData.h"
#include "vtkImageImport.h"
#include "vtkImageExport.h"
#include "vtkImageActor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkInteractorStyleImage.h"

using namespace std;

template <typename ITK_Exporter, typename VTK_Importer> void
ConnectPipelines(ITK_Exporter exporter, VTK_Importer* importer)
{

importer->SetUpdateInformationCallback(exporter->GetUpdateInformationCallback());

importer->SetPipelineModifiedCallback(exporter->GetPipelineModifiedCallback());
    importer->SetWholeExtentCallback(exporter->GetWholeExtentCallback());
    importer->SetSpacingCallback(exporter->GetSpacingCallback());
    importer->SetOriginCallback(exporter->GetOriginCallback());
    importer->SetScalarTypeCallback(exporter->GetScalarTypeCallback());

importer->SetNumberOfComponentsCallback(exporter->GetNumberOfComponentsCallback());

importer->SetPropagateUpdateExtentCallback(exporter->GetPropagateUpdateExtentCallback());
    importer->SetUpdateDataCallback(exporter->GetUpdateDataCallback());
    importer->SetDataExtentCallback(exporter->GetDataExtentCallback());

importer->SetBufferPointerCallback(exporter->GetBufferPointerCallback());
    importer->SetCallbackUserData(exporter->GetCallbackUserData());
}

template <typename VTK_Exporter, typename ITK_Importer> void
ConnectPipelines(VTK_Exporter* exporter, ITK_Importer importer)
{

importer->SetUpdateInformationCallback(exporter->GetUpdateInformationCallback());

importer->SetPipelineModifiedCallback(exporter->GetPipelineModifiedCallback());
    importer->SetWholeExtentCallback(exporter->GetWholeExtentCallback());
    importer->SetSpacingCallback(exporter->GetSpacingCallback());
    importer->SetOriginCallback(exporter->GetOriginCallback());
    importer->SetScalarTypeCallback(exporter->GetScalarTypeCallback());

importer->SetNumberOfComponentsCallback(exporter->GetNumberOfComponentsCallback());

importer->SetPropagateUpdateExtentCallback(exporter->GetPropagateUpdateExtentCallback());
    importer->SetUpdateDataCallback(exporter->GetUpdateDataCallback());
    importer->SetDataExtentCallback(exporter->GetDataExtentCallback());

importer->SetBufferPointerCallback(exporter->GetBufferPointerCallback());
    importer->SetCallbackUserData(exporter->GetCallbackUserData());
}


void main()
{
    char inputImage[1000], seedx[10], seedy[10], lThreshold[100],
uThreshold[100];

    cout<< "Input values: "<<endl;
    cin >> inputImage;
    cin>>seedx;
    cin>>seedy;
    cin>>lThreshold;
    cin>>uThreshold;

    const     unsigned int    Dimension = 2;

    typedef   float           InternalPixelType;
    typedef itk::Image< InternalPixelType, Dimension >  InternalImageType;

    typedef unsigned char                            OutputPixelType;
    typedef itk::Image< OutputPixelType, Dimension > OutputImageType;

    typedef itk::CurvatureFlowImageFilter< InternalImageType,
InternalImageType > CurvatureFlowImageFilterType;

    CurvatureFlowImageFilterType::Pointer smoothing =
CurvatureFlowImageFilterType::New();

    typedef itk::ConnectedThresholdImageFilter< InternalImageType,
InternalImageType > ConnectedFilterType;

    ConnectedFilterType::Pointer connectedThreshold =
ConnectedFilterType::New();

    typedef itk::CastImageFilter< InternalImageType, OutputImageType >
CastingFilterType;

    CastingFilterType::Pointer caster = CastingFilterType::New();

    typedef  itk::ImageFileReader< InternalImageType > ReaderType;
    typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;

    ReaderType::Pointer reader = ReaderType::New();
    WriterType::Pointer writer = WriterType::New();

    reader->SetFileName( inputImage );
    reader->Update();
    //writer->SetFileName( outputImage );

    smoothing->SetInput( reader->GetOutput() );
    smoothing->SetNumberOfIterations( 5 );
    smoothing->SetTimeStep( 0.125 );

    //writer->SetInput( caster->GetOutput() );
    const InternalPixelType lowerThreshold = atof( lThreshold );
    const InternalPixelType upperThreshold = atof( uThreshold );

    connectedThreshold->SetInput( smoothing->GetOutput() );
    connectedThreshold->SetLower(  lowerThreshold  );
    connectedThreshold->SetUpper(  upperThreshold  );

    connectedThreshold->SetReplaceValue( 255 );

    InternalImageType::IndexType  index;

    index[0] = atoi( seedx );
    index[1] = atoi( seedy );

    connectedThreshold->SetSeed( index );
    connectedThreshold->Update();

    //caster->SetInput( connectedThreshold->GetOutput() );
caster->SetInput(connectedThreshold->GetOutput());

    typedef itk::VTKImageExport< InternalImageType > ExportFilterType; //
    ExportFilterType::Pointer itkExporter = ExportFilterType::New(); //

        //itkExporter->SetInput( caster->GetOutput() ); // this line gives
me error warning, so i did the following line
itkExporter->SetInput(connectedThreshold->GetOutput());



    vtkImageImport* vtkImporter = vtkImageImport::New();  //
    ConnectPipelines(itkExporter, vtkImporter);

    typedef itk::VTKImageImport< InternalImageType > ImportFilterType; //
    ImportFilterType::Pointer itkImporter = ImportFilterType::New(); //


    vtkImageExport* vtkExporter = vtkImageExport::New();
    ConnectPipelines(vtkExporter, itkImporter);

#if VTK_MAJOR_VERSION <= 5
    vtkExporter->SetInput( vtkImporter->GetOutput() );
#else
    vtkImporter->Update();
    vtkExporter->SetInputData( vtkImporter->GetOutput() );
#endif

    vtkImageActor* actor = vtkImageActor::New();
#if VTK_MAJOR_VERSION <= 5
    actor->SetInput(vtkImporter->GetOutput());
#else
    actor->SetInputData(vtkImporter->GetOutput());
#endif

    vtkInteractorStyleImage * interactorStyle =
vtkInteractorStyleImage::New();

    vtkRenderer* renderer = vtkRenderer::New();
    vtkRenderWindow* renWin = vtkRenderWindow::New();
    vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();

    renWin->SetSize(500, 500);
    renWin->AddRenderer(renderer);
    iren->SetRenderWindow(renWin);
    iren->SetInteractorStyle( interactorStyle );

    renderer->AddActor(actor);
    renderer->SetBackground(0.4392, 0.5020, 0.5647);

    renWin->Render();
    iren->Start();

    actor->Delete();
    interactorStyle->Delete();
    vtkImporter->Delete();
    vtkExporter->Delete();
    renWin->Delete();
    renderer->Delete();
    iren->Delete();
}

Thanks in advance.

--000000000000ce574b057040dac0
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">From ITK Software Guide Book, I am trying to do Region Gro=
wing - Connected Threshold segmentation and show it using VTK. In the guide=
 book, the segmented image is written into another file. But I don&#39;t wa=
nt to write it but rather display it using VTK renderer. But it seems to be=
 not working. Can anyone see my code and help me out,=C2=A0please? Here&#39=
;s my code:<div><br></div><div><div>#include &lt;iostream&gt;</div><div>#in=
clude &lt;string.h&gt;</div><div>#include &lt;windows.h&gt;</div><div>#incl=
ude &lt;time.h&gt;</div><div>#include &lt;dos.h&gt;</div><div><br></div><di=
v>#include &quot;itkConnectedThresholdImageFilter.h&quot;</div><div><br></d=
iv><div>#include &quot;itkImage.h&quot;</div><div>#include &quot;itkCastIma=
geFilter.h&quot;</div><div><br></div><div>#include &quot;itkCurvatureFlowIm=
ageFilter.h&quot;</div><div><br></div><div>#include &quot;itkImageFileReade=
r.h&quot;</div><div>#include &quot;itkImageFileWriter.h&quot;</div><div><br=
></div><div>#include &quot;itkVTKImageExport.h&quot;</div><div>#include &qu=
ot;itkVTKImageImport.h&quot;</div><div>#include &quot;itkRGBPixel.h&quot;</=
div><div><br></div><div>#include &quot;vtkImageData.h&quot;</div><div>#incl=
ude &quot;vtkImageImport.h&quot;</div><div>#include &quot;vtkImageExport.h&=
quot;</div><div>#include &quot;vtkImageActor.h&quot;</div><div>#include &qu=
ot;vtkRenderer.h&quot;</div><div>#include &quot;vtkRenderWindow.h&quot;</di=
v><div>#include &quot;vtkRenderWindowInteractor.h&quot;</div><div>#include =
&quot;vtkInteractorStyleImage.h&quot;</div><div><br></div><div>using namesp=
ace std;</div><div><br></div><div>template &lt;typename ITK_Exporter, typen=
ame VTK_Importer&gt; void ConnectPipelines(ITK_Exporter exporter, VTK_Impor=
ter* importer)</div><div>{</div><div>=C2=A0 =C2=A0 importer-&gt;SetUpdateIn=
formationCallback(exporter-&gt;GetUpdateInformationCallback());</div><div>=
=C2=A0 =C2=A0 importer-&gt;SetPipelineModifiedCallback(exporter-&gt;GetPipe=
lineModifiedCallback());</div><div>=C2=A0 =C2=A0 importer-&gt;SetWholeExten=
tCallback(exporter-&gt;GetWholeExtentCallback());</div><div>=C2=A0 =C2=A0 i=
mporter-&gt;SetSpacingCallback(exporter-&gt;GetSpacingCallback());</div><di=
v>=C2=A0 =C2=A0 importer-&gt;SetOriginCallback(exporter-&gt;GetOriginCallba=
ck());</div><div>=C2=A0 =C2=A0 importer-&gt;SetScalarTypeCallback(exporter-=
&gt;GetScalarTypeCallback());</div><div>=C2=A0 =C2=A0 importer-&gt;SetNumbe=
rOfComponentsCallback(exporter-&gt;GetNumberOfComponentsCallback());</div><=
div>=C2=A0 =C2=A0 importer-&gt;SetPropagateUpdateExtentCallback(exporter-&g=
t;GetPropagateUpdateExtentCallback());</div><div>=C2=A0 =C2=A0 importer-&gt=
;SetUpdateDataCallback(exporter-&gt;GetUpdateDataCallback());</div><div>=C2=
=A0 =C2=A0 importer-&gt;SetDataExtentCallback(exporter-&gt;GetDataExtentCal=
lback());</div><div>=C2=A0 =C2=A0 importer-&gt;SetBufferPointerCallback(exp=
orter-&gt;GetBufferPointerCallback());</div><div>=C2=A0 =C2=A0 importer-&gt=
;SetCallbackUserData(exporter-&gt;GetCallbackUserData());</div><div>}</div>=
<div><br></div><div>template &lt;typename VTK_Exporter, typename ITK_Import=
er&gt; void ConnectPipelines(VTK_Exporter* exporter, ITK_Importer importer)=
</div><div>{</div><div>=C2=A0 =C2=A0 importer-&gt;SetUpdateInformationCallb=
ack(exporter-&gt;GetUpdateInformationCallback());</div><div>=C2=A0 =C2=A0 i=
mporter-&gt;SetPipelineModifiedCallback(exporter-&gt;GetPipelineModifiedCal=
lback());</div><div>=C2=A0 =C2=A0 importer-&gt;SetWholeExtentCallback(expor=
ter-&gt;GetWholeExtentCallback());</div><div>=C2=A0 =C2=A0 importer-&gt;Set=
SpacingCallback(exporter-&gt;GetSpacingCallback());</div><div>=C2=A0 =C2=A0=
 importer-&gt;SetOriginCallback(exporter-&gt;GetOriginCallback());</div><di=
v>=C2=A0 =C2=A0 importer-&gt;SetScalarTypeCallback(exporter-&gt;GetScalarTy=
peCallback());</div><div>=C2=A0 =C2=A0 importer-&gt;SetNumberOfComponentsCa=
llback(exporter-&gt;GetNumberOfComponentsCallback());</div><div>=C2=A0 =C2=
=A0 importer-&gt;SetPropagateUpdateExtentCallback(exporter-&gt;GetPropagate=
UpdateExtentCallback());</div><div>=C2=A0 =C2=A0 importer-&gt;SetUpdateData=
Callback(exporter-&gt;GetUpdateDataCallback());</div><div>=C2=A0 =C2=A0 imp=
orter-&gt;SetDataExtentCallback(exporter-&gt;GetDataExtentCallback());</div=
><div>=C2=A0 =C2=A0 importer-&gt;SetBufferPointerCallback(exporter-&gt;GetB=
ufferPointerCallback());</div><div>=C2=A0 =C2=A0 importer-&gt;SetCallbackUs=
erData(exporter-&gt;GetCallbackUserData());</div><div>}</div><div><br></div=
><div><br></div><div>void main()</div><div>{</div><div>=C2=A0 =C2=A0 char i=
nputImage[1000], seedx[10], seedy[10], lThreshold[100], uThreshold[100];</d=
iv><div><br></div><div>=C2=A0 =C2=A0 cout&lt;&lt; &quot;Input values: &quot=
;&lt;&lt;endl;</div><div>=C2=A0 =C2=A0 cin &gt;&gt; inputImage;</div><div>=
=C2=A0 =C2=A0 cin&gt;&gt;seedx;</div><div>=C2=A0 =C2=A0 cin&gt;&gt;seedy;</=
div><div>=C2=A0 =C2=A0 cin&gt;&gt;lThreshold;</div><div>=C2=A0 =C2=A0 cin&g=
t;&gt;uThreshold;</div><div><br></div><div>=C2=A0 =C2=A0 const=C2=A0 =C2=A0=
 =C2=A0unsigned int=C2=A0 =C2=A0 Dimension =3D 2;</div><div><br></div><div>=
=C2=A0 =C2=A0 typedef=C2=A0 =C2=A0float=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0InternalPixelType;</div><div>=C2=A0 =C2=A0 typedef itk::Image&lt; Int=
ernalPixelType, Dimension &gt;=C2=A0 InternalImageType;</div><div><br></div=
><div>=C2=A0 =C2=A0 typedef unsigned char=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 OutputPixel=
Type;</div><div>=C2=A0 =C2=A0 typedef itk::Image&lt; OutputPixelType, Dimen=
sion &gt; OutputImageType;</div><div><br></div><div>=C2=A0 =C2=A0 typedef i=
tk::CurvatureFlowImageFilter&lt; InternalImageType, InternalImageType &gt; =
CurvatureFlowImageFilterType;</div><div><br></div><div>=C2=A0 =C2=A0 Curvat=
ureFlowImageFilterType::Pointer smoothing =3D CurvatureFlowImageFilterType:=
:New();</div><div><br></div><div>=C2=A0 =C2=A0 typedef itk::ConnectedThresh=
oldImageFilter&lt; InternalImageType, InternalImageType &gt; ConnectedFilte=
rType;</div><div><br></div><div>=C2=A0 =C2=A0 ConnectedFilterType::Pointer =
connectedThreshold =3D ConnectedFilterType::New();</div><div><br></div><div=
>=C2=A0 =C2=A0 typedef itk::CastImageFilter&lt; InternalImageType, OutputIm=
ageType &gt; CastingFilterType;</div><div><br></div><div>=C2=A0 =C2=A0 Cast=
ingFilterType::Pointer caster =3D CastingFilterType::New();</div><div><br><=
/div><div>=C2=A0 =C2=A0 typedef=C2=A0 itk::ImageFileReader&lt; InternalImag=
eType &gt; ReaderType;</div><div>=C2=A0 =C2=A0 typedef=C2=A0 itk::ImageFile=
Writer&lt;=C2=A0 OutputImageType=C2=A0 &gt; WriterType;</div><div><br></div=
><div>=C2=A0 =C2=A0 ReaderType::Pointer reader =3D ReaderType::New();</div>=
<div>=C2=A0 =C2=A0 WriterType::Pointer writer =3D WriterType::New();</div><=
div><br></div><div>=C2=A0 =C2=A0 reader-&gt;SetFileName( inputImage );</div=
><div>=C2=A0 =C2=A0 reader-&gt;Update();</div><div>=C2=A0 =C2=A0 //writer-&=
gt;SetFileName( outputImage );</div><div><br></div><div>=C2=A0 =C2=A0 smoot=
hing-&gt;SetInput( reader-&gt;GetOutput() );</div><div>=C2=A0 =C2=A0 smooth=
ing-&gt;SetNumberOfIterations( 5 );</div><div>=C2=A0 =C2=A0 smoothing-&gt;S=
etTimeStep( 0.125 );</div><div><br></div><div>=C2=A0 =C2=A0 //writer-&gt;Se=
tInput( caster-&gt;GetOutput() );</div><div>=C2=A0 =C2=A0 const InternalPix=
elType lowerThreshold =3D atof( lThreshold );</div><div>=C2=A0 =C2=A0 const=
 InternalPixelType upperThreshold =3D atof( uThreshold );</div><div><br></d=
iv><div>=C2=A0 =C2=A0 connectedThreshold-&gt;SetInput( smoothing-&gt;GetOut=
put() );</div><div>=C2=A0 =C2=A0 connectedThreshold-&gt;SetLower(=C2=A0 low=
erThreshold=C2=A0 );</div><div>=C2=A0 =C2=A0 connectedThreshold-&gt;SetUppe=
r(=C2=A0 upperThreshold=C2=A0 );</div><div><br></div><div>=C2=A0 =C2=A0 con=
nectedThreshold-&gt;SetReplaceValue( 255 );</div><div><br></div><div>=C2=A0=
 =C2=A0 InternalImageType::IndexType=C2=A0 index;</div><div><br></div><div>=
=C2=A0 =C2=A0 index[0] =3D atoi( seedx );</div><div>=C2=A0 =C2=A0 index[1] =
=3D atoi( seedy );</div><div><br></div><div>=C2=A0 =C2=A0 connectedThreshol=
d-&gt;SetSeed( index );</div><div>=C2=A0 =C2=A0 connectedThreshold-&gt;Upda=
te();</div><div><br></div><div>=C2=A0 =C2=A0 //caster-&gt;SetInput( connect=
edThreshold-&gt;GetOutput() );</div><div><span style=3D"white-space:pre">	<=
/span>caster-&gt;SetInput(connectedThreshold-&gt;GetOutput());</div><div><b=
r></div><div>=C2=A0 =C2=A0 typedef itk::VTKImageExport&lt; InternalImageTyp=
e &gt; ExportFilterType; //</div><div>=C2=A0 =C2=A0 ExportFilterType::Point=
er itkExporter =3D ExportFilterType::New(); //</div><div><br></div><div>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 //itkExporter-&gt;SetInput( caster-&gt;GetOutput()=
 ); // this line gives me error warning, so i did the following line</div><=
div><span style=3D"white-space:pre">	</span>itkExporter-&gt;SetInput(connec=
tedThreshold-&gt;GetOutput());</div><div><br></div><div><br></div><div><br>=
</div><div>=C2=A0 =C2=A0 vtkImageImport* vtkImporter =3D vtkImageImport::Ne=
w();=C2=A0 //</div><div>=C2=A0 =C2=A0 ConnectPipelines(itkExporter, vtkImpo=
rter);</div><div><br></div><div>=C2=A0 =C2=A0 typedef itk::VTKImageImport&l=
t; InternalImageType &gt; ImportFilterType; //</div><div>=C2=A0 =C2=A0 Impo=
rtFilterType::Pointer itkImporter =3D ImportFilterType::New(); //</div><div=
><br></div><div><br></div><div>=C2=A0 =C2=A0 vtkImageExport* vtkExporter =
=3D vtkImageExport::New();</div><div>=C2=A0 =C2=A0 ConnectPipelines(vtkExpo=
rter, itkImporter);</div><div><br></div><div>#if VTK_MAJOR_VERSION &lt;=3D =
5</div><div>=C2=A0 =C2=A0 vtkExporter-&gt;SetInput( vtkImporter-&gt;GetOutp=
ut() );</div><div>#else</div><div>=C2=A0 =C2=A0 vtkImporter-&gt;Update();</=
div><div>=C2=A0 =C2=A0 vtkExporter-&gt;SetInputData( vtkImporter-&gt;GetOut=
put() );</div><div>#endif</div><div><br></div><div>=C2=A0 =C2=A0 vtkImageAc=
tor* actor =3D vtkImageActor::New();</div><div>#if VTK_MAJOR_VERSION &lt;=
=3D 5</div><div>=C2=A0 =C2=A0 actor-&gt;SetInput(vtkImporter-&gt;GetOutput(=
));</div><div>#else</div><div>=C2=A0 =C2=A0 actor-&gt;SetInputData(vtkImpor=
ter-&gt;GetOutput());</div><div>#endif</div><div><br></div><div>=C2=A0 =C2=
=A0 vtkInteractorStyleImage * interactorStyle =3D vtkInteractorStyleImage::=
New();</div><div><br></div><div>=C2=A0 =C2=A0 vtkRenderer* renderer =3D vtk=
Renderer::New();</div><div>=C2=A0 =C2=A0 vtkRenderWindow* renWin =3D vtkRen=
derWindow::New();</div><div>=C2=A0 =C2=A0 vtkRenderWindowInteractor* iren =
=3D vtkRenderWindowInteractor::New();</div><div><br></div><div>=C2=A0 =C2=
=A0 renWin-&gt;SetSize(500, 500);</div><div>=C2=A0 =C2=A0 renWin-&gt;AddRen=
derer(renderer);</div><div>=C2=A0 =C2=A0 iren-&gt;SetRenderWindow(renWin);<=
/div><div>=C2=A0 =C2=A0 iren-&gt;SetInteractorStyle( interactorStyle );</di=
v><div><br></div><div>=C2=A0 =C2=A0 renderer-&gt;AddActor(actor);</div><div=
>=C2=A0 =C2=A0 renderer-&gt;SetBackground(0.4392, 0.5020, 0.5647);</div><di=
v><br></div><div>=C2=A0 =C2=A0 renWin-&gt;Render();</div><div>=C2=A0 =C2=A0=
 iren-&gt;Start();</div><div><br></div><div>=C2=A0 =C2=A0 actor-&gt;Delete(=
);</div><div>=C2=A0 =C2=A0 interactorStyle-&gt;Delete();</div><div>=C2=A0 =
=C2=A0 vtkImporter-&gt;Delete();</div><div>=C2=A0 =C2=A0 vtkExporter-&gt;De=
lete();</div><div>=C2=A0 =C2=A0 renWin-&gt;Delete();</div><div>=C2=A0 =C2=
=A0 renderer-&gt;Delete();</div><div>=C2=A0 =C2=A0 iren-&gt;Delete();</div>=
<div>}</div></div><div><br></div><div>Thanks in advance.</div></div>

--000000000000ce574b057040dac0--

--===============0231704065==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/listinfo/insight-users

--===============0231704065==--