Hi,
I have added more algorithms for testing, patch is attached. Patched
mkgmap recognize following values for x-dem-interpolation:
bilinear
bicubic
bicubic-spline
bicubic-catmull
bicubic-hermite
I have prepared new set for testing:
http://files.mkgmap.org.uk/download/408/interpolation2.7z
For me bicubic-catmull looks like bicubic. Bicubic-spline looks inferior
and bicubic-hermite gives weird results, maybe something is wrong.
Still bicubic interpolation looks the best.
--
Best regards,
Andrzej
Index: src/uk/me/parabola/mkgmap/build/MapBuilder.java
===================================================================
--- src/uk/me/parabola/mkgmap/build/MapBuilder.java (revision 4081)
+++ src/uk/me/parabola/mkgmap/build/MapBuilder.java (working copy)
@@ -227,6 +227,12 @@
case "bicubic-spline":
demInterpolationMethod =
InterpolationMethod.BicubicSpline;
break;
+ case "bicubic-catmull":
+ demInterpolationMethod =
InterpolationMethod.BicubicCatmull;
+ break;
+ case "bicubic-hermite":
+ demInterpolationMethod =
InterpolationMethod.BicubicHermite;
+ break;
case "bilinear":
demInterpolationMethod = InterpolationMethod.Bilinear;
break;
Index: src/uk/me/parabola/mkgmap/reader/hgt/HGTConverter.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/hgt/HGTConverter.java (revision 4081)
+++ src/uk/me/parabola/mkgmap/reader/hgt/HGTConverter.java (working copy)
@@ -47,10 +47,11 @@
private int statRdrNull;
private int statRdrRes;
private InterpolationMethod interpolationMethod =
InterpolationMethod.Bicubic;
+ private double[][] interpolationMatrix = Cubic.BSPLINE;
public enum InterpolationMethod {
- Bilinear, Bicubic, BicubicSpline
+ Bilinear, Bicubic, BicubicSpline, BicubicCatmull, BicubicHermite
};
/**
@@ -139,7 +140,7 @@
if
(InterpolationMethod.Bicubic.equals(interpolationMethod)) {
h = (short)
Math.round(bicubicInterpolation(eleArray, qx, qy));
} else {
- Cubic interpolator = new
Cubic(Cubic.BSPLINE, eleArray);
+ Cubic interpolator = new
Cubic(interpolationMatrix, eleArray);
h = (short)
Math.round(interpolator.eval(qx, qy));
}
statBicubic++;
@@ -675,5 +676,17 @@
public void setInterpolationMethod(InterpolationMethod
interpolationMethod) {
this.interpolationMethod = interpolationMethod;
+ switch (interpolationMethod) {
+ case BicubicCatmull:
+ this.interpolationMatrix = Cubic.CATMULL_ROM;
+ break;
+ case BicubicHermite:
+ this.interpolationMatrix = Cubic.HERMITE;
+ break;
+ case BicubicSpline:
+ default:
+ this.interpolationMatrix = Cubic.BSPLINE;
+ break;
+ }
}
}
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev