Skip to content

Do Bicubic Interpolation on Entire Tile - #1708

Merged
lossyrob merged 4 commits into
locationtech:masterfrom
jamesmcclain:fix/jamesmcclain/bicubic
Oct 26, 2016
Merged

lossyrob merged 4 commits into
locationtech:masterfrom
jamesmcclain:fix/jamesmcclain/bicubic

Conversation

@jamesmcclain

@jamesmcclain jamesmcclain commented Oct 25, 2016 •

Copy link
Copy Markdown
Member

This changeset causes bicubic interpolation (spline, convolutional, and lanczos) to be done on the entire input tile, rather than just in the interior. Previously, the code would fall back to bilinear interpolation on the edges and corners, which could cause unexpected behavior.

Fixes #1554

Before:

GeoTiff:
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND


NearestNeighbor:
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND
  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND
  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND


Bilinear:
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND


CubicConvolution:
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND  10.0
  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND  10.0
  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND
  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND
  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND


CubicSpline:
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND  10.0
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND  10.0
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND


Lanczos:
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  9.89    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  9.89  9.89  9.89    ND    ND    ND    ND    ND    ND
  10.0  9.89  9.89  9.89  9.89  9.89    ND    ND    ND  10.0
  10.0  9.89  9.89  9.89  9.89  9.89    ND    ND    ND  10.0
  10.0  9.89  9.89  9.89    ND    ND    ND    ND    ND    ND
  10.0  9.89    ND    ND    ND    ND    ND    ND    ND    ND
  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND

After:

GeoTiff:
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND


NearestNeighbor:
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND
  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND
  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND


Bilinear:
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0
  10.0  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND


CubicConvolution:
    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND
  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND    ND
  10.0    ND    ND    ND    ND    ND    ND    ND    ND    ND
    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND


CubicSpline:
    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND
  10.0  10.0  10.0  10.0  10.0  10.0    ND    ND    ND    ND
  10.0  10.0  10.0  10.0    ND    ND    ND    ND    ND    ND
  10.0  10.0    ND    ND    ND    ND    ND    ND    ND    ND
    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND


Lanczos:
    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
  9.89  9.89    ND    ND    ND    ND    ND    ND    ND    ND
  9.89  9.89  9.89  9.89    ND    ND    ND    ND    ND    ND
  9.89  9.89  9.89  9.89  9.89  9.89    ND    ND    ND    ND
  9.89  9.89  9.89  9.89  9.89  9.89    ND    ND    ND    ND
  9.89  9.89  9.89  9.89    ND    ND    ND    ND    ND    ND
  9.89  9.89    ND    ND    ND    ND    ND    ND    ND    ND
    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND
    ND    ND    ND    ND    ND    ND    ND    ND    ND    ND

No visible artifacts are produced when doing a cubic-spline ingest:
out

James McClain added 4 commits October 25, 2016 15:28
Rather than falling back to bilinear interpolation on the edges and
corners, function values are now extrapolated (in nearest-neighbor
fashion) so that derivatives can be computed around the periphery.  Of
course, this will cause the derivatives to decay rapidly the further one
gets from the interior of the tile, but it works better than the
previous behavior.

@lossyrob lossyrob left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lgtm

@lossyrob
lossyrob merged commit 73282b7 into locationtech:master Oct 26, 2016
@jamesmcclain
jamesmcclain deleted the fix/jamesmcclain/bicubic branch October 26, 2016 14:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants