<br><br><div class="gmail_quote">On Mon, Mar 1, 2010 at 4:34 PM, Luis Ibanez <span dir="ltr"><<a href="mailto:luis.ibanez@kitware.com">luis.ibanez@kitware.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Hi Richard,<br>
<br>
Thanks for letting us know what was wrong.<br>
<br>
--<br>
<br>
In general, you may find useful the "ReferenceImage"<br>
functionality of the ResampleImageFitler.<br>
<br></blockquote><div></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
It takes care of using the Origin, Spacing, Direction<br>
and number of pixels from a given image, instead<br>
of you having to specify all of them one by one.<br>
<br>
Providing a reference image is typically what you<br>
want to use after an image registration process.<br>
<br></blockquote><div><br><br>Oh, this is interesting. Something like the following is common practice:<br><br><span style="font-family: courier new,monospace;"> typedef itk::ResampleImageFilter< iImgType, oImgType > ResampleFilterType;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> ResampleFilterType::Pointer Resampler = ResampleFilterType::New();</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> Resampler->SetTransform( transform );</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> Resampler->SetInterpolator( interpolator );</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> Resampler->SetInput( MovReader->GetOutput() );</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> Resampler->SetSize( FixInfo.size ); // assume this struct works</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> Resampler->SetOutputOrigin( FixReader->GetOutputOrigin() );</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> Resampler->SetOutputSpacing( FixReader->GetOutputSpacing() );</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> Resampler->SetOutputDirection( FixReader->GetOutputDirection() );</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> Resampler->SetDefaultPixelValue( 100 ); // highlight outside regions</span><br style="font-family: courier new,monospace;"><br>So that could be replaced with (?):<br>
<br><span style="font-family: courier new,monospace;"> typedef
itk::ResampleImageFilter< iImgType, oImgType > ResampleFilterType;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">
ResampleFilterType::Pointer Resampler = ResampleFilterType::New();</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">
Resampler->SetTransform( transform );</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">
Resampler->SetInterpolator( interpolator );</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">
Resampler->SetInput( MovReader->GetOutput() );</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;"> Resampler->SetUseReferenceImage( true );</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> Resampler->SetReferenceImage( FixReader->GetOutput() );</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;">
Resampler->SetDefaultPixelValue( 100 ); // highlight outside regions</span><br style="font-family: courier new,monospace;">
<br><span style="font-family: courier new,monospace;"></span><br>Is that right? This would resample the moving image from MovReader into the fixed image (based on size, origin, spacing, direction from the FixReader reference).<br>
<br>TIA,<br>Darren<br><br><br><br><br><br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
Regards,<br>
<br>
<br>
Luis<br>
<br>
<br>
-----------------------------------------------------------------<br>
<div><div></div><div class="h5">On Sun, Feb 28, 2010 at 7:10 PM, Richard Beare <<a href="mailto:richard.beare@gmail.com">richard.beare@gmail.com</a>> wrote:<br>
> Hi,<br>
><br>
> I discovered what was missing:<br>
><br>
> resampler->SetOutputStartIndex ( input->GetLargestPossibleRegion().GetIndex() );<br>
><br>
><br>
><br>
> On Fri, Feb 19, 2010 at 10:33 AM, Richard Beare <<a href="mailto:richard.beare@gmail.com">richard.beare@gmail.com</a>> wrote:<br>
>> OK,<br>
>> Here's a series of resampling tests:<br>
>> Test 1 produces the expected result, but tests 2 and 3 produce blank images.<br>
>><br>
>> Test 1) Upsampling the original image:<br>
>><br>
>><br>
>> Input image:<br>
>><br>
>> Image (0x2f72570)<br>
>> RTTI typeinfo: itk::Image<short, 3u><br>
>> Reference Count: 3<br>
>> Modified Time: 189<br>
>> Debug: Off<br>
>> Observers:<br>
>> none<br>
>> Source: (none)<br>
>> Source output index: 0<br>
>> Release Data: Off<br>
>> Data Released: False<br>
>> Global Release Data: Off<br>
>> PipelineMTime: 0<br>
>> UpdateMTime: 182<br>
>> LargestPossibleRegion:<br>
>> Dimension: 3<br>
>> Index: [0, 0, 0]<br>
>> Size: [256, 176, 20]<br>
>> BufferedRegion:<br>
>> Dimension: 3<br>
>> Index: [0, 0, 0]<br>
>> Size: [256, 176, 20]<br>
>> RequestedRegion:<br>
>> Dimension: 3<br>
>> Index: [0, 0, 0]<br>
>> Size: [256, 176, 20]<br>
>> Spacing: [1.25, 1.25, 6]<br>
>> Origin: [-165.833, 127.35, 80.3368]<br>
>> Direction:<br>
>> 0.989374 0 0.145394<br>
>> 0.026043 -0.983827 -0.177216<br>
>> -0.143043 -0.17912 0.973373<br>
>><br>
>> IndexToPointMatrix:<br>
>> 1.23672 0 0.872366<br>
>> 0.0325538 -1.22978 -1.0633<br>
>> -0.178804 -0.2239 5.84024<br>
>><br>
>> PointToIndexMatrix:<br>
>> 0.791499 0.0208344 -0.114434<br>
>> 1.17893e-08 -0.787062 -0.143296<br>
>> 0.0242324 -0.0295361 0.162229<br>
>><br>
>> PixelContainer:<br>
>> ImportImageContainer (0x2f731b0)<br>
>> RTTI typeinfo: itk::ImportImageContainer<unsigned long, short><br>
>> Reference Count: 1<br>
>> Modified Time: 179<br>
>> Debug: Off<br>
>> Observers:<br>
>> none<br>
>> Pointer: 0x3800000<br>
>> Container manages memory: true<br>
>> Size: 901120<br>
>> Capacity: 901120<br>
>><br>
>> Output Image:<br>
>><br>
>> Image (0x2f74750)<br>
>> RTTI typeinfo: itk::Image<short, 3u><br>
>> Reference Count: 2<br>
>> Modified Time: 245<br>
>> Debug: Off<br>
>> Observers:<br>
>> none<br>
>> Source: (none)<br>
>> Source output index: 0<br>
>> Release Data: Off<br>
>> Data Released: False<br>
>> Global Release Data: Off<br>
>> PipelineMTime: 0<br>
>> UpdateMTime: 238<br>
>> LargestPossibleRegion:<br>
>> Dimension: 3<br>
>> Index: [0, 0, 0]<br>
>> Size: [256, 176, 40]<br>
>> BufferedRegion:<br>
>> Dimension: 3<br>
>> Index: [0, 0, 0]<br>
>> Size: [256, 176, 40]<br>
>> RequestedRegion:<br>
>> Dimension: 3<br>
>> Index: [0, 0, 0]<br>
>> Size: [256, 176, 40]<br>
>> Spacing: [1.25, 1.25, 3]<br>
>> Origin: [-165.833, 127.35, 80.3368]<br>
>> Direction:<br>
>> 0.989374 0 0.145394<br>
>> 0.026043 -0.983827 -0.177216<br>
>> -0.143043 -0.17912 0.973373<br>
>><br>
>> IndexToPointMatrix:<br>
>> 1.23672 0 0.436183<br>
>> 0.0325538 -1.22978 -0.531649<br>
>> -0.178804 -0.2239 2.92012<br>
>><br>
>> PointToIndexMatrix:<br>
>> 0.791499 0.0208344 -0.114434<br>
>> 1.17893e-08 -0.787062 -0.143296<br>
>> 0.0484648 -0.0590721 0.324458<br>
>><br>
>> PixelContainer:<br>
>> ImportImageContainer (0x2f74290)<br>
>> RTTI typeinfo: itk::ImportImageContainer<unsigned long, short><br>
>> Reference Count: 1<br>
>> Modified Time: 236<br>
>> Debug: Off<br>
>> Observers:<br>
>> none<br>
>> Pointer: 0x39b8000<br>
>> Container manages memory: true<br>
>> Size: 1802240<br>
>> Capacity: 1802240<br>
>><br>
>><br>
>> Test 2) Upsampling of the extracted image<br>
>><br>
>> Input Image:Image (0x2f75540)<br>
>> RTTI typeinfo: itk::Image<short, 3u><br>
>> Reference Count: 2<br>
>> Modified Time: 220<br>
>> Debug: Off<br>
>> Observers:<br>
>> none<br>
>> Source: (none)<br>
>> Source output index: 0<br>
>> Release Data: Off<br>
>> Data Released: False<br>
>> Global Release Data: Off<br>
>> PipelineMTime: 0<br>
>> UpdateMTime: 213<br>
>> LargestPossibleRegion:<br>
>> Dimension: 3<br>
>> Index: [112, 93, 0]<br>
>> Size: [40, 40, 20]<br>
>> BufferedRegion:<br>
>> Dimension: 3<br>
>> Index: [112, 93, 0]<br>
>> Size: [40, 40, 20]<br>
>> RequestedRegion:<br>
>> Dimension: 3<br>
>> Index: [112, 93, 0]<br>
>> Size: [40, 40, 20]<br>
>> Spacing: [1.25, 1.25, 6]<br>
>> Origin: [-165.833, 127.35, 80.3368]<br>
>> Direction:<br>
>> 0.989374 0 0.145394<br>
>> 0.026043 -0.983827 -0.177216<br>
>> -0.143043 -0.17912 0.973373<br>
>><br>
>> IndexToPointMatrix:<br>
>> 1.23672 0 0.872366<br>
>> 0.0325538 -1.22978 -1.0633<br>
>> -0.178804 -0.2239 5.84024<br>
>><br>
>> PointToIndexMatrix:<br>
>> 0.791499 0.0208344 -0.114434<br>
>> 1.17893e-08 -0.787062 -0.143296<br>
>> 0.0242324 -0.0295361 0.162229<br>
>><br>
>> PixelContainer:<br>
>> ImportImageContainer (0x2f74330)<br>
>> RTTI typeinfo: itk::ImportImageContainer<unsigned long, short><br>
>> Reference Count: 1<br>
>> Modified Time: 211<br>
>> Debug: Off<br>
>> Observers:<br>
>> none<br>
>> Pointer: 0x2eaf000<br>
>> Container manages memory: true<br>
>> Size: 32000<br>
>> Capacity: 32000<br>
>><br>
>> Output Image:<br>
>><br>
>> Image (0x2f74890)<br>
>> RTTI typeinfo: itk::Image<short, 3u><br>
>> Reference Count: 2<br>
>> Modified Time: 264<br>
>> Debug: Off<br>
>> Observers:<br>
>> none<br>
>> Source: (none)<br>
>> Source output index: 0<br>
>> Release Data: Off<br>
>> Data Released: False<br>
>> Global Release Data: Off<br>
>> PipelineMTime: 0<br>
>> UpdateMTime: 255<br>
>> LargestPossibleRegion:<br>
>> Dimension: 3<br>
>> Index: [0, 0, 0]<br>
>> Size: [40, 40, 40]<br>
>> BufferedRegion:<br>
>> Dimension: 3<br>
>> Index: [0, 0, 0]<br>
>> Size: [40, 40, 40]<br>
>> RequestedRegion:<br>
>> Dimension: 3<br>
>> Index: [0, 0, 0]<br>
>> Size: [40, 40, 40]<br>
>> Spacing: [1.25, 1.25, 3]<br>
>> Origin: [-165.833, 127.35, 80.3368]<br>
>> Direction:<br>
>> 0.989374 0 0.145394<br>
>> 0.026043 -0.983827 -0.177216<br>
>> -0.143043 -0.17912 0.973373<br>
>><br>
>> IndexToPointMatrix:<br>
>> 1.23672 0 0.436183<br>
>> 0.0325538 -1.22978 -0.531649<br>
>> -0.178804 -0.2239 2.92012<br>
>><br>
>> PointToIndexMatrix:<br>
>> 0.791499 0.0208344 -0.114434<br>
>> 1.17893e-08 -0.787062 -0.143296<br>
>> 0.0484648 -0.0590721 0.324458<br>
>><br>
>> PixelContainer:<br>
>> ImportImageContainer (0x2f74a60)<br>
>> RTTI typeinfo: itk::ImportImageContainer<unsigned long, short><br>
>> Reference Count: 1<br>
>> Modified Time: 253<br>
>> Debug: Off<br>
>> Observers:<br>
>> none<br>
>> Pointer: 0x2ebf000<br>
>> Container manages memory: true<br>
>> Size: 64000<br>
>> Capacity: 64000<br>
>><br>
>> Test 3) Feed extracted image through the same steps but leave spacing the same<br>
>><br>
>> Image (0x2f75540)<br>
>> RTTI typeinfo: itk::Image<short, 3u><br>
>> Reference Count: 2<br>
>> Modified Time: 220<br>
>> Debug: Off<br>
>> Observers:<br>
>> none<br>
>> Source: (none)<br>
>> Source output index: 0<br>
>> Release Data: Off<br>
>> Data Released: False<br>
>> Global Release Data: Off<br>
>> PipelineMTime: 0<br>
>> UpdateMTime: 213<br>
>> LargestPossibleRegion:<br>
>> Dimension: 3<br>
>> Index: [112, 93, 0]<br>
>> Size: [40, 40, 20]<br>
>> BufferedRegion:<br>
>> Dimension: 3<br>
>> Index: [112, 93, 0]<br>
>> Size: [40, 40, 20]<br>
>> RequestedRegion:<br>
>> Dimension: 3<br>
>> Index: [112, 93, 0]<br>
>> Size: [40, 40, 20]<br>
>> Spacing: [1.25, 1.25, 6]<br>
>> Origin: [-165.833, 127.35, 80.3368]<br>
>> Direction:<br>
>> 0.989374 0 0.145394<br>
>> 0.026043 -0.983827 -0.177216<br>
>> -0.143043 -0.17912 0.973373<br>
>><br>
>> IndexToPointMatrix:<br>
>> 1.23672 0 0.872366<br>
>> 0.0325538 -1.22978 -1.0633<br>
>> -0.178804 -0.2239 5.84024<br>
>><br>
>> PointToIndexMatrix:<br>
>> 0.791499 0.0208344 -0.114434<br>
>> 1.17893e-08 -0.787062 -0.143296<br>
>> 0.0242324 -0.0295361 0.162229<br>
>><br>
>> PixelContainer:<br>
>> ImportImageContainer (0x2f74330)<br>
>> RTTI typeinfo: itk::ImportImageContainer<unsigned long, short><br>
>> Reference Count: 1<br>
>> Modified Time: 211<br>
>> Debug: Off<br>
>> Observers:<br>
>> none<br>
>> Pointer: 0x2eaf000<br>
>> Container manages memory: true<br>
>> Size: 32000<br>
>> Capacity: 32000<br>
>><br>
>> Image (0x2f74890)<br>
>> RTTI typeinfo: itk::Image<short, 3u><br>
>> Reference Count: 2<br>
>> Modified Time: 262<br>
>> Debug: Off<br>
>> Observers:<br>
>> none<br>
>> Source: (none)<br>
>> Source output index: 0<br>
>> Release Data: Off<br>
>> Data Released: False<br>
>> Global Release Data: Off<br>
>> PipelineMTime: 0<br>
>> UpdateMTime: 253<br>
>> LargestPossibleRegion:<br>
>> Dimension: 3<br>
>> Index: [0, 0, 0]<br>
>> Size: [40, 40, 20]<br>
>> BufferedRegion:<br>
>> Dimension: 3<br>
>> Index: [0, 0, 0]<br>
>> Size: [40, 40, 20]<br>
>> RequestedRegion:<br>
>> Dimension: 3<br>
>> Index: [0, 0, 0]<br>
>> Size: [40, 40, 20]<br>
>> Spacing: [1.25, 1.25, 6]<br>
>> Origin: [-165.833, 127.35, 80.3368]<br>
>> Direction:<br>
>> 0.989374 0 0.145394<br>
>> 0.026043 -0.983827 -0.177216<br>
>> -0.143043 -0.17912 0.973373<br>
>><br>
>> IndexToPointMatrix:<br>
>> 1.23672 0 0.872366<br>
>> 0.0325538 -1.22978 -1.0633<br>
>> -0.178804 -0.2239 5.84024<br>
>><br>
>> PointToIndexMatrix:<br>
>> 0.791499 0.0208344 -0.114434<br>
>> 1.17893e-08 -0.787062 -0.143296<br>
>> 0.0242324 -0.0295361 0.162229<br>
>><br>
>> PixelContainer:<br>
>> ImportImageContainer (0x2f74a60)<br>
>> RTTI typeinfo: itk::ImportImageContainer<unsigned long, short><br>
>> Reference Count: 1<br>
>> Modified Time: 251<br>
>> Debug: Off<br>
>> Observers:<br>
>> none<br>
>> Pointer: 0x2ebf000<br>
>> Container manages memory: true<br>
>> Size: 32000<br>
>> Capacity: 32000<br>
>><br>
>><br>
>> On Wed, Feb 17, 2010 at 2:04 AM, Luis Ibanez <<a href="mailto:luis.ibanez@kitware.com">luis.ibanez@kitware.com</a>> wrote:<br>
>>> Hi Richard,<br>
>>><br>
>>> If you set<br>
>>><br>
>>> NewSpacing = inputSpacing,<br>
>>><br>
>>> Do you get as output an image<br>
>>> that looks like the input image ?<br>
>>><br>
>>><br>
>>> What are the values of<br>
>>><br>
>>> * inputSpacing ?<br>
>>> * inputSize ?<br>
>>> * inputOrigin ?<br>
>>> * inputDirection ?<br>
>>><br>
>>><br>
>>> Please let us know,<br>
>>><br>
>>><br>
>>> Thanks<br>
>>><br>
>>><br>
>>> Luis<br>
>>><br>
>>><br>
>>> ------------------------------------------<br>
>>> On Tue, Feb 16, 2010 at 1:21 AM, Richard Beare <<a href="mailto:richard.beare@gmail.com">richard.beare@gmail.com</a>> wrote:<br>
>>>> Hi,<br>
>>>> I'm using an obviously buggy resampling procedure to upsample a small<br>
>>>> image that has been extracted from a larger one, and hence has non<br>
>>>> zero origin information. My result is blank, so I'm missing a setting<br>
>>>> somewhere, but don't have a clue as to what. Can anyone spot the<br>
>>>> problem?<br>
>>>><br>
>>>> template <class RawIm><br>
>>>> typename RawIm::Pointer upsampleIm(typename RawIm::Pointer input,<br>
>>>> typename RawIm::SpacingType NewSpacing, int interp=1)<br>
>>>> {<br>
>>>> const int dim = RawIm::ImageDimension;<br>
>>>> typedef typename RawIm::PixelType PixelType;<br>
>>>><br>
>>>> typedef typename itk::ResampleImageFilter<RawIm, RawIm > ResampleFilterType;<br>
>>>> typedef typename itk::IdentityTransform< double, dim > TransformType;<br>
>>>> typename ResampleFilterType::Pointer resampler = ResampleFilterType::New();<br>
>>>><br>
>>>> input->Update();<br>
>>>><br>
>>>> typename TransformType::Pointer transform = TransformType::New();<br>
>>>> transform->SetIdentity();<br>
>>>> resampler->SetTransform( transform );<br>
>>>> typedef typename itk::LinearInterpolateImageFunction<RawIm, double ><br>
>>>> LInterpolatorType;<br>
>>>> typedef typename itk::NearestNeighborInterpolateImageFunction<RawIm,<br>
>>>> double > NNInterpolatorType;<br>
>>>><br>
>>>> typename ResampleFilterType::InterpolatorPointerType interpolator;<br>
>>>> switch (interp)<br>
>>>> {<br>
>>>> case 0:<br>
>>>> interpolator = NNInterpolatorType::New();<br>
>>>> break;<br>
>>>> case 1:<br>
>>>> interpolator = LInterpolatorType::New();<br>
>>>> break;<br>
>>>> default:<br>
>>>> std::cout << "Unsupported interpolator" << std::endl;<br>
>>>> }<br>
>>>><br>
>>>> resampler->SetInterpolator( interpolator );<br>
>>>> resampler->SetDefaultPixelValue( 0 );<br>
>>>><br>
>>>> const typename RawIm::SpacingType& inputSpacing = input->GetSpacing();<br>
>>>> typename RawIm::SpacingType spacing;<br>
>>>> typename RawIm::SizeType inputSize =<br>
>>>> input->GetLargestPossibleRegion().GetSize();<br>
>>>> typename RawIm::SizeType size;<br>
>>>> typedef typename RawIm::SizeType::SizeValueType SizeValueType;<br>
>>>><br>
>>>><br>
>>>> for (int i = 0; i < dim; i++)<br>
>>>> {<br>
>>>> float factor = inputSpacing[i]/NewSpacing[i];<br>
>>>> size[i] = static_cast< SizeValueType >( inputSize[i] * factor );<br>
>>>> }<br>
>>>> std::cout << inputSpacing << NewSpacing << std::endl;<br>
>>>> std::cout << inputSize << size << input->GetOrigin() << std::endl;<br>
>>>><br>
>>>> resampler->SetSize( size );<br>
>>>> resampler->SetOutputSpacing( NewSpacing );<br>
>>>> resampler->SetOutputOrigin( input->GetOrigin() );<br>
>>>> resampler->SetOutputDirection(input->GetDirection());<br>
>>>> resampler->SetInput(input);<br>
>>>> typename RawIm::Pointer result = resampler->GetOutput();<br>
>>>> result->Update();<br>
>>>> result->DisconnectPipeline();<br>
>>>> return(result);<br>
>>>> }<br>
>>>><br>
>>>> //////////////////////////////////////////////////<br>
>>>> _____________________________________<br>
>>>> Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
>>>><br>
>>>> Visit other Kitware open-source projects at<br>
>>>> <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
>>>><br>
>>>> Kitware offers ITK Training Courses, for more information visit:<br>
>>>> <a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
>>>><br>
>>>> Please keep messages on-topic and check the ITK FAQ at:<br>
>>>> <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
>>>><br>
>>>> Follow this link to subscribe/unsubscribe:<br>
>>>> <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
>>>><br>
>>><br>
>><br>
><br>
_____________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at<br>
<a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
<br>
Please keep messages on-topic and check the ITK FAQ at:<br>
<a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
</div></div></blockquote></div><br>