22 const std::vector<double>& radialDistortion)
24 NEWMAT::ColumnVector distanceVec((
int)radialDistance.size());
25 NEWMAT::ColumnVector distortionVec((
int)radialDistortion.size());
32 if(radialDistance.size() == radialDistortion.size())
34 for(idx = 0; idx < radialDistance.size();++idx)
36 distanceVec[idx] = radialDistance[idx];
37 distortionVec[idx] = radialDistortion[idx];
45 const NEWMAT::ColumnVector &radialDistortion)
47 NEWMAT::ColumnVector coefficients(4);
53 if((radialDistance.Nrows() == 0) ||
54 (radialDistortion.Nrows() == 0))
58 if(radialDistance.Nrows() == radialDistortion.Nrows())
60 NEWMAT::Matrix M(radialDistance.Nrows(), 4);
63 for(
long row = 0; row < M.Nrows(); row++)
65 M[row][0] = radialDistance[row];
66 M[row][1] = M[row][0]*radialDistance[row]*radialDistance[row];
67 M[row][2] = M[row][1]*radialDistance[row]*radialDistance[row];
68 M[row][3] = M[row][2]*radialDistance[row]*radialDistance[row];
71 NEWMAT::Matrix mTranspose = M.t();
72 coefficients = ((mTranspose*M).i())*(mTranspose*radialDistortion);
86 double r3 = radius*radius*radius;
87 double r5 = r3*radius*radius;
88 double r7 = r5*radius*radius;
98 double r = sqrt(deltaPosition.
x*deltaPosition.
x +
99 deltaPosition.
y*deltaPosition.
y);
100 double deltaRadius =
deltaR(r);
109 double deltaX = (deltaPosition.
x*(deltaRadius/r));
110 double deltaY = (deltaPosition.
y*(deltaRadius/r));
112 output.
x = deltaPosition.
x-deltaX;
113 output.
y = deltaPosition.
y-deltaY;
117 const char* prefix)
const 144 const char* k0 = kwl.
find(prefix,
"k0");
145 const char* k1 = kwl.
find(prefix,
"k1");
146 const char* k2 = kwl.
find(prefix,
"k2");
147 const char* k3 = kwl.
find(prefix,
"k3");
158 std::vector<double> distances;
159 std::vector<double> distortions;
162 const char* distortion = kwl.
find(prefix,
"distortion0");
167 distortions.push_back(
ossimString(distortion).toDouble());
171 distortion = kwl.
find(prefix,
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
double deltaR(double r) const
Represents serializable keyword/value map.
const char * find(const char *key) const
static ossimString toString(bool aValue)
Numeric to string methods.
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
void solveCoefficients(const NEWMAT::ColumnVector &radialDistance, const NEWMAT::ColumnVector &radialDistortion)
unsigned int ossim_uint32
virtual void undistort(const ossimDpt &input, ossimDpt &output) const
RTTI_DEF1(ossimMeanRadialLensDistortion, "ossimMeanRadialLensDistortion", ossimLensDistortion)
std::vector< double > theCoefficients
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
float distance(double lat1, double lon1, double lat2, double lon2, int units)