<div>Hi,</div><div><br>Thanks all for the useful suggestion.</div><div>Exactly like Dan pointed out, _CrtDumpMemoryLeaks() didn&#39;t correctly detect the memory as ITK has not gone out of scope.</div><div>I did what Dan suggested, no more big memory leak is detected.</div>
<div> </div><div>Thanks again for Dan and Richard&#39;s help! And sorry for wasting your time with this stupid mistake.</div><div> </div><div>Thanks,</div><div>Tina</div><div> </div><div> </div><div> </div><div><br> </div>
<div class="gmail_quote">On Wed, Sep 21, 2011 at 12:51 AM, Dan Mueller <span dir="ltr">&lt;<a href="mailto:dan.muel@gmail.com">dan.muel@gmail.com</a>&gt;</span> wrote:<br><blockquote style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid;" class="gmail_quote">
Hi Tina,<br>
<br>
I&#39;m not entirely sure how _CrtDumpMemoryLeaks() works, but ITK smart<br>
pointers work by deleting all non-referenced memory when they go out<br>
of scope. Looking at your code, I&#39;m not 100% convinced the pointers<br>
have gone out of scope when you call _CrtDumpMemoryLeaks().<br>
<br>
Perhaps, just to make sure the ITK smart pointers are being given a<br>
chance to clean up, you could try the following:<br>
<br>
void DoWork() {<br>
  // Put your code here<br>
}<br>
int main() {<br>
  DoWork();<br>
  _CrtDumpMemoryLeaks();<br>
}<br>
<br>
-OR-<br>
<br>
int main() {<br>
  {<br>
  // Put your code here<br>
  }<br>
  _CrtDumpMemoryLeaks();<br>
}<br>
<br>
Cheers, Dan<br>
<div><div></div><div class="h5"><br>
On 20 September 2011 17:40, qi yang &lt;<a href="mailto:tinaqiyang@gmail.com">tinaqiyang@gmail.com</a>&gt; wrote:<br>
&gt; Hi Richard,<br>
&gt;<br>
&gt; I tested on a simple version as following:<br>
&gt;<br>
&gt; #define _CRTDBG_MAP_ALLOC<br>
&gt; #include &lt;stdlib.h&gt;<br>
&gt; #include &lt;crtdbg.h&gt;<br>
&gt; #include &quot;itkImage.h&quot;<br>
&gt; #include &quot;itkImageFileReader.h&quot;<br>
&gt; #include &quot;itkImageFileWriter.h&quot;<br>
&gt; #include &quot;itkReconstructionByDilationImageFilter.h&quot;<br>
&gt; int main()<br>
&gt; {<br>
&gt;  typedef unsigned char   PixelType;<br>
&gt;  const unsigned int Dimension = 2;<br>
&gt;  typedef itk::Image&lt; PixelType, Dimension &gt; ImageType;<br>
&gt;  typedef itk::ImageFileReader&lt; ImageType &gt;  ReaderType;<br>
&gt;  typedef itk::ImageFileWriter&lt; ImageType &gt;  WriterType;<br>
&gt;<br>
&gt;  const char  *inputFilenameMarker  = &quot;C:\\work\\MeVisData\\marker.tif&quot;;<br>
&gt;  const char  *inputFilenameMask  = &quot;C:\\work\\MeVisData\\mask.tif&quot;;<br>
&gt;     //const char  *outputFilename = &quot;C:\\TYwork\\MeVisData\\ITKresult1.tif&quot;;<br>
&gt;  // Get marker image<br>
&gt;  ReaderType::Pointer reader = ReaderType::New();<br>
&gt;  reader-&gt;SetFileName( inputFilenameMarker  );<br>
&gt;  reader-&gt;Update();<br>
&gt;  ImageType::Pointer markerImage = ImageType::New();<br>
&gt;  markerImage = reader-&gt;GetOutput();<br>
&gt;  markerImage-&gt;DisconnectPipeline();<br>
&gt;<br>
&gt;  // Get mask image<br>
&gt;  //ReaderType::Pointer reader = ReaderType::New();<br>
&gt;  reader-&gt;SetFileName( inputFilenameMask  );<br>
&gt;  reader-&gt;Update();<br>
&gt;  ImageType::Pointer maskImage = ImageType::New();<br>
&gt;  maskImage = reader-&gt;GetOutput();<br>
&gt;  //filter<br>
&gt;  typedef itk::ReconstructionByDilationImageFilter&lt;ImageType, ImageType&gt;<br>
&gt; FilterType;<br>
&gt;  FilterType::Pointer filter = FilterType::New();<br>
&gt;  filter-&gt;SetMarkerImage(markerImage);<br>
&gt;  filter-&gt;SetMaskImage(maskImage);<br>
&gt;  filter-&gt;Update();<br>
&gt;<br>
&gt;  _CrtDumpMemoryLeaks();<br>
&gt; }<br>
&gt;<br>
&gt; Memory leak is still seen. The first memory leak size is the same as the<br>
&gt; mask image.<br>
&gt;<br>
&gt; The memory leak log is as following:<br>
&gt;<br>
&gt; Detected memory leaks!<br>
&gt; Dumping objects -&gt;<br>
&gt; {63766} normal block at 0x01F0DAD8, 147492 bytes long.<br>
&gt;  Data: &lt;                &gt; FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF<br>
&gt; {63765} normal block at 0x01EE89B8, 4 bytes long.<br>
&gt;  Data: &lt;    &gt; 00 00 00 00<br>
&gt; {63733} normal block at 0x01EE89F8, 8 bytes long.<br>
&gt;  Data: &lt; W  8   &gt; 80 57 EB 01 38 04 EC 01<br>
&gt; {63731} normal block at 0x01EE8DB8, 4 bytes long.<br>
&gt;  Data: &lt;    &gt; E0 87 EE 01<br>
&gt; {63730} normal block at 0x01EE8938, 64 bytes long.<br>
&gt;  Data: &lt;,        Z      &gt; 2C C5 9E 00 01 00 00 00 E8 5A C0 00 FF FF FF FF<br>
&gt; {63669} normal block at 0x01EE87E0, 280 bytes long.<br>
&gt;  Data: &lt;        PV      &gt; C4 BC 9E 00 01 00 00 00 50 56 C0 00 FF FF FF FF<br>
&gt; {63608} normal block at 0x01EC0590, 9788 bytes long.<br>
&gt;  Data: &lt;4        V      &gt; 34 96 9F 00 01 00 00 00 88 56 C0 00 FF FF FF FF<br>
&gt; {63547} normal block at 0x01EC4660, 8 bytes long.<br>
&gt;  Data: &lt;l       &gt; 6C 99 EE 01 00 00 00 00<br>
&gt; {63546} normal block at 0x01EC0090, 8 bytes long.<br>
&gt;  Data: &lt;P       &gt; 50 99 EE 01 00 00 00 00<br>
&gt; {63545} normal block at 0x01EE9540, 8 bytes long.<br>
&gt;  Data: &lt;T       &gt; 54 99 EE 01 00 00 00 00<br>
&gt; {63544} normal block at 0x01EE96D8, 8 bytes long.<br>
&gt;  Data: &lt;8       &gt; 38 99 EE 01 00 00 00 00<br>
&gt; {63543} normal block at 0x01EE9900, 156 bytes long.<br>
&gt;  Data: &lt;        x[      &gt; 8C B4 9E 00 01 00 00 00 78 5B C0 00 FF FF FF FF<br>
&gt; {63353} normal block at 0x01EE9A78, 147492 bytes long.<br>
&gt;  Data: &lt;                &gt; FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF<br>
&gt; {63340} normal block at 0x01EE8770, 52 bytes long.<br>
&gt;  Data: &lt;p   p   p       &gt; 70 87 EE 01 70 87 EE 01 70 87 EE 01 CD CD CD CD<br>
&gt; {63339} normal block at 0x01EE8728, 8 bytes long.<br>
&gt;  Data: &lt;h       &gt; 68 A9 EB 01 00 00 00 00<br>
&gt; {63338} normal block at 0x01EBA968, 20 bytes long.<br>
&gt;  Data: &lt;(       p       &gt; 28 87 EE 01 CD CD CD CD 70 87 EE 01 00 00 00 00<br>
&gt; {63337} normal block at 0x01EBA920, 8 bytes long.<br>
&gt;  Data: &lt;$   h   &gt; 24 98 9F 00 68 A9 EB 01 ...<br>
&gt; .......<br>
&gt;<br>
&gt; The callback log on &quot;{63766} normal block at 0x01F0DAD8, 147492 bytes long&quot;<br>
&gt; is as following:<br>
&gt;<br>
&gt; msvcr100d.dll!_heap_alloc_dbg_impl(unsigned int nSize, int nBlockUse, const<br>
&gt; char * szFileName, int nLine, int * errno_tmp)  Line 393 C++<br>
&gt;   msvcr100d.dll!_nh_malloc_dbg_impl(unsigned int nSize, int nhFlag, int<br>
&gt; nBlockUse, const char * szFileName, int nLine, int * errno_tmp)  Line 239 +<br>
&gt; 0x19 bytes C++<br>
&gt;   msvcr100d.dll!_nh_malloc_dbg(unsigned int nSize, int nhFlag, int<br>
&gt; nBlockUse, const char * szFileName, int nLine)  Line 302 + 0x1d bytes C++<br>
&gt;   msvcr100d.dll!malloc(unsigned int nSize)  Line 56 + 0x15 bytes C++<br>
&gt;   msvcr100d.dll!operator new(unsigned int size)  Line 59 + 0x9 bytes C++<br>
&gt;   test.exe!operator new[](unsigned int count)  Line 6 + 0x9 bytes C++<br>
&gt;   test.exe!itk::ImportImageContainer&lt;unsigned long,unsigned<br>
&gt; char&gt;::AllocateElements(unsigned long size)  Line 178 + 0x9 bytes C++<br>
&gt;   test.exe!itk::ImportImageContainer&lt;unsigned long,unsigned<br>
&gt; char&gt;::Reserve(unsigned long size)  Line 86 + 0x13 bytes C++<br>
&gt;   test.exe!itk::Image&lt;unsigned char,2&gt;::Allocate()  Line 52 C++<br>
&gt;   test.exe!itk::ImageSource&lt;itk::Image&lt;unsigned char,2&gt;<br>
&gt;&gt;::AllocateOutputs()  Line 216 + 0x26 bytes C++<br>
&gt;   test.exe!itk::ReconstructionImageFilter&lt;itk::Image&lt;unsigned<br>
&gt; char,2&gt;,itk::Image&lt;unsigned char,2&gt;,std::greater&lt;unsigned char&gt;<br>
&gt;&gt;::GenerateData()  Line 112 + 0x12 bytes C++<br>
&gt;   test.exe!itk::ProcessObject::UpdateOutputData(itk::DataObject * __formal)<br>
&gt; Line 987 + 0x12 bytes C++<br>
&gt;   test.exe!itk::DataObject::UpdateOutputData()  Line 420 + 0x21 bytes C++<br>
&gt;   test.exe!itk::ImageBase&lt;2&gt;::UpdateOutputData()  Line 285 C++<br>
&gt;   test.exe!itk::DataObject::Update()  Line 344 + 0xf bytes C++<br>
&gt;   test.exe!itk::ProcessObject::Update()  Line 615 + 0x1c bytes C++<br>
&gt;   test.exe!main()  Line 63 + 0x23 bytes C++<br>
&gt;   test.exe!__tmainCRTStartup()  Line 555 + 0x19 bytes C<br>
&gt;   test.exe!mainCRTStartup()  Line 371 C<br>
&gt;   kernel32.dll!75ad3c45()<br>
&gt;   [Frames below may be incorrect and/or missing, no symbols loaded for<br>
&gt; kernel32.dll]<br>
&gt;   ntdll.dll!775337f5()<br>
&gt;   ntdll.dll!775337c8()<br>
&gt;<br>
&gt; I am new to ITK and it is really hard for me to detect where the leak is.<br>
&gt;<br>
&gt; Thank you!<br>
&gt;<br>
&gt;<br>
&gt; Tina<br>
&gt;<br>
&gt;<br>
&gt; On Mon, Sep 19, 2011 at 6:12 PM, Richard Beare &lt;<a href="mailto:richard.beare@gmail.com">richard.beare@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Do you have minimalist version of your code that shows the leak?<br>
&gt;&gt;<br>
&gt;&gt; Line 112 is the AllocateOutputs() call, which is a standard part of<br>
&gt;&gt; most filters.<br>
&gt;&gt;<br>
&gt;&gt; On Tue, Sep 20, 2011 at 12:21 AM, qi yang &lt;<a href="mailto:tinaqiyang@gmail.com">tinaqiyang@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; Thanks for looking into this. I still haven&#39;t solved this issue.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; The following is the memory leak log from VS2010 output:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Detected memory leaks!<br>
&gt;&gt; &gt; Dumping objects -&gt;<br>
&gt;&gt; &gt; {769} normal block at 0x09F40040, 1208320 bytes long.<br>
&gt;&gt; &gt;  Data: &lt; P G P G P G P G&gt; 00 50 C3 47 00 50 C3 47 00 50 C3 47 00 50 C3<br>
&gt;&gt; &gt; 47<br>
&gt;&gt; &gt; Object dump complete.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Then I stopped at {769} where is the filter-&gt;update(), the call stack<br>
&gt;&gt; &gt; log is<br>
&gt;&gt; &gt; as following:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; msvcr100d.dll!_heap_alloc_dbg_impl(unsigned int nSize, int nBlockUse,<br>
&gt;&gt; &gt; const<br>
&gt;&gt; &gt; char * szFileName, int nLine, int * errno_tmp)  Line 393 C++<br>
&gt;&gt; &gt;   msvcr100d.dll!_nh_malloc_dbg_impl(unsigned int nSize, int nhFlag, int<br>
&gt;&gt; &gt; nBlockUse, const char * szFileName, int nLine, int * errno_tmp)  Line<br>
&gt;&gt; &gt; 239 +<br>
&gt;&gt; &gt; 0x19 bytes C++<br>
&gt;&gt; &gt;   msvcr100d.dll!_nh_malloc_dbg(unsigned int nSize, int nhFlag, int<br>
&gt;&gt; &gt; nBlockUse, const char * szFileName, int nLine)  Line 302 + 0x1d<br>
&gt;&gt; &gt; bytes C++<br>
&gt;&gt; &gt;   msvcr100d.dll!_malloc_dbg(unsigned int nSize, int nBlockUse, const<br>
&gt;&gt; &gt; char *<br>
&gt;&gt; &gt; szFileName, int nLine)  Line 160 + 0x1b bytes C++<br>
&gt;&gt; &gt;   mfc100ud.dll!operator new(unsigned int nSize)  Line 321 + 0x10<br>
&gt;&gt; &gt; bytes C++<br>
&gt;&gt; &gt;   SA_Sgmt.exe!operator new[](unsigned int count)  Line 6 + 0x9 bytes C++<br>
&gt;&gt; &gt;   SA_Sgmt.exe!itk::ImportImageContainer&lt;unsigned<br>
&gt;&gt; &gt; long,float&gt;::AllocateElements(unsigned long size)  Line 178 + 0x19<br>
&gt;&gt; &gt; bytes C++<br>
&gt;&gt; &gt;   SA_Sgmt.exe!itk::ImportImageContainer&lt;unsigned<br>
&gt;&gt; &gt; long,float&gt;::Reserve(unsigned long size)  Line 86 + 0x13 bytes C++<br>
&gt;&gt; &gt;   SA_Sgmt.exe!itk::Image&lt;float,2&gt;::Allocate()  Line 52 C++<br>
&gt;&gt; &gt;   SA_Sgmt.exe!itk::ImageSource&lt;itk::Image&lt;float,2&gt; &gt;::AllocateOutputs()<br>
&gt;&gt; &gt; Line 216 + 0x26 bytes C++<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;   SA_Sgmt.exe!itk::ReconstructionImageFilter&lt;itk::Image&lt;float,2&gt;,itk::Image&lt;float,2&gt;,std::greater&lt;float&gt;<br>
&gt;&gt; &gt;&gt;::GenerateData()  Line 112 + 0x12 bytes C++<br>
&gt;&gt; &gt; When I commented the filter-&gt;update(), I don&#39;t see memory leak reported.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I hope those information can give us more ideas.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Thanks a lot,<br>
&gt;&gt; &gt; Tina<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Sun, Sep 18, 2011 at 6:39 AM, Richard Beare &lt;<a href="mailto:richard.beare@gmail.com">richard.beare@gmail.com</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; I&#39;ve run a couple of tests with the mac leak detector and didn&#39;t see<br>
&gt;&gt; &gt;&gt; anything.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; 2011/9/17 Gaëtan Lehmann &lt;<a href="mailto:gaetan.lehmann@jouy.inra.fr">gaetan.lehmann@jouy.inra.fr</a>&gt;:<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Hi,<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; The memory leak message is not more detailed than that?<br>
&gt;&gt; &gt;&gt; &gt; I&#39;m afraid we can&#39;t do much with that, unfortunately...<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Regards,<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Gaëtan<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Le 14 sept. 11 ā 18:11, qi yang a écrit :<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; Hi,<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; I have a memory leaking problem bothered me for hours...<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; My VS2010 detected a big memory leak after &quot;filter-&gt;Update()&quot; of<br>
&gt;&gt; &gt;&gt; &gt;&gt; ReconstructionByDilationImageFilter.<br>
&gt;&gt; &gt;&gt; &gt;&gt; The related code is as following:<br>
&gt;&gt; &gt;&gt; &gt;&gt; typedef itk::ReconstructionByDilationImageFilter&lt;ImageType,<br>
&gt;&gt; &gt;&gt; &gt;&gt; ImageType&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; FilterType;<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; FilterType::Pointer filter = FilterType::New();<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; filter-&gt;SetMarkerImage(markerImage);<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; filter-&gt;SetMaskImage(maskImage);<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; filter-&gt;Update();<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; Do I need to release something after using the filter? What&#39;s the<br>
&gt;&gt; &gt;&gt; &gt;&gt; related<br>
&gt;&gt; &gt;&gt; &gt;&gt; function?<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; Thanks for any tips!!<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; Thanks,<br>
&gt;&gt; &gt;&gt; &gt;&gt; Tina<br>
&gt;&gt; &gt;&gt; &gt;&gt; _____________________________________<br>
&gt;&gt; &gt;&gt; &gt;&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; Visit other Kitware open-source projects at<br>
&gt;&gt; &gt;&gt; &gt;&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt;&gt; &gt;&gt; &gt;&gt; <a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt;&gt; &gt;&gt; &gt;&gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt; &gt;&gt; &gt;&gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; --<br>
&gt;&gt; &gt;&gt; &gt; Gaëtan Lehmann<br>
&gt;&gt; &gt;&gt; &gt; Biologie du Développement et de la Reproduction<br>
&gt;&gt; &gt;&gt; &gt; INRA de Jouy-en-Josas (France)<br>
&gt;&gt; &gt;&gt; &gt; tel: <a href="tel:%2B33%201%2034%2065%2029%2066" value="+33134652966">+33 1 34 65 29 66</a>    fax: 01 34 65 29 09<br>
&gt;&gt; &gt;&gt; &gt; <a href="http://mima2.jouy.inra.fr" target="_blank">http://mima2.jouy.inra.fr</a>  <a href="http://www.itk.org" target="_blank">http://www.itk.org</a><br>
&gt;&gt; &gt;&gt; &gt; <a href="http://www.bepo.fr" target="_blank">http://www.bepo.fr</a><br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; _____________________________________<br>
&gt;&gt; &gt;&gt; &gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Visit other Kitware open-source projects at<br>
&gt;&gt; &gt;&gt; &gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt;&gt; &gt;&gt; &gt; <a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt;&gt; &gt;&gt; &gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt; &gt;&gt; &gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt; _____________________________________<br>
&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;<br>
&gt; Visit other Kitware open-source projects at<br>
&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;<br>
&gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt; <a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
&gt;<br>
&gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;<br>
&gt; Follow this link to subscribe/unsubscribe:<br>
&gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>