diff --git a/Code/Common/otbPolyLineImageConstIterator.txx b/Code/Common/otbPolyLineImageConstIterator.txx
index fa82b3596d84c86a3b0d4f2c12930d63792075f7..2016bf5dc466c1fe9bbdd7963c69356fdb2248fb 100644
--- a/Code/Common/otbPolyLineImageConstIterator.txx
+++ b/Code/Common/otbPolyLineImageConstIterator.txx
@@ -39,7 +39,7 @@ PolyLineImageConstIterator<TImage, TPath>
   IndexType source, target;
   for (unsigned int i = 0; i < ImageType::ImageDimension; ++i)
     {
-    source[i] = static_cast<unsigned int> (m_InternalVertexIterator.Value()[i]);
+    source[i] = static_cast<unsigned int> (vcl_floor(m_InternalVertexIterator.Value()[i] + 0.5));
     }
   ++m_InternalVertexIterator;
   if (m_InternalVertexIterator != m_Path->GetVertexList()->End())
@@ -47,7 +47,7 @@ PolyLineImageConstIterator<TImage, TPath>
 
     for (unsigned int i = 0; i < ImageType::ImageDimension; ++i)
       {
-      target[i] = static_cast<unsigned int> (m_InternalVertexIterator.Value()[i]);
+      target[i] = static_cast<unsigned int> (vcl_floor(m_InternalVertexIterator.Value()[i] + 0.5));
       }
     }
   else
@@ -78,7 +78,7 @@ PolyLineImageConstIterator<TImage, TPath>
   IndexType source, target;
   for (unsigned int i = 0; i < ImageType::ImageDimension; ++i)
     {
-    source[i] = static_cast<unsigned int> (m_InternalVertexIterator.Value()[i]);
+    source[i] = static_cast<unsigned int> (vcl_floor(m_InternalVertexIterator.Value()[i] + 0.5));
     }
   ++m_InternalVertexIterator;
   if (m_InternalVertexIterator != m_Path->GetVertexList()->End())
@@ -86,7 +86,7 @@ PolyLineImageConstIterator<TImage, TPath>
 
     for (unsigned int i = 0; i < ImageType::ImageDimension; ++i)
       {
-      target[i] = static_cast<unsigned int> (m_InternalVertexIterator.Value()[i]);
+      target[i] = static_cast<unsigned int> (vcl_floor(m_InternalVertexIterator.Value()[i] + 0.5));
       }
     }
   else
@@ -110,7 +110,7 @@ PolyLineImageConstIterator<TImage, TPath>
       IndexType source;
       for (unsigned int i = 0; i < ImageType::ImageDimension; ++i)
         {
-        source[i] = static_cast<unsigned int> (m_InternalVertexIterator.Value()[i]);
+        source[i] = static_cast<unsigned int> (vcl_floor(m_InternalVertexIterator.Value()[i] + 0.5));
         }
       // otbMsgDebugMacro(<<"Source: "<<source);
       ++m_InternalVertexIterator;
@@ -119,7 +119,7 @@ PolyLineImageConstIterator<TImage, TPath>
         IndexType target;
         for (unsigned int i = 0; i < ImageType::ImageDimension; ++i)
           {
-          target[i] = static_cast<unsigned int> (m_InternalVertexIterator.Value()[i]);
+          target[i] = static_cast<unsigned int> (vcl_floor(m_InternalVertexIterator.Value()[i] + 0.5));
           }
         // otbMsgDebugMacro(<<"Target: "<<target);
         m_InternalImageIterator = InternalImageIteratorType(const_cast<ImageType *> (m_Image.GetPointer()), source,