From b8c40a1048d50499befa8d0b814e46d70f48171a Mon Sep 17 00:00:00 2001 From: Guillaume Pasero <guillaume.pasero@c-s.fr> Date: Mon, 16 Jun 2014 17:08:42 +0200 Subject: [PATCH] BUG: Mantis-942: fix the stitching of vector data along stream lines --- .../otbOGRLayerStreamStitchingFilter.txx | 61 +++++++++---------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/Code/Segmentation/otbOGRLayerStreamStitchingFilter.txx b/Code/Segmentation/otbOGRLayerStreamStitchingFilter.txx index 029410c18f..a8788e0a7e 100644 --- a/Code/Segmentation/otbOGRLayerStreamStitchingFilter.txx +++ b/Code/Segmentation/otbOGRLayerStreamStitchingFilter.txx @@ -19,6 +19,7 @@ #define __otbOGRLayerStreamStitchingFilter_txx #include "otbOGRLayerStreamStitchingFilter.h" +#include "itkContinuousIndex.h" #include <iomanip> #include "ogrsf_frmts.h" @@ -133,29 +134,27 @@ OGRLayerStreamStitchingFilter<TInputImage> //Compute Stream line OGRLineString streamLine; - IndexType startIndex; - IndexType endIndex; + itk::ContinuousIndex<double,2> startIndex; + itk::ContinuousIndex<double,2> endIndex; if(!line) { - // Treat Row stream - //Compute the spatial filter of the upper stream - startIndex[0] = x*m_StreamSize[0]; - startIndex[1] = m_StreamSize[1]*(y-1); - endIndex[0] = m_StreamSize[0]*x; - endIndex[1] = m_StreamSize[1]*y; + // Treat vertical stream line + startIndex[0] = static_cast<double>(m_StreamSize[0] * x) - 0.5; + startIndex[1] = static_cast<double>(m_StreamSize[1] * (y-1)) - 0.5; + endIndex = startIndex; + endIndex[1] += static_cast<double>(m_StreamSize[1]); } else - { // Treat Column stream - //Compute the spatial filter of the left stream - startIndex[0] = (x-1)*m_StreamSize[0]; - startIndex[1] = m_StreamSize[1]*y; - endIndex[0] = m_StreamSize[0]*x; - endIndex[1] = m_StreamSize[1]*y; //-1 to stop just before stream line + { // Treat horizontal stream line + startIndex[0] = static_cast<double>(m_StreamSize[0] * (x-1)) - 0.5; + startIndex[1] = static_cast<double>(m_StreamSize[1] * y) - 0.5; + endIndex = startIndex; + endIndex[0] += static_cast<double>(m_StreamSize[0]); } OriginType startPoint; - inputImage->TransformIndexToPhysicalPoint(startIndex, startPoint); + inputImage->TransformContinuousIndexToPhysicalPoint(startIndex, startPoint); OriginType endPoint; - inputImage->TransformIndexToPhysicalPoint(endIndex, endPoint); + inputImage->TransformContinuousIndexToPhysicalPoint(endIndex, endPoint); streamLine.addPoint(startPoint[0], startPoint[1]); streamLine.addPoint(endPoint[0], endPoint[1]); @@ -171,19 +170,19 @@ OGRLayerStreamStitchingFilter<TInputImage> // Treat Row stream //Compute the spatial filter of the upper stream UpperLeftCorner[0] = x*m_StreamSize[0] - 1 - m_Radius; - UpperLeftCorner[1] = m_StreamSize[1]*(y-1) + 1; + UpperLeftCorner[1] = m_StreamSize[1]*(y-1); - LowerRightCorner[0] = m_StreamSize[0]*x - 1 - 1; - LowerRightCorner[1] = m_StreamSize[1]*y - 1 - 1; + LowerRightCorner[0] = m_StreamSize[0]*x - 1; + LowerRightCorner[1] = m_StreamSize[1]*y - 1; } else { // Treat Column stream //Compute the spatial filter of the left stream - UpperLeftCorner[0] = (x-1)*m_StreamSize[0] + 1; - UpperLeftCorner[1] = m_StreamSize[1]*y - 1 - 1 - m_Radius; + UpperLeftCorner[0] = (x-1)*m_StreamSize[0]; + UpperLeftCorner[1] = m_StreamSize[1]*y - 1 - m_Radius; - LowerRightCorner[0] = m_StreamSize[0]*x - 1 - 1; - LowerRightCorner[1] = m_StreamSize[1]*y - 1 - 1; //-1 to stop just before stream line + LowerRightCorner[0] = m_StreamSize[0]*x - 1; + LowerRightCorner[1] = m_StreamSize[1]*y - 1; //-1 to stop just before stream line } OriginType ulCorner; @@ -211,20 +210,20 @@ OGRLayerStreamStitchingFilter<TInputImage> if(!line) { //Compute the spatial filter of the lower stream - UpperLeftCorner[0] = x*m_StreamSize[0] + 1; - UpperLeftCorner[1] = m_StreamSize[1]*(y-1) + 1; + UpperLeftCorner[0] = x*m_StreamSize[0]; + UpperLeftCorner[1] = m_StreamSize[1]*(y-1); - LowerRightCorner[0] = m_StreamSize[0]*x + 1 + m_Radius; - LowerRightCorner[1] = m_StreamSize[1]*y - 1 - 1; + LowerRightCorner[0] = m_StreamSize[0]*x + m_Radius; + LowerRightCorner[1] = m_StreamSize[1]*y - 1; } else { //Compute the spatial filter of the right stream - UpperLeftCorner[0] = (x-1)*m_StreamSize[0] + 1; - UpperLeftCorner[1] = m_StreamSize[1]*y + 1; + UpperLeftCorner[0] = (x-1)*m_StreamSize[0]; + UpperLeftCorner[1] = m_StreamSize[1]*y; - LowerRightCorner[0] = m_StreamSize[0]*x - 1 - 1; - LowerRightCorner[1] = m_StreamSize[1]*y + 1 + m_Radius; + LowerRightCorner[0] = m_StreamSize[0]*x - 1; + LowerRightCorner[1] = m_StreamSize[1]*y + m_Radius; } inputImage->TransformIndexToPhysicalPoint(UpperLeftCorner, ulCorner); -- GitLab