public PolynomialImageTransformer(RegistrationDefinition registration, InterpolationMode interpolationMode, int polynomialDegree) : base(registration, interpolationMode) { List<PositionAssociation> associationList = registration.GetAssociationList(); TransformationStyle arg_15_0 = registration.warpStyle; int num = associationList.Count; if (num == 2) { num++; } JamaMatrix jamaMatrix = new JamaMatrix(num, 2); JamaMatrix jamaMatrix2 = new JamaMatrix(num, 2); for (int i = 0; i < num; i++) { LatLon latLon = (i == associationList.Count) ? PolynomialImageTransformer.getThirdPosition(associationList[0].sourcePosition.pinPosition.latlon, associationList[1].sourcePosition.pinPosition.latlon, true) : associationList[i].sourcePosition.pinPosition.latlon; jamaMatrix.SetElement(i, 0, latLon.lon); jamaMatrix.SetElement(i, 1, latLon.lat); LatLon latLon2 = (i == associationList.Count) ? PolynomialImageTransformer.getThirdPosition(MercatorCoordinateSystem.LatLonToMercator(associationList[0].globalPosition.pinPosition.latlon), MercatorCoordinateSystem.LatLonToMercator(associationList[1].globalPosition.pinPosition.latlon), false) : MercatorCoordinateSystem.LatLonToMercator(associationList[i].globalPosition.pinPosition.latlon); jamaMatrix2.SetElement(i, 0, latLon2.lon); jamaMatrix2.SetElement(i, 1, latLon2.lat); } this.destMercatorToSourceTransformer = PolynomialImageTransformer.getPolyPointTransformer(jamaMatrix, jamaMatrix2, polynomialDegree); this.sourceToDestMercatorTransformer_approximate = PolynomialImageTransformer.getApproximateInverterPolyPointTransformer(jamaMatrix, jamaMatrix2, polynomialDegree); DownhillInverterPointTransformer flakyPointTransformer = new DownhillInverterPointTransformer(this.destMercatorToSourceTransformer, this.sourceToDestMercatorTransformer_approximate); IPointTransformer sourceToMercator = new RobustPointTransformer(flakyPointTransformer, this.sourceToDestMercatorTransformer_approximate); this.destLatLonToSourceTransformer = new LatLonToSourceTransform(this.destMercatorToSourceTransformer); this.sourceToDestLatLonTransformer = new SourceToLatLonTransform(sourceToMercator); }
public override void doTransform(PointD p0, PointD p1) { JamaMatrix jamaMatrix = new JamaMatrix(1, 2); jamaMatrix.SetElement(0, 0, p0.x); jamaMatrix.SetElement(0, 1, p0.y); JamaMatrix jamaMatrix2 = IPolyPointTransformer.Polynomialize(jamaMatrix, this.polynomialDegree).times(this.matrix); p1.x = jamaMatrix2.GetElement(0, 0); p1.y = jamaMatrix2.GetElement(1, 0); }
public static JamaMatrix PolyExps(int degree) { JamaMatrix jamaMatrix = new JamaMatrix((degree + 1) * (degree + 2) / 2, 2); int num = 0; for (int i = 0; i <= degree; i++) { for (int j = 0; j <= degree - i; j++) { jamaMatrix.SetElement(num, 0, (double)i); jamaMatrix.SetElement(num, 1, (double)j); num++; } } D.Assert(num == jamaMatrix.RowDimension); return jamaMatrix; }
public HomographicImageTransformer(RegistrationDefinition registration, InterpolationMode interpolationMode) : base(registration, interpolationMode) { List<PositionAssociation> associationList = registration.GetAssociationList(); TransformationStyle arg_15_0 = registration.warpStyle; int count = associationList.Count; JamaMatrix jamaMatrix = new JamaMatrix(count, 2); JamaMatrix jamaMatrix2 = new JamaMatrix(count, 2); for (int i = 0; i < count; i++) { LatLon latlon = associationList[i].sourcePosition.pinPosition.latlon; jamaMatrix.SetElement(i, 0, latlon.lon); jamaMatrix.SetElement(i, 1, latlon.lat); LatLon latLon = MercatorCoordinateSystem.LatLonToMercator(associationList[i].globalPosition.pinPosition.latlon); jamaMatrix2.SetElement(i, 0, latLon.lon); jamaMatrix2.SetElement(i, 1, latLon.lat); } }
private static JamaMatrix CornersToVectorMatrix(MapRectangle rect) { JamaMatrix jamaMatrix = new JamaMatrix(3, 4); jamaMatrix.SetElement(0, 0, rect.lon0); jamaMatrix.SetElement(0, 1, rect.lon0); jamaMatrix.SetElement(0, 2, rect.lon1); jamaMatrix.SetElement(0, 3, rect.lon1); jamaMatrix.SetElement(1, 0, rect.lat0); jamaMatrix.SetElement(1, 1, rect.lat1); jamaMatrix.SetElement(1, 2, rect.lat0); jamaMatrix.SetElement(1, 3, rect.lat1); jamaMatrix.SetElement(2, 0, 1.0); jamaMatrix.SetElement(2, 1, 1.0); jamaMatrix.SetElement(2, 2, 1.0); jamaMatrix.SetElement(2, 3, 1.0); return jamaMatrix; }
public static JamaMatrix Polynomialize(JamaMatrix values, int degree) { JamaMatrix jamaMatrix = IPolyPointTransformer.PolyExps(degree); JamaMatrix jamaMatrix2 = new JamaMatrix(values.RowDimension, jamaMatrix.RowDimension); for (int i = 0; i < jamaMatrix.RowDimension; i++) { for (int j = 0; j < values.RowDimension; j++) { jamaMatrix2.SetElement(j, i, Math.Pow(values.GetElement(j, 0), jamaMatrix.GetElement(i, 0)) * Math.Pow(values.GetElement(j, 1), jamaMatrix.GetElement(i, 1))); } } JamaMatrix jamaMatrix3 = new JamaMatrix(jamaMatrix2.RowDimension * 2, jamaMatrix2.ColumnDimension * 2); jamaMatrix3.setMatrix(0, jamaMatrix2.RowDimension - 1, 0, jamaMatrix2.ColumnDimension - 1, jamaMatrix2); jamaMatrix3.setMatrix(jamaMatrix2.RowDimension, 2 * jamaMatrix2.RowDimension - 1, jamaMatrix2.ColumnDimension, 2 * jamaMatrix2.ColumnDimension - 1, jamaMatrix2); return jamaMatrix3; }
private static JamaMatrix RegularUnitGrid(int size) { JamaMatrix jamaMatrix = new JamaMatrix(size * size, 2); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { jamaMatrix.SetElement(i * size + j, 0, (double)j / (double)(size - 1)); jamaMatrix.SetElement(i * size + j, 1, (double)i / (double)(size - 1)); } } return jamaMatrix; }