|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--javax.media.jai.OperationDescriptorImpl | +--javax.media.jai.operator.MosaicDescriptor
An OperationDescriptor
describing the "Mosaic" operation
in the rendered mode.
The "Mosaic" operation creates a mosaic of two or more source images. This operation could be used for example to assemble a set of overlapping geospatially rectified images into a contiguous image. It could also be used to create a montage of photographs such as a panorama.
All source images are assumed to have been geometrically mapped into
a common coordinate space. The origin (minX, minY)
of
each image is therefore taken to represent the location of the respective
image in the common coordinate system of the source images. This
coordinate space will also be that of the destination image.
All source images must have the same data type and sample size for all bands and have the same number of bands as color components. The destination will have the same data type, sample size, and number of bands and color components as the sources.
The destination layout may be specified by an ImageLayout
hint
provided via a RenderingHints
supplied to the operation. If the
bounds specified in this manner intersect the union of the bounds of all
the sources then they will be used. Otherwise, the destination bounds will
be set to the union of all source image bounds. If the data type or sample
size specified by the layout hint do not match those of the sources, then
this portion of the hint will be ignored.
If sourceAlpha
is non-null
, then any non-
null
elements of the array must be single-band images
with the same data type and sample size as the sources.
The source threshold array parameter has maximum dimensions as
double[NUM_SOURCES][NUM_BANDS]
. Default values of the
thresholds actually used are defined as follows:
sourceThreshold[0][0]
is
1.0
.sourceThreshold[i] != null
and
sourceThreshold[i].length < NUM_BANDS
, then set
sourceThreshold[i][j] = sourceThreshold[i][0]
for all
1 <= j < NUM_BANDS
.sourceThreshold[i] == null
then set
sourceThreshold[i] = sourceThreshold[0]
.
The background value array parameter has maximum dimensions as
double[NUM_BANDS]
. Default values of the
background actually used are defined as follows:
backgroundValues[0]
is
0.0
.backgroundValues.length < NUM_BANDS
, then set
backgroundValues[j] = backgroundValues[0]
for all
1 <= j < NUM_BANDS
.
If a given destination position (x, y) is within the bounds
of M source images, then the destination pixel value
D(x, y) is computed using an algorithm selected on the
basis of the mosaicType
parameter value. If the destination
position is not within any source image, then the destination pixel value
is set to the specified background value.
If the mosaicType
parameter value is
MOSAIC_TYPE_BLEND
, then the destination pixel value
is computed as:
double[][][] s; // source pixel values double[][][] w; // derived source weight values double[][] d; // destination pixel values double weightSum = 0.0; for(int i = 0; i < M; i++) { weightSum += w[i][x][y]; } if(weightSum != 0.0) { double sourceSum = 0.0; for(int i = 0; i < M; i++) { sourceSum += s[i][x][y]*w[i][x][y]; } d[x][y] = sourceSum / weightSum; } else { d[x][y] = background; }where the index i is over the sources which contain (x, y). The destination pixel value is therefore a blend of the source pixel values at the same position.
If the mosaicType
parameter value is
MOSAIC_TYPE_OVERLAY
, then the destination pixel value
is computed as:
d[x][y] = background; for(int i = 0; i < M; i++) { if(w[i][x][y] != 0.0) { d[x][y] = s[i][x][y]; break; } }The destination pixel value is therefore the value of the first source pixel at the same position for which the derived weight value at the same position is non-zero.
The derived weight values for the ith source are determined from
the corresponding sourceAlpha
, sourceROI
, and
sourceThreshold
parameters as follows where for
illustration purposes it is assumed that any alpha values range over
[0.0, 1.0] with 1.0 being opaque:
// Set flag indicating whether to interpret alpha values as bilevel. boolean isAlphaBitmask = !(mosaicType.equals(MOSAIC_TYPE_BLEND) && sourceAlpha != null && !(sourceAlpha.length < NUM_SOURCES)); if(!isAlphaBitmask) { for(int i = 0; i < NUM_SOURCES; i++) { if(sourceAlpha[i] == null) { isAlphaBitmask = true; break; } } } // Derive source weights from the supplied parameters. w[i][x][y] = 0.0; if(sourceAlpha != null && sourceAlpha[i] != null) { w[i][x][y] = sourceAlpha[i][x][y]; if(isAlphaBitmask && w[i][x][y] > 0.0) { w[i][x][y] = 1.0; } } else if(sourceROI != null && sourceROI[i] != null && sourceROI[i].contains(x,y)) { w[i][x][y] = 1.0; } else if(s[i][x][y] >= sourceThreshold[i]) { // s[i][x][y] = source value w[i][x][y] = 1.0; }
As illustrated above, the interpretation of the alpha values will vary
depending on the values of the parameters supplied to the operation. If
and only if mosaicType
equals MOSAIC_TYPE_BLEND
and an alpha mask is available for each source will the alpha values be
treated as arbitrary values as for Transparency.TRANSLUCENT
. In
all other cases the alpha values will be treated as bilevel values
as for Transparency.BITMASK
.
It should be remarked that the MOSAIC_TYPE_BLEND
algorithm
applied when the weights are treated as bilevel values is equivalent to
averaging all non-transparent source pixels at a given position. This
in effect intrinsically provides a third category of mosaicking. The
available categories are summarized in the following table.
Mosaic Type | Transparency Type | Category |
---|---|---|
MOSAIC_TYPE_BLEND |
BITMASK |
Average |
MOSAIC_TYPE_BLEND |
TRANSLUCENT |
Alpha Blend |
MOSAIC_TYPE_OVERLAY |
BITMASK || TRANSLUCENT |
Superposition |
Name | Value |
---|---|
GlobalName | Mosaic |
LocalName | Mosaic |
Vendor | com.sun.media.jai |
Description | Creates a mosaic of two or more rendered images. |
DocURL | http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/operator/MosaicDescriptor.html |
Version | 1.0 |
arg0Desc | Mosaicking type. |
arg1Desc | Source alpha masks. |
arg2Desc | Source region of interest masks. |
arg3Desc | Source threshold values. |
arg4Desc | Destination background value. |
Name | Class Type | Default Value |
---|---|---|
mosaicType | javax.media.jai.operator.MosaicType | MOSAIC_TYPE_OVERLAY |
sourceAlpha | javax.media.jai.PlanarImage[] | null |
sourceROI | javax.media.jai.ROI[] | null |
sourceThreshold | double[][] | double[][] {{1.0}} |
backgroundValues | double[] | double[] {0.0} |
Field Summary | |
static MosaicType |
MOSAIC_TYPE_BLEND
Destination pixel equals alpha blend of source pixels. |
static MosaicType |
MOSAIC_TYPE_OVERLAY
Destination pixel equals first opaque source pixel. |
Fields inherited from class javax.media.jai.OperationDescriptorImpl |
resources, sourceNames, supportedModes |
Fields inherited from interface javax.media.jai.OperationDescriptor |
NO_PARAMETER_DEFAULT |
Constructor Summary | |
MosaicDescriptor()
Constructor. |
Method Summary | |
static RenderedOp |
create(RenderedImage[] sources,
MosaicType mosaicType,
PlanarImage[] sourceAlpha,
ROI[] sourceROI,
double[][] sourceThreshold,
double[] backgroundValues,
RenderingHints hints)
Creates a mosaic of two or more rendered images. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
public static final MosaicType MOSAIC_TYPE_BLEND
public static final MosaicType MOSAIC_TYPE_OVERLAY
Constructor Detail |
public MosaicDescriptor()
Method Detail |
public static RenderedOp create(RenderedImage[] sources, MosaicType mosaicType, PlanarImage[] sourceAlpha, ROI[] sourceROI, double[][] sourceThreshold, double[] backgroundValues, RenderingHints hints)
Creates a ParameterBlockJAI
from all
supplied arguments except hints
and invokes
JAI.create(String,ParameterBlock,RenderingHints)
.
sources
- RenderedImage
sources.mosaicType
- Mosaicking type.
May be null
.sourceAlpha
- May be null
.sourceAlpha
- Source alpha masks.
May be null
.sourceROI
- Source region of interest masks.
May be null
.sourceThreshold
- Source threshold values.
May be null
.backgroundValues
- Destination background value.
May be null
.hints
- The RenderingHints
to use.
May be null
.RenderedOp
destination.IllegalArgumentException
- if any source is null
.JAI
,
ParameterBlockJAI
,
RenderedOp
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |