2.1.17.5.5 ocmath_2d_interpolate
Contents
Description
This function interpolates or extrpolates an input matrix to find Z values at given X and Y coordinates.
Syntax
int ocmath_2d_interpolate( int nSize, double * pX, double * pY, double * pZ, UINT nRows, UINT nCols, double * pMat, double dxMin, double dxMax, double dyMin, double dyMax, int nMethod = INTERP2_NEAREST )
Parameters
- nSize
- [input] The size of pX, pY and pZ vector.
- pX
- [input] Specifies X coordinates at which the data Z is given.
- pY
- [input] Specifies Y coordinates at which the data Z is given.
- pZ
- [output] The interpolated data values.
- nRows
- [input] The number of rows.
- nCols
- [input] The number of columns.
- pMat
- [input] The input matrix with size nRows*nCols.
- dxMin
- [input] The X minimum.
- dxMax
- [input] The X maximum.
- dyMin
- [input] The Y minimum.
- dyMax
- [input] The Y maximum.
- nMethod
- [input] The interpolation methods:
- INTERP2_NEAREST, INTERP2_BILINEAR, INTERP2_BICUBIC, INTERP2_SPLINE, INTERP2_BIQUADRATIC, INTERP2_LAGRANGE
Return
Returns OE_NOERROR if succeed, error codes otherwise.
Examples
EX1
//Before running, make sure a matrixlayer exists and is active in current project void ocmath_2d_interpolate_ex1(int nSize) { MatrixLayer ml = Project.ActiveLayer(); MatrixObject mo = ml.MatrixObjects(0); matrixbase& matbase = mo.GetDataObject(); matrix mat = matbase; Matrix mA; mA.Attach(ml); int nCols = mA.GetNumCols(); int nRows = mA.GetNumRows(); double dxMin = mA.GetXMin(); double dxMax = mA.GetXMax(); double dyMin = mA.GetYMin(); double dyMax = mA.GetYMax(); vector vx,vy,vz; vx.Data(dxMin, dxMax, (dxMax-dxMin)/(nSize-1)); vy.Data(dyMin, dyMax, (dyMax-dyMin)/(nSize-1)); vz.SetSize(nSize); int nRet = ocmath_2d_interpolate(nSize, vx, vy, vz, nRows, nCols, mat,dxMin, dxMax, dyMin, dyMax,INTERP2_NEAREST); if (nRet != OE_NOERROR) { printf("Error occurs when calling ocmath function!\n"); return } Worksheet wksResult; wksResult.Create("InterResult"); while(wksResult.Columns()) wksResult.DeleteCol(0); for(int n=0; n < 3; n++) wksResult.AddCol(); DataRange drOut; drOut.Add("X", wksResult, 0, 0, -1, 0); drOut.Add("Y", wksResult, 0, 1, -1, 1); drOut.Add("Z", wksResult, 0, 2, -1, 2); drOut.SetData(&vz, &vy, &vx); }
Remark
Remarks: This function interpolates or extrpolates an input matrix to find Z values at given X and Y coordinates.
The interpolation algorithms are
1) Nearest, direct value of pixel that the point on the line falls into;
2) Bilinear, interpolation of 2*2 pixels around point on line
3) Bicubic Convolution, interpolation of 4*4 pixels around point on the line
4) Spline, cubic B-Spline interpolation.
5) Biquadratic, quadratic interpolation of 3*3 pixels around point on line.
6) Bicubic Lagrange, quadratic interpolation of 4*4 pixels around point on line.
The least size of input matrix is 2*2 for Nearest, 2*2 for Bilinear, 4*4 for Bicubic Convolution, 4*4 for Spline, 3*3 for Biquadratic and 4*4 for Bicubic Lagrange;
See Also
ocmath_interpolate, ocmath_3d_interpolate
Header to Include
origin.h