/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2007-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.referencing.operation.builder; import java.util.List; import org.geotools.geometry.DirectPosition2D; import org.geotools.referencing.operation.builder.algorithm.TPSInterpolation; import org.geotools.referencing.operation.transform.IdentityTransform; import org.opengis.geometry.Envelope; import org.opengis.parameter.ParameterValueGroup; import org.opengis.referencing.NoSuchIdentifierException; import org.opengis.referencing.operation.MathTransform; import org.opengis.referencing.operation.TransformException; /** * Implementation of grid builder based on thin plate spline (TPS) algorithm * * @see <A HREF="http://elonen.iki.fi/code/tpsdemo/index.html">Pages about TPS</A> * * @author jezekjan * */ public class TPSGridBuilder extends WarpGridBuilder { /** * Constructs TPSGridBuilder from set of parameters. * @param vectors known shift vectors * @param dx width of gird cell * @param dy height of grid cells * @param env Envelope of generated grid * @throws TransformException */ public TPSGridBuilder(List<MappedPosition> vectors, double dx, double dy, Envelope env) throws TransformException, NoSuchIdentifierException { this(vectors, dx, dy, env, IdentityTransform.create(2)); } /** * Constructs TPSGridBuilder from set of parameters. The Warp Grid values are * calculated in transformed coordinate system. * @param vectors known shift vectors * @param dx width of gird cell * @param dy height of grid cells * @param envelope Envelope of generated grid * @param realToGrid Transformation from real to grid coordinates (when working with images) * @throws TransformException */ public TPSGridBuilder(List<MappedPosition> vectors, double dx, double dy, Envelope envelope, MathTransform realToGrid) throws TransformException, NoSuchIdentifierException { super(vectors, dx, dy, envelope, realToGrid); } protected float[] computeWarpGrid(GridParameters gridParams) throws TransformException { TPSInterpolation dxInterpolation = new TPSInterpolation(buildPositionsMap(0)); TPSInterpolation dyInterpolation = new TPSInterpolation(buildPositionsMap(1)); return interpolateWarpGrid(gridParams, dxInterpolation, dyInterpolation); } }