Skip to content
Snippets Groups Projects
Commit b8c40a10 authored by Guillaume Pasero's avatar Guillaume Pasero
Browse files

BUG: Mantis-942: fix the stitching of vector data along stream lines

parent 36cc9b75
No related branches found
No related tags found
No related merge requests found
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#define __otbOGRLayerStreamStitchingFilter_txx #define __otbOGRLayerStreamStitchingFilter_txx
#include "otbOGRLayerStreamStitchingFilter.h" #include "otbOGRLayerStreamStitchingFilter.h"
#include "itkContinuousIndex.h"
#include <iomanip> #include <iomanip>
#include "ogrsf_frmts.h" #include "ogrsf_frmts.h"
...@@ -133,29 +134,27 @@ OGRLayerStreamStitchingFilter<TInputImage> ...@@ -133,29 +134,27 @@ OGRLayerStreamStitchingFilter<TInputImage>
//Compute Stream line //Compute Stream line
OGRLineString streamLine; OGRLineString streamLine;
IndexType startIndex; itk::ContinuousIndex<double,2> startIndex;
IndexType endIndex; itk::ContinuousIndex<double,2> endIndex;
if(!line) if(!line)
{ {
// Treat Row stream // Treat vertical stream line
//Compute the spatial filter of the upper stream startIndex[0] = static_cast<double>(m_StreamSize[0] * x) - 0.5;
startIndex[0] = x*m_StreamSize[0]; startIndex[1] = static_cast<double>(m_StreamSize[1] * (y-1)) - 0.5;
startIndex[1] = m_StreamSize[1]*(y-1); endIndex = startIndex;
endIndex[0] = m_StreamSize[0]*x; endIndex[1] += static_cast<double>(m_StreamSize[1]);
endIndex[1] = m_StreamSize[1]*y;
} }
else else
{ // Treat Column stream { // Treat horizontal stream line
//Compute the spatial filter of the left stream startIndex[0] = static_cast<double>(m_StreamSize[0] * (x-1)) - 0.5;
startIndex[0] = (x-1)*m_StreamSize[0]; startIndex[1] = static_cast<double>(m_StreamSize[1] * y) - 0.5;
startIndex[1] = m_StreamSize[1]*y; endIndex = startIndex;
endIndex[0] = m_StreamSize[0]*x; endIndex[0] += static_cast<double>(m_StreamSize[0]);
endIndex[1] = m_StreamSize[1]*y; //-1 to stop just before stream line
} }
OriginType startPoint; OriginType startPoint;
inputImage->TransformIndexToPhysicalPoint(startIndex, startPoint); inputImage->TransformContinuousIndexToPhysicalPoint(startIndex, startPoint);
OriginType endPoint; OriginType endPoint;
inputImage->TransformIndexToPhysicalPoint(endIndex, endPoint); inputImage->TransformContinuousIndexToPhysicalPoint(endIndex, endPoint);
streamLine.addPoint(startPoint[0], startPoint[1]); streamLine.addPoint(startPoint[0], startPoint[1]);
streamLine.addPoint(endPoint[0], endPoint[1]); streamLine.addPoint(endPoint[0], endPoint[1]);
...@@ -171,19 +170,19 @@ OGRLayerStreamStitchingFilter<TInputImage> ...@@ -171,19 +170,19 @@ OGRLayerStreamStitchingFilter<TInputImage>
// Treat Row stream // Treat Row stream
//Compute the spatial filter of the upper stream //Compute the spatial filter of the upper stream
UpperLeftCorner[0] = x*m_StreamSize[0] - 1 - m_Radius; 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[0] = m_StreamSize[0]*x - 1;
LowerRightCorner[1] = m_StreamSize[1]*y - 1 - 1; LowerRightCorner[1] = m_StreamSize[1]*y - 1;
} }
else else
{ // Treat Column stream { // Treat Column stream
//Compute the spatial filter of the left stream //Compute the spatial filter of the left stream
UpperLeftCorner[0] = (x-1)*m_StreamSize[0] + 1; UpperLeftCorner[0] = (x-1)*m_StreamSize[0];
UpperLeftCorner[1] = m_StreamSize[1]*y - 1 - 1 - m_Radius; UpperLeftCorner[1] = m_StreamSize[1]*y - 1 - m_Radius;
LowerRightCorner[0] = m_StreamSize[0]*x - 1 - 1; LowerRightCorner[0] = m_StreamSize[0]*x - 1;
LowerRightCorner[1] = m_StreamSize[1]*y - 1 - 1; //-1 to stop just before stream line LowerRightCorner[1] = m_StreamSize[1]*y - 1; //-1 to stop just before stream line
} }
OriginType ulCorner; OriginType ulCorner;
...@@ -211,20 +210,20 @@ OGRLayerStreamStitchingFilter<TInputImage> ...@@ -211,20 +210,20 @@ OGRLayerStreamStitchingFilter<TInputImage>
if(!line) if(!line)
{ {
//Compute the spatial filter of the lower stream //Compute the spatial filter of the lower stream
UpperLeftCorner[0] = x*m_StreamSize[0] + 1; UpperLeftCorner[0] = x*m_StreamSize[0];
UpperLeftCorner[1] = m_StreamSize[1]*(y-1) + 1; UpperLeftCorner[1] = m_StreamSize[1]*(y-1);
LowerRightCorner[0] = m_StreamSize[0]*x + 1 + m_Radius; LowerRightCorner[0] = m_StreamSize[0]*x + m_Radius;
LowerRightCorner[1] = m_StreamSize[1]*y - 1 - 1; LowerRightCorner[1] = m_StreamSize[1]*y - 1;
} }
else else
{ {
//Compute the spatial filter of the right stream //Compute the spatial filter of the right stream
UpperLeftCorner[0] = (x-1)*m_StreamSize[0] + 1; UpperLeftCorner[0] = (x-1)*m_StreamSize[0];
UpperLeftCorner[1] = m_StreamSize[1]*y + 1; UpperLeftCorner[1] = m_StreamSize[1]*y;
LowerRightCorner[0] = m_StreamSize[0]*x - 1 - 1; LowerRightCorner[0] = m_StreamSize[0]*x - 1;
LowerRightCorner[1] = m_StreamSize[1]*y + 1 + m_Radius; LowerRightCorner[1] = m_StreamSize[1]*y + m_Radius;
} }
inputImage->TransformIndexToPhysicalPoint(UpperLeftCorner, ulCorner); inputImage->TransformIndexToPhysicalPoint(UpperLeftCorner, ulCorner);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment