]> Creatis software - clitk.git/blobdiff - itk/clitkInvertVFFilter.txx
Merge branch 'master' of git.creatis.insa-lyon.fr:clitk
[clitk.git] / itk / clitkInvertVFFilter.txx
index 684b35545add887b43a3827a6efd9ce8d71577d0..e26fed7c77c6b7cac148e970adce1491587742bd 100644 (file)
@@ -75,7 +75,11 @@ protected:
 
   //the actual processing
   void BeforeThreadedGenerateData();
+#if ITK_VERSION_MAJOR >= 4
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId );
+#else
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId );
+#endif
 
   //member data
   typename  WeightsImageType::Pointer m_Weights;
@@ -113,9 +117,13 @@ void HelperClass1<InputImageType, OutputImageType>::BeforeThreadedGenerateData()
 //=========================================================================================================================
 //update the output for the outputRegionForThread
 template<class InputImageType, class OutputImageType>
+#if ITK_VERSION_MAJOR >= 4
+void HelperClass1<InputImageType, OutputImageType>::ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId )
+#else
 void HelperClass1<InputImageType, OutputImageType>::ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId )
+#endif
 {
-  //std::cout << "HelperClass1::ThreadedGenerateData - IN" << std::endl;
+//   std::cout << "HelperClass1::ThreadedGenerateData - IN " << threadId << std::endl;
   //Get pointer to the input
   typename InputImageType::ConstPointer inputPtr = this->GetInput();
 
@@ -138,6 +146,8 @@ void HelperClass1<InputImageType, OutputImageType>::ThreadedGenerateData(const O
   DisplacementType displacement;
   inputIt.GoToBegin();
 
+  typename OutputImageType::SizeType size = outputPtr->GetLargestPossibleRegion().GetSize();
+
   //define some temp variables
   signed long baseIndex[ImageDimension];
   double distance[ImageDimension];
@@ -189,8 +199,10 @@ void HelperClass1<InputImageType, OutputImageType>::ThreadedGenerateData(const O
             overlap *= 1.0 - distance[dim];
           }
           upper >>= 1;
-        }
 
+          if (neighIndex[dim] >= size[dim])
+            neighIndex[dim] = size[dim] - 1;
+        }
 
 
         //Set neighbor value only if overlap is not zero
@@ -235,7 +247,7 @@ void HelperClass1<InputImageType, OutputImageType>::ThreadedGenerateData(const O
     ++inputIt;
   }
 
-  //std::cout << "HelperClass1::ThreadedGenerateData - OUT" << std::endl;
+//   std::cout << "HelperClass1::ThreadedGenerateData - OUT " << threadId << std::endl;
 }
 
 
@@ -285,8 +297,11 @@ protected:
 
 
   //the actual processing
+#if ITK_VERSION_MAJOR >= 4
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId );
+#else
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId );
-
+#endif
 
   //member data
   typename     WeightsImageType::Pointer m_Weights;
@@ -305,16 +320,23 @@ protected:
 //Empty constructor
 template<class InputImageType, class OutputImageType > HelperClass2<InputImageType, OutputImageType>::HelperClass2()
 {
-  m_EdgePaddingValue=itk::NumericTraits<PixelType>::Zero;
+  PixelType zero;
+  for(unsigned int i=0;i <PixelType::Dimension; i++) zero[i] = 0.0;
+  m_EdgePaddingValue=zero;
+  //m_EdgePaddingValue=itk::NumericTraits<PixelType>::Zero;
 }
 
 
 //=========================================================================================================================
 //update the output for the outputRegionForThread
+#if ITK_VERSION_MAJOR >= 4
+template<class InputImageType, class OutputImageType > void HelperClass2<InputImageType, OutputImageType>::ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId )
+#else
 template<class InputImageType, class OutputImageType > void HelperClass2<InputImageType, OutputImageType>::ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId )
+#endif
 {
-  //std::cout << "HelperClass2::ThreadedGenerateData - IN" << std::endl;
-  
+//   std::cout << "HelperClass2::ThreadedGenerateData - IN " << threadId << std::endl;
+
   //Get pointer to the input
   typename InputImageType::ConstPointer inputPtr = this->GetInput();
 
@@ -364,9 +386,9 @@ template<class InputImageType, class OutputImageType > void HelperClass2<InputIm
     ++inputIt;
 
   }//end while
-  
-  //std::cout << "HelperClass2::ThreadedGenerateData - OUT" << std::endl;
-  
+
+//   std::cout << "HelperClass2::ThreadedGenerateData - OUT " << threadId << std::endl;
+
 }//end member
 
 
@@ -386,7 +408,12 @@ namespace clitk
 template <class InputImageType, class OutputImageType>
 InvertVFFilter<InputImageType, OutputImageType>::InvertVFFilter()
 {
-  m_EdgePaddingValue=itk::NumericTraits<PixelType>::Zero; //no other reasonable value?
+
+  //m_EdgePaddingValue=itk::NumericTraits<PixelType>::Zero; //no other reasonable value?
+  PixelType zero;
+  for(unsigned int i=0;i <PixelType::Dimension; i++) zero[i] = 0.0;
+  m_EdgePaddingValue=zero; //no other reasonable value?
+
   m_ThreadSafe=false;
   m_Verbose=false;
 }
@@ -395,7 +422,7 @@ InvertVFFilter<InputImageType, OutputImageType>::InvertVFFilter()
 //Update
 template <class InputImageType, class OutputImageType> void InvertVFFilter<InputImageType, OutputImageType>::GenerateData()
 {
-  //std::cout << "InvertVFFilter::GenerateData - IN" << std::endl;
+  // std::cout << "InvertVFFilter::GenerateData - IN" << std::endl;
 
   //Get the properties of the input
   typename InputImageType::ConstPointer inputPtr=this->GetInput();
@@ -457,6 +484,7 @@ template <class InputImageType, class OutputImageType> void InvertVFFilter<Input
   typename HelperClass2Type::Pointer helper2=HelperClass2Type::New();
 
   //Set temporary output as input
+  if(m_NumberOfThreadsIsGiven)helper2->SetNumberOfThreads(m_NumberOfThreads);
   helper2->SetInput(temp);
   helper2->SetWeights(weights);
   helper2->SetEdgePaddingValue(m_EdgePaddingValue);
@@ -467,6 +495,8 @@ template <class InputImageType, class OutputImageType> void InvertVFFilter<Input
 
   //Set the output
   this->SetNthOutput(0, helper2->GetOutput());
+
+  //std::cout << "InvertVFFilter::GenerateData - OUT" << std::endl;
 }