Skip to content

Commit

Permalink
Added function to init lens distortion from parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
ScottMcMichael committed Jun 18, 2016
1 parent 4c8ea1c commit a8b63c0
Show file tree
Hide file tree
Showing 3 changed files with 177 additions and 69 deletions.
21 changes: 21 additions & 0 deletions src/vw/Camera/LensDistortion.cc
Expand Up @@ -60,6 +60,8 @@ struct DistortOptimizeFunctor : public math::LeastSquaresModelBase<DistortOptim
Vector<double>
LensDistortion::distortion_parameters() const { return Vector<double>(); }

void LensDistortion::set_distortion_parameters(Vector<double> const& params) {}

Vector2
LensDistortion::undistorted_coordinates(const camera::PinholeModel& cam, Vector2 const& v) const {
UndistortOptimizeFunctor model(cam, *this);
Expand Down Expand Up @@ -111,6 +113,10 @@ TsaiLensDistortion::TsaiLensDistortion(Vector4 const& params) : m_distortion(par
Vector<double>
TsaiLensDistortion::distortion_parameters() const { return m_distortion; }

void TsaiLensDistortion::set_distortion_parameters(Vector<double> const& params) {
m_distortion = params;
}

boost::shared_ptr<LensDistortion>
TsaiLensDistortion::copy() const {
return boost::shared_ptr<TsaiLensDistortion>(new TsaiLensDistortion(*this));
Expand Down Expand Up @@ -213,6 +219,13 @@ Vector<double> BrownConradyDistortion::distortion_parameters() const {
return output;
}

void BrownConradyDistortion::set_distortion_parameters(Vector<double> const& params) {
m_principal_point = subvector(params,0,2);
m_radial_distortion = subvector(params,2,3);
m_centering_distortion = subvector(params,5,2);
m_centering_angle = params[7];
}

Vector2
BrownConradyDistortion::undistorted_coordinates(const camera::PinholeModel& cam, Vector2 const& p) const {
Vector2 offset = cam.point_offset();
Expand Down Expand Up @@ -282,6 +295,10 @@ AdjustableTsaiLensDistortion::distortion_parameters() const {
return m_distortion;
}

void AdjustableTsaiLensDistortion::set_distortion_parameters(Vector<double> const& params) {
m_distortion = params;
}

boost::shared_ptr<LensDistortion>
AdjustableTsaiLensDistortion::copy() const {
return boost::shared_ptr<AdjustableTsaiLensDistortion>(new AdjustableTsaiLensDistortion(*this));
Expand Down Expand Up @@ -370,6 +387,10 @@ PhotometrixLensDistortion::distortion_parameters() const {
return m_distortion;
}

void PhotometrixLensDistortion::set_distortion_parameters(Vector<double> const& params) {
m_distortion = params;
}

boost::shared_ptr<LensDistortion>
PhotometrixLensDistortion::copy() const {
return boost::shared_ptr<PhotometrixLensDistortion>(new PhotometrixLensDistortion(*this));
Expand Down
89 changes: 48 additions & 41 deletions src/vw/Camera/LensDistortion.h
Expand Up @@ -69,6 +69,9 @@ namespace camera {
/// Return a vector containing all the distortion parameters.
virtual Vector<double> distortion_parameters() const;

/// Initialize the object from a set of distortion parameters.
virtual void set_distortion_parameters(Vector<double> const& params);

/// Each derived model needs to have a string name.
virtual std::string name() const = 0;

Expand All @@ -86,15 +89,15 @@ namespace camera {

/// A NULL lens distortion model.
struct NullLensDistortion : public LensDistortion {
inline Vector2 distorted_coordinates (const PinholeModel&, Vector2 const& v) const { return v; }
inline Vector2 undistorted_coordinates(const PinholeModel&, Vector2 const& v) const { return v; }

boost::shared_ptr<LensDistortion> copy() const;
void write(std::ostream& os) const;
void read (std::istream& os);
static std::string class_name() { return "NULL"; }
std::string name () const { return class_name(); }
void scale(float /*scale*/);
virtual Vector2 distorted_coordinates (const PinholeModel&, Vector2 const& v) const { return v; }
virtual Vector2 undistorted_coordinates(const PinholeModel&, Vector2 const& v) const { return v; }

virtual boost::shared_ptr<LensDistortion> copy() const;
virtual void write(std::ostream& os) const;
virtual void read (std::istream& os);
static std::string class_name() { return "NULL"; }
virtual std::string name () const { return class_name(); }
virtual void scale(float /*scale*/);
};

/// TSAI Lens Distortion Model
Expand Down Expand Up @@ -127,17 +130,18 @@ namespace camera {
public:
TsaiLensDistortion() {}
TsaiLensDistortion(Vector4 const& params);
Vector<double> distortion_parameters() const;
boost::shared_ptr<LensDistortion> copy() const;
virtual Vector<double> distortion_parameters() const;
virtual void set_distortion_parameters(Vector<double> const& params);
virtual boost::shared_ptr<LensDistortion> copy() const;

Vector2 distorted_coordinates(const PinholeModel& cam, Vector2 const& p) const;
virtual Vector2 distorted_coordinates(const PinholeModel& cam, Vector2 const& p) const;

void write(std::ostream& os) const;
void read (std::istream& os);
virtual void write(std::ostream& os) const;
virtual void read (std::istream& os);

static std::string class_name() { return "TSAI"; }
std::string name () const { return class_name(); }
void scale( float scale );
static std::string class_name() { return "TSAI"; }
virtual std::string name () const { return class_name(); }
virtual void scale( float scale );
};

/// Brown Conrady Distortion
Expand All @@ -163,16 +167,17 @@ namespace camera {
Vector<double> const& centering,
double const& angle );

Vector<double> distortion_parameters() const;
boost::shared_ptr<LensDistortion> copy() const;
virtual Vector<double> distortion_parameters() const;
virtual void set_distortion_parameters(Vector<double> const& params);
virtual boost::shared_ptr<LensDistortion> copy() const;

Vector2 undistorted_coordinates(const PinholeModel&, Vector2 const&) const;
virtual Vector2 undistorted_coordinates(const PinholeModel&, Vector2 const&) const;

void write(std::ostream& os) const;
void read (std::istream& os);
static std::string class_name() { return "BrownConrady"; }
std::string name () const { return class_name(); }
void scale( float /*scale*/ );
virtual void write(std::ostream& os) const;
virtual void read (std::istream& os);
static std::string class_name() { return "BrownConrady"; }
virtual std::string name () const { return class_name(); }
virtual void scale( float /*scale*/ );
};

/// Adjustable Tsai Distortion
Expand All @@ -192,17 +197,18 @@ namespace camera {
public:
AdjustableTsaiLensDistortion() {}
AdjustableTsaiLensDistortion(Vector<double> params);
Vector<double> distortion_parameters() const;
boost::shared_ptr<LensDistortion> copy() const;
virtual Vector<double> distortion_parameters() const;
virtual void set_distortion_parameters(Vector<double> const& params);
virtual boost::shared_ptr<LensDistortion> copy() const;

Vector2 distorted_coordinates(PinholeModel const&, Vector2 const&) const;
virtual Vector2 distorted_coordinates(PinholeModel const&, Vector2 const&) const;

void write(std::ostream& os) const;
void read (std::istream& os);
virtual void write(std::ostream& os) const;
virtual void read (std::istream& os);

static std::string class_name() { return "AdjustableTSAI"; }
std::string name () const { return class_name(); }
void scale( float /*scale*/ );
static std::string class_name() { return "AdjustableTSAI"; }
virtual std::string name () const { return class_name(); }
virtual void scale( float /*scale*/ );
};


Expand Down Expand Up @@ -237,18 +243,19 @@ namespace camera {
public:
PhotometrixLensDistortion() {}
PhotometrixLensDistortion(Vector<float64,9> const& params);
Vector<double> distortion_parameters() const;
boost::shared_ptr<LensDistortion> copy() const;
virtual Vector<double> distortion_parameters() const;
virtual void set_distortion_parameters(Vector<double> const& params);
virtual boost::shared_ptr<LensDistortion> copy() const;

Vector2 undistorted_coordinates(const PinholeModel& cam, Vector2 const& p) const;
virtual Vector2 undistorted_coordinates(const PinholeModel& cam, Vector2 const& p) const;

void write(std::ostream& os) const;
void read (std::istream& os);
virtual void write(std::ostream& os) const;
virtual void read (std::istream& os);

static std::string class_name() { return "Photometrix"; }
std::string name () const { return class_name(); }
static std::string class_name() { return "Photometrix"; }
virtual std::string name () const { return class_name(); }

void scale( float scale );
virtual void scale( float scale );
};


Expand Down

0 comments on commit a8b63c0

Please sign in to comment.