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

Reply via email to