18 #ifndef __otbDisparityMapEstimationMethod_txx
19 #define __otbDisparityMapEstimationMethod_txx
34 template <
typename TFixedImage,
typename TMovingImage,
class TPo
intSet>
38 this->SetNumberOfRequiredInputs(3);
41 this->SetReleaseDataBeforeUpdateFlag(
false);
49 m_InitialTransformParameters.Fill(0.0f);
54 template <
class TFixedImage,
class TMovingImage,
class TPo
intSet>
62 template <
class TFixedImage,
class TMovingImage,
class TPo
intSet>
73 template <
class TFixedImage,
class TMovingImage,
class TPo
intSet>
84 template <
class TFixedImage,
class TMovingImage,
class TPo
intSet>
95 template <
class TFixedImage,
class TMovingImage,
class TPo
intSet>
106 template <
class TFixedImage,
class TMovingImage,
class TPo
intSet>
117 template <
class TFixedImage,
class TMovingImage,
class TPo
intSet>
128 template <
class TFixedImage,
class TMovingImage,
class TPo
intSet>
140 typedef typename PointSetType::PointsContainer PointsContainer;
141 typedef typename PointsContainer::ConstIterator PointsIterator;
147 typename PointsContainer::ConstPointer points = pointSet->GetPoints();
150 PointsIterator pointIterator = points->Begin();
151 PointsIterator end = points->End();
152 unsigned int dataId = 0;
157 while (pointIterator != end)
159 typename PointSetType::PointType p = pointIterator.Value();
162 typename FixedExtractType::Pointer fixedExtractor = FixedExtractType::New();
163 typename MovingExtractType::Pointer movingExtractor = MovingExtractType::New();
164 fixedExtractor->SetInput(fixed);
165 movingExtractor->SetInput(moving);
168 fixedExtractor->SetStartX(static_cast<unsigned long>(p[0] - m_ExploSize[0]));
169 fixedExtractor->SetStartY(static_cast<unsigned long>(p[1] - m_ExploSize[1]));
170 fixedExtractor->SetSizeX(static_cast<unsigned long>(2 * m_ExploSize[0] + 1));
171 fixedExtractor->SetSizeY(static_cast<unsigned long>(2 * m_ExploSize[1] + 1));
174 <<
"Fixed region: origin(" << p[0] - m_ExploSize[0] <<
", " << p[1] - m_ExploSize[1] <<
") size(" << 2 *
175 m_ExploSize[0] + 1 <<
", " << 2 * m_ExploSize[1] + 1 <<
")");
177 movingExtractor->SetStartX(static_cast<unsigned long>(p[0] - m_WinSize[0]));
178 movingExtractor->SetStartY(static_cast<unsigned long>(p[1] - m_WinSize[1]));
179 movingExtractor->SetSizeX(static_cast<unsigned long>(2 * m_WinSize[0] + 1));
180 movingExtractor->SetSizeY(static_cast<unsigned long>(2 * m_WinSize[1] + 1));
182 <<
"Moving region: origin(" << p[0] - m_WinSize[0] <<
", " << p[1] - m_WinSize[1] <<
") size(" << 2 *
183 m_WinSize[0] + 1 <<
", " << 2 * m_WinSize[1] + 1 <<
")");
185 fixedExtractor->Update();
186 movingExtractor->Update();
213 typename RegistrationType::Pointer registration = RegistrationType::New();
216 registration->SetOptimizer(m_Optimizer);
217 registration->SetTransform(m_Transform);
218 registration->SetInterpolator(m_Interpolator);
219 registration->SetMetric(m_Metric);
220 registration->SetFixedImage(fixedExtractor->GetOutput());
221 registration->SetMovingImage(movingExtractor->GetOutput());
224 registration->SetInitialTransformParameters(m_InitialTransformParameters);
225 m_Interpolator->SetInputImage(movingExtractor->GetOutput());
228 registration->StartRegistration();
231 ParametersType finalParameters = registration->GetLastTransformParameters();
232 double value = m_Optimizer->GetValue(registration->GetLastTransformParameters());
235 typename FixedImageType::PointType inputPoint, outputPoint;
236 typename FixedImageType::IndexType inputIndex;
239 inputIndex[0] =
static_cast<unsigned int>(p[0]);
240 inputIndex[1] =
static_cast<unsigned int>(p[1]);
242 fixed->TransformIndexToPhysicalPoint(inputIndex, inputPoint);
244 m_Transform->SetParameters(finalParameters);
245 outputPoint = m_Transform->TransformPoint(inputPoint);
250 <<
"Deformation: (" << outputPoint[0] - inputPoint[0] <<
", " << outputPoint[1] - inputPoint[1] <<
")");
256 data[1] = outputPoint[0] - inputPoint[0];
257 data[2] = outputPoint[1] - inputPoint[1];
259 for (
unsigned int i = 0; i < finalParameters.GetSize(); ++i)
261 data[i + 3] = finalParameters[i];
265 output->SetPoint(dataId, p);
266 output->SetPointData(dataId, data);
272 template <
class TFixedImage,
class TMovingImage,
class TPo
intSet>
277 Superclass::PrintSelf(os, indent);
278 os << indent <<
"Window size: " << m_WinSize << std::endl;
279 os << indent <<
"Exploration size: " << m_ExploSize << std::endl;