From 360f9e1ea00f6be19fb8a80649b4f52e29523ba5 Mon Sep 17 00:00:00 2001 From: Oleg Alexandrov Date: Fri, 25 Jul 2014 17:32:52 -0700 Subject: [PATCH] StereoView: Condense code --- src/vw/Stereo/StereoView.h | 45 ++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/src/vw/Stereo/StereoView.h b/src/vw/Stereo/StereoView.h index 15562399e..83eca16fd 100644 --- a/src/vw/Stereo/StereoView.h +++ b/src/vw/Stereo/StereoView.h @@ -37,6 +37,24 @@ namespace vw { namespace stereo { + template + inline typename boost::enable_if,Vector2>::type + DispHelper(T const& disparity) { + return Vector2((double)disparity, 0); + } + + template + inline typename boost::enable_if_c::value && (CompoundNumChannels::type>::value == 1),Vector2>::type + DispHelper(T const& disparity) { + return Vector2((double)disparity, 0); + } + + template + inline typename boost::enable_if_c::value && (CompoundNumChannels::type>::value != 1),Vector2>::type + DispHelper(T const& disparity) { + return Vector2((double)disparity[0], (double)disparity[1]); + } + // Class definition template class StereoView : public ImageViewBase > @@ -50,28 +68,6 @@ namespace stereo { static const bool value = (1 != CompoundNumChannels::type>::value); }; - template - inline typename boost::enable_if,Vector3>::type - StereoModelHelper( StereoModel const& model, Vector2 const& index, - T const& disparity, double& error ) const { - return model( index, Vector2( index[0] + disparity, index[1] ), error ); - } - - template - inline typename boost::enable_if_c::value && (CompoundNumChannels::type>::value == 1),Vector3>::type - StereoModelHelper( StereoModel const& model, Vector2 const& index, - T const& disparity, double& error ) const { - return model( index, Vector2( index[0] + disparity, index[1] ), error ); - } - - template - inline typename boost::enable_if_c::value && (CompoundNumChannels::type>::value != 1),Vector3>::type - StereoModelHelper( StereoModel const& model, Vector2 const& index, - T const& disparity, double& error ) const { - return model( index, Vector2( index[0] + disparity[0], - index[1] + disparity[1] ), error ); - } - public: typedef Vector3 pixel_type; @@ -99,8 +95,9 @@ namespace stereo { inline result_type operator()( size_t i, size_t j, size_t p=0 ) const { double error; if ( is_valid(m_disparity_map(i,j,p)) ) - return StereoModelHelper( m_stereo_model, Vector2(i,j), - m_disparity_map(i,j,p), error ); + return m_stereo_model(Vector2(i,j), + Vector2(i,j) + DispHelper(m_disparity_map(i,j,p)), + error); // For missing pixels in the disparity map, we return a null 3D position. return Vector3(); }