diff --git a/Applications/DisparityMap/otbStereoRectificationGridGenerator.cxx b/Applications/DisparityMap/otbStereoRectificationGridGenerator.cxx index 984bd5af6e65b391fb937062cf3354a962d3b555..0390990469a6a468807ac358879afc9d468f03c3 100644 --- a/Applications/DisparityMap/otbStereoRectificationGridGenerator.cxx +++ b/Applications/DisparityMap/otbStereoRectificationGridGenerator.cxx @@ -91,7 +91,7 @@ private: } - void DoInit() + void DoInit() { SetName("StereoRectificationGridGenerator"); SetDescription("Generates two deformation fields to stereo-rectify (i.e. resample in epipolar geometry) a pair of stereo images up to the sensor model precision"); @@ -151,9 +151,11 @@ private: AddParameter(ParameterType_OutputImage, "inverse.outleft", "Left inverse deformation grid"); SetParameterDescription("inverse.outleft","The output deformation grid to be used to resample the epipolar left image"); + MandatoryOff("inverse.outleft"); AddParameter(ParameterType_OutputImage, "inverse.outright", "Right inverse deformation grid"); SetParameterDescription("inverse.outright","The output deformation grid to be used to resample the epipolar right image"); + MandatoryOff("inverse.outright"); AddParameter(ParameterType_Int, "inverse.ssrate", "Sub-sampling rate for inversion"); SetParameterDescription("inverse.ssrate","Grid inversion is an heavy process that implies spline regression on control points. To avoid eating to much memory, this parameter allows to first sub-sample the field to invert."); @@ -168,48 +170,51 @@ private: SetDocExampleParameterValue("epi.elevation.average","400"); } - void DoUpdateParameters() + void DoUpdateParameters() { // Nothing to do here } -void DoExecute() - { - m_DeformationFieldSource->SetLeftImage(GetParameterImage("io.inleft")); - m_DeformationFieldSource->SetRightImage(GetParameterImage("io.inright")); - m_DeformationFieldSource->SetGridStep(GetParameterInt("epi.step")); - m_DeformationFieldSource->SetScale(GetParameterFloat("epi.scale")); - - switch(ElevationParametersHandler::GetElevationType(this, "epi.elevation")) - { - case Elevation_DEM: - { - m_DeformationFieldSource->SetDEMDirectory(ElevationParametersHandler::GetDEMDirectory(this, "epi.elevation")); - m_DeformationFieldSource->SetGeoidFile(ElevationParametersHandler::GetGeoidFile(this, "epi.elevation")); - } - break; - case Elevation_Average: - { - m_DeformationFieldSource->SetAverageElevation(ElevationParametersHandler::GetAverageElevation(this, "epi.elevation")); - } - } + void DoExecute() + { + m_DeformationFieldSource->SetLeftImage(GetParameterImage("io.inleft")); + m_DeformationFieldSource->SetRightImage(GetParameterImage("io.inright")); + m_DeformationFieldSource->SetGridStep(GetParameterInt("epi.step")); + m_DeformationFieldSource->SetScale(GetParameterFloat("epi.scale")); + + switch(ElevationParametersHandler::GetElevationType(this, "epi.elevation")) + { + case Elevation_DEM: + { + m_DeformationFieldSource->SetDEMDirectory(ElevationParametersHandler::GetDEMDirectory(this, "epi.elevation")); + m_DeformationFieldSource->SetGeoidFile(ElevationParametersHandler::GetGeoidFile(this, "epi.elevation")); + } + break; + case Elevation_Average: + { + m_DeformationFieldSource->SetAverageElevation(ElevationParametersHandler::GetAverageElevation(this, "epi.elevation")); + } + } - AddProcess(m_DeformationFieldSource, "Computing epipolar grids ..."); + AddProcess(m_DeformationFieldSource, "Computing epipolar grids ..."); - m_DeformationFieldSource->Update(); + m_DeformationFieldSource->Update(); - SetParameterInt("epi.rectsizex",m_DeformationFieldSource->GetRectifiedImageSize()[0]); - SetParameterInt("epi.rectsizey",m_DeformationFieldSource->GetRectifiedImageSize()[1]); - SetParameterFloat("epi.baseline",m_DeformationFieldSource->GetMeanBaselineRatio()); + SetParameterInt("epi.rectsizex",m_DeformationFieldSource->GetRectifiedImageSize()[0]); + SetParameterInt("epi.rectsizey",m_DeformationFieldSource->GetRectifiedImageSize()[1]); + SetParameterFloat("epi.baseline",m_DeformationFieldSource->GetMeanBaselineRatio()); - SetParameterOutputImage("io.outleft",m_DeformationFieldSource->GetLeftDeformationFieldOutput()); - SetParameterOutputImage("io.outright",m_DeformationFieldSource->GetRightDeformationFieldOutput()); + SetParameterOutputImage("io.outleft",m_DeformationFieldSource->GetLeftDeformationFieldOutput()); + SetParameterOutputImage("io.outright",m_DeformationFieldSource->GetRightDeformationFieldOutput()); - // Inverse part - // lots of casting here ... + // Inverse part + // lots of casting here ... - // Left field inversion + // Left field inversion + if(IsParameterEnabled("inverse.outleft")) + { + m_LeftDeformationFieldCaster->SetInput(m_DeformationFieldSource->GetLeftDeformationFieldOutput()); m_LeftInvertDeformationFieldFilter->SetInput(m_LeftDeformationFieldCaster->GetOutput()); @@ -238,8 +243,13 @@ void DoExecute() m_LeftImageListFilter->SetInput(m_LeftImageList); SetParameterOutputImage("inverse.outleft",m_LeftImageListFilter->GetOutput()); + } - // Right field inversion + // Right field inversion + + if(IsParameterEnabled("inverse.outright")) + { + m_RightDeformationFieldCaster->SetInput(m_DeformationFieldSource->GetRightDeformationFieldOutput()); @@ -262,7 +272,8 @@ void DoExecute() m_RightImageListFilter->SetInput(m_RightImageList); SetParameterOutputImage("inverse.outright",m_RightImageListFilter->GetOutput()); - } + } + } DeformationFieldSourceType::Pointer m_DeformationFieldSource; InverseDeformationFieldFilterType::Pointer m_LeftInvertDeformationFieldFilter;