Skip to content

Operations HomePage

Daniele Romagnoli edited this page Aug 27, 2015 · 4 revisions

Operations

In this page will be listed all the Operations modified for supporting no data values.

Currently the new JAI operations are:

Operations Registry

By default, JAI-EXT machinery is initialized to register these new JAI-EXT operations to replace the standard JAI ones. However, is it possible to [re]initialize it by invoking the JAIExt.initJAIEXT(boolean useJaiExtOps, boolean forceReInit) method to decide whether to use JaiExtOps as well as forcing a re-initialization of the registry.

Useful classes

The new versions of the Scale, Affine and Warp operation supports 3 new interpolators:

  • InterpolatorNearest.java for Nearest-Neighbor interpolation.
  • InterpolatorBilinear.java for Bilinear interpolation.
  • InterpolatorBicubic.java for Bicubic or Bicubic2 interpolation

All of them are extension of the abstract class Interpolation.java and implementations of InterpolationNoData interafce. They perform the 3 types of interpolations described above, but these interpolators also give the possibility to set a ROI or a No Data Range and then every interpolator will take in account the presence of them inside the calculations. These interpolators support every type of data, so they can be used with any kind of image, even for binary images. These interpolators are located inside the jt-utilities module of the project. A junit test-class called InterpTest.java is used for testing the functionality of this 3 interpolators. The interpolation object provided is important because it changes the final image: a wider interpolation kernel will slow the computation but the final result will be better(smoothed) than that of an image interpolated with a nearest-neighbor interpolation type.

All the operations which handle No Data use the subclasses of the abstract class Range.java. This class and its subclasses are located inside the jt-utilities module of the project. The 6 subclasses are used for supporting the 6 possible JAI data types (Byte, Unsigned Short, Short, Integer, Float, Double). All of these classes can be both normal and degenerated ranges. For the Double and Float data types it is possible to indicate if the NaN values should be considered inside or outside the range(for the No Data control, they must be considered inside it). All the Range subclasses can be instantiated from the RangeFactory.java class by indicating the Range bounds and if they are included, for Double and Float data the NaN control must be added.

Road Map

The current state of the project as well as its Roadmap can be seen at this link: JAI-EXT Roadmap