Navigation Menu

Skip to content

Commit

Permalink
StereoView: Condense code
Browse files Browse the repository at this point in the history
  • Loading branch information
oleg-alexandrov committed Jul 26, 2014
1 parent 32b9d80 commit 360f9e1
Showing 1 changed file with 21 additions and 24 deletions.
45 changes: 21 additions & 24 deletions src/vw/Stereo/StereoView.h
Expand Up @@ -37,6 +37,24 @@ namespace vw {

namespace stereo {

template <class T>
inline typename boost::enable_if<IsScalar<T>,Vector2>::type
DispHelper(T const& disparity) {
return Vector2((double)disparity, 0);
}

template <class T>
inline typename boost::enable_if_c<IsCompound<T>::value && (CompoundNumChannels<typename UnmaskedPixelType<T>::type>::value == 1),Vector2>::type
DispHelper(T const& disparity) {
return Vector2((double)disparity, 0);
}

template <class T>
inline typename boost::enable_if_c<IsCompound<T>::value && (CompoundNumChannels<typename UnmaskedPixelType<T>::type>::value != 1),Vector2>::type
DispHelper(T const& disparity) {
return Vector2((double)disparity[0], (double)disparity[1]);
}

// Class definition
template <class DisparityImageT>
class StereoView : public ImageViewBase<StereoView<DisparityImageT> >
Expand All @@ -50,28 +68,6 @@ namespace stereo {
static const bool value = (1 != CompoundNumChannels<typename UnmaskedPixelType<PixelT>::type>::value);
};

template <class T>
inline typename boost::enable_if<IsScalar<T>,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 <class T>
inline typename boost::enable_if_c<IsCompound<T>::value && (CompoundNumChannels<typename UnmaskedPixelType<T>::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 <class T>
inline typename boost::enable_if_c<IsCompound<T>::value && (CompoundNumChannels<typename UnmaskedPixelType<T>::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;
Expand Down Expand Up @@ -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();
}
Expand Down

0 comments on commit 360f9e1

Please sign in to comment.