Interface RankMorphology
- All Superinterfaces:
ArrayProcessor
,ArrayProcessorWithContextSwitching
,Morphology
- All Known Implementing Classes:
AbstractRankMorphology
,BasicRankMorphology
,ContinuedRankMorphology
,TiledRankMorphology
Rank operations over n-dimensional matrices
:
percentile, rank, mean between given percentiles or values, etc.,
calculated on all matrix elements in an aperture with the fixed shape, represented by Pattern
class.
It is supposed that the type of matrix elements is one of primitive Java types
(boolean, char, byte, short, int,
long, float, double) and, so, represents an integer or a real number,
according to comments to PFixedArray.getLong(long)
and PArray.getDouble(long)
methods.
In 2-dimensional case, these operations can be used for processing grayscale digital images.
The simplest rank operation is a percentile, for example, minimum, maximum or median.
In the case of maximum, the percentile is strictly equivalent to dilation — the basic
operation of the mathematical morphology, offered by Morphology
interface.
In the case of minimum, the percentile by some pattern P is equivalent to erosion
by the symmetric pattern P.symmetric()
.
It allows to consider rank operations as an extension of the operation set of
the traditional mathematical morphology. Really, this interface extends
Morphology
interface, and it is supposed, by definition, that
dilation
(m,pattern)percentile
(m,c*N,pattern)erosion
(m,pattern)percentile
(m,c*N,pattern.symmetric()
)pointCount()
-1BasicRankMorphology.getInstance
method).
Below is the formal definition of 5 basic rank operations with the given pattern P and matrix M: percentile, rank, mean between 2 percentiles, mean between 2 ranks and aperture sum, calculated by this class.
- For any integer point, or position
x = (x0, x1, ..., xn−1) ,n=M. , the aperture of this point, or the aperture at the position x, is a set of pointsdimCount()
x−pi = (x0−pi0, x1−pi1, ..., xn−1−pi,n−1) for allpi∈P (points
of the pattern P). We always consider that the point x lies inside M matrix (0≤xk<M. for all k), but this condition can be not true for points of the aperturedim
(k)x−pi .
- For every point
x' = x−pi of the aperture we consider the corresponding value vi of the source matrix M. The precise definition of the value can depend on implementation of this interface. Usually, if the point lies inside the matrix (0≤xk−pi,k<M. for all k), it is the value of the element (integer:dim
(k)PFixedArray.getLong(long)
, if the type of the matrix elements is boolean, char, byte, short, int or long, or real:PArray.getDouble(long)
, if the element type is float or double) of the underlying arrayM. with an indexarray()
M. , whereindex
(x'0, x'1, ..., x'n−1)x'k = xk−pi,k . In particular, it is true for all implementations offered by this package. If the pointx' = x−pi lies outside the matrix (x'k<0 orx'k≥M. for some k), then:dim
(k)- in the
BasicRankMorphology
implementation, vi is the value of the element (PFixedArray.getLong(long)
for the fixed-point case orPArray.getDouble(long)
for the floating-point case) of the underlying arrayM. with an indexarray()
M. ;pseudoCyclicIndex
(x'0, x'1, ..., x'n−1) - in the
ContinuedRankMorphology
implementation, vi is the calculated according to the continuation mode, passed toContinuedRankMorphology.getInstance(RankMorphology, Matrix.ContinuationMode)
method; - other implementations may offer other ways for calculating vi.
- in the
- So, for every point x we have an aperture, consisting of
N=P. "neighbour" pointspointCount()
x−pi , and a corresponding set of integer or real values vi,i=0,1,...,N−1 . Then we consider a histogram built on the base of vi values — the histogram, corresponding to the point x. Namely, this histogram is an array of non-negative integer numbersb[w] , 0≤w<M, where every element b[w] represents the number of occurrence of the value w in array A, consisting of the following N integer elementsa0, a1, ..., xN−1 :ai = min(M−1, ⌊max(0, vi) * σ⌋) (here and below ⌊y⌋ means the integer part of y or (long)y for non-negative numbers, M and σ are defined below); in other words, ai is an integer part ofσvi , truncated to0..M−1 range of allowed histogram indexes;- the histogram length M is the global parameter of this object and is equal to some power of two:
M=2μ ,μ=0,1,2... There is a guarantee that if the matrix is fixed-point (M. is boolean, char, byte, short, int or long), thenMatrix.elementType()
μ≤β , where β is the number of bits per element:β = M. . If this object is an instance ofarray()
.bitsPerElement()
BasicRankMorphology
, thenμ = bitLevels[bitLevels.length-1] for floating-point matrix elements (M. is float or double) orMatrix.elementType()
μ = min(bitLevels[bitLevels.length-1], β) for fixed-point matrix elements, where bitLevels is an array ofbit levels
, specified while instantiating this class via the last argument ofBasicRankMorphology.getInstance(ArrayContext, double, CustomRankPrecision)
method; - the real number σ ("scale") is equal to M for a floating-point matrix
or equal to
M/2β=2μ−β ,β = M. for a fixed-point matrix. So, in the case of a fixed-point matrix there is a guarantee thatarray()
.bitsPerElement()
1/σ is a positive integer number (2β−μ ).
0.. is split intoArrays.maxPossibleValue
(M.elementType()
,1.0)M=2μ histogram bars and all aperture values vi are distributed between these bars; elements, which are out of the allowed range, are distributed between the first and last bars. In the simplest case of byte elements, M is usually chosen to be 256; thenσ=1.0 andai = vi (because byte elements, in terms of AlgART libraries, cannot be out of 0..255 range).
- The histogram
b[0], b[1], ..., b[M−1] , specified above, is interpreted in terms ofHistogram
andSummingHistogram
classes. Namely, we define the following rank characteristics:- the percentile with the given real index r is
v(r)/σ , wherev(r) function is defined in comments toHistogram
class; - the rank of the given real value v is
r(v*σ) , wherer(v) function is defined in comments toHistogram
class; - the mean between 2 given percentiles with the real indexes
r1 and r2 is
(S(r2)−S(r1)) / ((r2−r1)*σ) ifr1<r2 or some reserved value filler ifr1≥r2 , whereS(r) function is defined in comments toSummingHistogram
class; - the mean between 2 given values, the real numbers
v1 and v2, is
(s(v2*σ)−s(v1*σ)) / (r(v2*σ)−r(v1*σ))*σ) ifv1<v2 andr(v1*σ)<r(v2*σ) , wherer(v) function is defined in comments toHistogram
class ands(v) function is defined in comments toSummingHistogram
class. If the conditionsv1<v2 andr(v1*σ)<r(v2*σ) are not fulfilled, we use one of 4 following modes of calculation:- if any of these two conditions is not fulfilled, it is equal to some reserved value filler;
- if any of these two conditions is not fulfilled, it is equal to v1;
- if any of these two conditions is not fulfilled, it is equal to v2;
- (most useful definition)
- if v1≥v2, it is equal to (v1+v2)/2;
- if v1<v2 and
r(v2*σ)=r(v1*σ)=0 , it is equal to v2 (see also );CountOfValues.isLeftBound()
- if v1<v2 and
r(v2*σ)=r(v1*σ)=N , it is equal to v1 (see also );CountOfValues.isRightBound()
- in other cases, it is equal to (v1+v2)/2.
v1<v2 andr(v1*σ)<r(v2*σ) are not fulfilled" means, that eitherv1≥v2 , orv1<v2 andr(v1*σ)=r(v2*σ) . The last situation usually occurs "outside" the histogram, when both v1 and v2 values are less than (or equal to) the minimal value in the aperture or greater than (or equal to) the maximum value in the aperture. However, while using the simple histogram model, such situation is also possible on a sparse histogram with many zero bars; - the aperture sum is just a usual sum of all values
v0+v1+...+vN−1 — the only rank characteristic which does not use the histogram b[k]. (Of course, you can also calculate the mean of all values on the base of this sum: it is enough to divide the sum by N.)
Histogram
andSummingHistogram
classes). The used model is chosen while instantiating this class, usually viaCustomRankPrecision.interpolated()
flag in the argument ofCustomRankPrecision
class: true value ("interpolated") means the precise model, false means the simple one.
Note 2: for int, long, float and double element type of the source matrix M and for all characteristics, excepting the aperture sum, this definition supposes that all matrix elements lie in the "standard range":0..Integer/Long.MAX_VALUE (all non-negative values) for integers or0.0..1.0 for floating-point elements. If some matrix elements are negative, they are interpreted as 0; if some elements of a floating-point matrix are greater than1.0 , they are interpreted as1.0 . For floating-point case, the histogram length M actually specifies the precision of calculations: the source elements are represented with the precision1/M . The aperture sum characteristic is an exception from this rule: aperture sums are calculated as usual sums of the source elements vi with double precision.
Note 3: for floating-point case, if the value of some element vi of the source matrix M inside the aperture is NaN (Float.NaN for float type, Double.NaN for double type), this situation does not lead to an exception, but the resulting values of all characteristics, listed above, are undocumented.
Note 4: unlike this, if some arguments of the characteristics, listed above — the real index r for the percentile, the real value v for the rank, the real indexes r1 and r2 for the mean between percentiles or the real values v1 and v2 for the mean between values — are NaN, then any attempt to calculate these characteristics by methods of this interface can lead to IllegalArgumentException. - the percentile with the given real index r is
This interface provides method for calculating the described 5 rank characteristics for every
integer point x lying in the matrix M. The resulting characteristics are returned
in the result matrix with the same dimensions as M. The necessary arguments —
the real index r for the percentile, the real value v for the rank,
the real indexes r1 and r2 for the mean between percentiles
or the real values v1 and v2 for the mean between values —
are retrieved from the corresponding element (with the index
index
(x0, x1, ..., xn−1)built-in array
of some additional matrix or pair of matrices,
passed to the methods, by PArray.getDouble(long)
method. It is supposed that those matrices
have the same dimensions as M. For the percentile and the mean between percentiles,
there are simplified versions of the methods, which use the constant rank indexes instead of matrices of
indexes.
Most of methods of this interface allow to return not only floating-point, but also integer result matrix. In this case, the real rank characteristics, defined above in the section 4, are rounded by some rules, that are specified in comments to the concrete methods.
For every rank characteristics this interface offers 3 methods for calculating it. Below are some comments about them.
- The first version is always called "asOperation", for example,
asPercentile
. This method returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the necessary rank characteristic of the source matrix with the specified pattern (aperture shape). The result of such method is usually "lazy", that means that this method finishes immediately and all actual calculations are performed while getting elements of the returned matrix. It is true for all implementations provided by this package. However, some implementations may not support lazy execution; then the method may be equivalent to the second version described below. Note that the sequential access to the lazy result, returned by this method (viaArray.getData
method, called for thebuilt-in array
of the returned matrix), usually works much faster than the random access to elements of the matrix. - The second version is called "operation", for example,
percentile
. This method always returns actual (non-lazy) updatable result:Matrix<? extends UpdatablePArray> . This method can work essentially faster than an access to the lazy matrix returned by the first variant of the method (for example, than copying it into a new matrix). In implementations, offered by this package, there are no difference if the source matrix src (for rank operations, baseMatrix) is direct accessible: src.array()
instanceofDirectAccessible
&& ((DirectAccessible)src.array()
).hasJavaArray()
. If the source matrix is not direct accessible, the implementations, offered by this package, useStreamingApertureProcessor
technique to accelerate processing. Calculating aperture sums is an exception:functionOfSum
method uses some optimization for some kinds of patterns and can work much faster than accessing toasFunctionOfSum
result. - The third version is also called "operation", but it is a void method:
for example,
percentile(Matrix, Matrix, Matrix, Pattern)
. The result matrix is passed via first argument named dest and supposed to be allocated before calling the method. This way allows to save memory and time, if you need to perform several rank operation, because you can use the same matrices for temporary results. In addition, these methods allow to choose the type of element of the resulting matrix for any operation. The precise rules of type conversions are described in comments to concrete methods.
This package provides the following basic methods for creating objects, implementing this interface:
BasicRankMorphology.getInstance(ArrayContext, double, CustomRankPrecision)
;ContinuedRankMorphology.getInstance(RankMorphology, Matrix.ContinuationMode)
.
Warning: all implementations of this interface, provided by this package, can process only patterns
where pointCount()
≤Integer.MAX_VALUEMorphology
), implemented by classes of this package, which have Pattern
argument,
can throw TooManyPointsInPatternError
or OutOfMemoryError in the same situations as Pattern.points()
method.
Warning: the methods of this interface, which save results into the passed dest
matrix (like percentile(Matrix, Matrix, Matrix, Pattern)
),
as well as any attempts to read the "lazy" results (of the methods
like asPercentile(Matrix, Matrix, Pattern)
),
can be non-atomic regarding the failure, if the arguments of the calculated rank characteristics —
the real index r for the percentile, the real value v for the rank,
the real indexes r1 and r2 for the mean between percentiles
or the real values v1 and v2 for the mean between values —
are floating-point NaN values for some aperture positions. In this case,
it is possible that the result will be partially filled, and only after this the NaN value will lead to
IllegalArgumentException.
The classes, implementing this interface, are immutable and thread-safe: there are no ways to modify settings of the created instance.
- Author:
- Daniel Alievsky
-
Nested Class Summary
Nested classes/interfaces inherited from interface net.algart.matrices.morphology.Morphology
Morphology.SubtractionMode
-
Field Summary
Modifier and TypeFieldDescriptionstatic final double
Special value of filler argument of methods, calculating mean between 2 values, which activates the mode C of calculation: ifr(v1*σ)≥r(v2*σ) , the mean is considered to be equal v2.static final double
Special value of filler argument of methods, calculating mean between 2 values, which activates the mode B of calculation: ifr(v1*σ)≥r(v2*σ) , the mean is considered to be equal v1.static final double
Special value of filler argument of methods, calculating mean between 2 values, which activates the mode D of calculation. -
Method Summary
Modifier and TypeMethodDescriptionasFunctionOfPercentilePair
(Matrix<? extends PArray> src, double percentileIndex1, double percentileIndex2, Pattern pattern, Func processingFunc) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the result of some given functionf(v, v1,v2) of the source matrix v and two percentiles v1,v2 of the source matrix by the specified pattern.asFunctionOfPercentilePair
(Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes1, Matrix<? extends PArray> percentileIndexes2, Pattern pattern, Func processingFunc) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the result of some given functionf(v, v1,v2) of the source matrix v and two percentiles v1,v2 of the source matrix by the specified pattern.asFunctionOfSum
(Matrix<? extends PArray> src, Pattern pattern, Func processingFunc) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the result of some given functionf(S) of the aperture sum S of the source matrix by the specified pattern.Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the mean of the source matrix by the specified pattern.asMeanBetweenPercentiles
(Matrix<? extends PArray> src, double fromPercentileIndex, double toPercentileIndex, Pattern pattern, double filler) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the mean between 2 percentiles of the source matrix by the specified pattern.asMeanBetweenPercentiles
(Matrix<? extends PArray> src, Matrix<? extends PArray> fromPercentileIndexes, Matrix<? extends PArray> toPercentileIndexes, Pattern pattern, double filler) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the mean between 2 percentiles of the source matrix by the specified pattern.asMeanBetweenValues
(Matrix<? extends PArray> src, Matrix<? extends PArray> minValues, Matrix<? extends PArray> maxValues, Pattern pattern, double filler) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the mean between 2 values of the source matrix by the specified pattern.asPercentile
(Matrix<? extends PArray> src, double percentileIndex, Pattern pattern) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the percentile of the source matrix by the specified pattern.asPercentile
(Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes, Pattern pattern) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the percentile of the source matrix by the specified pattern.asRank
(Class<? extends T> requiredType, Matrix<? extends PArray> baseMatrix, Matrix<? extends PArray> rankedMatrix, Pattern pattern) Returns an immutable view of the passed baseMatrix matrix, such that any reading data from it calculates and returns the ranks of some given values v regarding the source matrix baseMatrix with the specified pattern.context
(ArrayContext newContext) Switches the context: returns an instance, identical to this one excepting that it uses the specified newContext for all operations.Matrix<? extends UpdatablePArray>
functionOfPercentilePair
(Matrix<? extends PArray> src, double percentileIndex1, double percentileIndex2, Pattern pattern, Func processingFunc) Returns a new updatable matrix, containing the result of some given functionf(v, v1,v2) of the source matrix v and two percentiles v1,v2 of the source matrix by the specified pattern.Matrix<? extends UpdatablePArray>
functionOfPercentilePair
(Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes1, Matrix<? extends PArray> percentileIndexes2, Pattern pattern, Func processingFunc) Returns a new updatable matrix, containing the result of some given functionf(v, v1,v2) of the source matrix v and two percentiles v1,v2 of the source matrix by the specified pattern.void
functionOfPercentilePair
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, double percentileIndex1, double percentileIndex2, Pattern pattern, Func processingFunc) Equivalent tofunctionOfPercentilePair(Matrix, double, double, Pattern, Func)
method, but the result matrix will be placed in the dest argument.void
functionOfPercentilePair
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes1, Matrix<? extends PArray> percentileIndexes2, Pattern pattern, Func processingFunc) Equivalent tofunctionOfPercentilePair(Matrix, Matrix, Matrix, Pattern, Func)
method, but the result matrix will be placed in the dest argument.Matrix<? extends UpdatablePArray>
functionOfSum
(Matrix<? extends PArray> src, Pattern pattern, Func processingFunc) Returns a new updatable matrix, containing the result of some given functionf(S) of the aperture sum S of the source matrix by the specified pattern.void
functionOfSum
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Pattern pattern, Func processingFunc) Equivalent tofunctionOfSum(Matrix, Pattern, Func)
method, but the result matrix will be placed in the dest argument.Matrix<? extends UpdatablePArray>
Returns a new updatable matrix, containing the mean of the source matrix by the specified pattern.void
Equivalent tomean(Matrix, Pattern)
method, but the result matrix will be placed in the dest argument.Matrix<? extends UpdatablePArray>
meanBetweenPercentiles
(Matrix<? extends PArray> src, double fromPercentileIndex, double toPercentileIndex, Pattern pattern, double filler) Returns a new updatable matrix, containing the mean between 2 percentiles of the source matrix by the specified pattern.Matrix<? extends UpdatablePArray>
meanBetweenPercentiles
(Matrix<? extends PArray> src, Matrix<? extends PArray> fromPercentileIndexes, Matrix<? extends PArray> toPercentileIndexes, Pattern pattern, double filler) Returns a new updatable matrix, containing the mean between 2 percentiles of the source matrix by the specified pattern.void
meanBetweenPercentiles
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, double fromPercentileIndex, double toPercentileIndex, Pattern pattern, double filler) Equivalent tomeanBetweenPercentiles(Matrix, double, double, Pattern, double)
method, but the result matrix will be placed in the dest argument.void
meanBetweenPercentiles
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> fromPercentileIndexes, Matrix<? extends PArray> toPercentileIndexes, Pattern pattern, double filler) Equivalent tomeanBetweenPercentiles(Matrix, Matrix, Matrix, Pattern, double)
method, but the result matrix will be placed in the dest argument.Matrix<? extends UpdatablePArray>
meanBetweenValues
(Matrix<? extends PArray> src, Matrix<? extends PArray> minValues, Matrix<? extends PArray> maxValues, Pattern pattern, double filler) Returns a new updatable matrix, containing the mean between 2 values of the source matrix by the specified pattern.void
meanBetweenValues
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> minValues, Matrix<? extends PArray> maxValues, Pattern pattern, double filler) Equivalent tomeanBetweenValues(Matrix, Matrix, Matrix, Pattern, double)
method, but the result matrix will be placed in the dest argument.Matrix<? extends UpdatablePArray>
percentile
(Matrix<? extends PArray> src, double percentileIndex, Pattern pattern) Returns a new updatable matrix, containing the percentile of the source matrix by the specified pattern.Matrix<? extends UpdatablePArray>
percentile
(Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes, Pattern pattern) Returns a new updatable matrix, containing the percentile of the source matrix by the specified pattern.void
percentile
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, double percentileIndex, Pattern pattern) Equivalent topercentile(Matrix, double, Pattern)
method, but the result matrix will be placed in the dest argument.void
percentile
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes, Pattern pattern) Equivalent topercentile(Matrix, Matrix, Pattern)
method, but the result matrix will be placed in the dest argument.rank
(Class<? extends T> requiredType, Matrix<? extends PArray> baseMatrix, Matrix<? extends PArray> rankedMatrix, Pattern pattern) Returns a new updatable matrix, containing the rank of some given values v regarding the source matrix baseMatrix with the specified pattern.void
rank
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> baseMatrix, Matrix<? extends PArray> rankedMatrix, Pattern pattern) Equivalent torank(Class, Matrix, Matrix, Pattern)
method, but the result matrix will be placed in the dest argument and the required type will be chosen automatically asdest. .type
(PArray.class)Methods inherited from interface net.algart.arrays.ArrayProcessor
context
Methods inherited from interface net.algart.matrices.morphology.Morphology
asDilation, asErosion, beucherGradient, closing, dilation, dilation, dilation, dilation, dilationErosion, erosion, erosion, erosion, erosion, erosionDilation, isPseudoCyclic, maskedDilationErosion, maskedErosionDilation, opening, weakDilation, weakErosion
-
Field Details
-
FILL_MIN_VALUE
static final double FILL_MIN_VALUESpecial value of filler argument of methods, calculating mean between 2 values, which activates the mode B of calculation: ifr(v1*σ)≥r(v2*σ) , the mean is considered to be equal v1. See thecomments to this class
, section 4 about the "mean between 2 values" term.This constant can be used with
asMeanBetweenValues(Matrix, Matrix, Matrix, Pattern, double)
,meanBetweenValues(Matrix, Matrix, Matrix, Pattern, double)
andmeanBetweenValues(Matrix, Matrix, Matrix, Matrix, Pattern, double)
methods.This constant contains Double.NEGATIVE_INFINITY value, which is usually useless in a role of the ordinary filler for the mode A of calculations.
- See Also:
-
FILL_MAX_VALUE
static final double FILL_MAX_VALUESpecial value of filler argument of methods, calculating mean between 2 values, which activates the mode C of calculation: ifr(v1*σ)≥r(v2*σ) , the mean is considered to be equal v2. See thecomments to this class
, section 4 about the "mean between 2 values" term.This constant can be used with
asMeanBetweenValues(Matrix, Matrix, Matrix, Pattern, double)
,meanBetweenValues(Matrix, Matrix, Matrix, Pattern, double)
andmeanBetweenValues(Matrix, Matrix, Matrix, Matrix, Pattern, double)
methods.This constant contains Double.POSITIVE_INFINITY value, which is usually useless in a role of the ordinary filler for the mode A of calculations.
- See Also:
-
FILL_NEAREST_VALUE
static final double FILL_NEAREST_VALUESpecial value of filler argument of methods, calculating mean between 2 values, which activates the mode D of calculation. In this case:- if v1≥v2, the mean is considered to be equal to (v1+v2)/2;
- if v1<v2 and
r(v2*σ)=r(v1*σ)=0 , the mean is considered to be equal to v2 (see also );CountOfValues.isLeftBound()
- if v1<v2 and
r(v2*σ)=r(v1*σ)=N , the mean is considered to be equal to v1 (see also );CountOfValues.isRightBound()
- in other cases,
if
r(v1*σ)=r(v2*σ) , the mean is considered to be equal to (v1+v2)/2.
comments to this class
, section 4 about the "mean between 2 values" term.This constant can be used with
asMeanBetweenValues(Matrix, Matrix, Matrix, Pattern, double)
,meanBetweenValues(Matrix, Matrix, Matrix, Pattern, double)
andmeanBetweenValues(Matrix, Matrix, Matrix, Matrix, Pattern, double)
methods.This constant contains Double.NaN value, which is usually useless in a role of the ordinary filler for the mode A of calculations.
Warning: because this constant is Double.NaN, according to rules of Java language, you must not compare any numbers with this constant! A check like
if (x == RankMorphology.FILL_NEAREST_VALUE) { ... }
always returns false. You should use Double.isNaN(x) call instead.- See Also:
-
-
Method Details
-
context
Description copied from interface:ArrayProcessorWithContextSwitching
Switches the context: returns an instance, identical to this one excepting that it uses the specified newContext for all operations. The returned instance is usually a clone of this one, but there is no guarantees that it is a deep clone. Usually, the returned instance is used only for performing asubtask
of the full task.- Specified by:
context
in interfaceArrayProcessorWithContextSwitching
- Specified by:
context
in interfaceMorphology
- Parameters:
newContext
- another context, used by the returned instance; may be null.- Returns:
- new instance with another context.
-
asPercentile
Matrix<? extends PArray> asPercentile(Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes, Pattern pattern) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the percentile of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "percentile" term. The real index r of the percentile for every element of the result is equal to the corresponding element of percentileIndexes matrix. Theelement type
of the created matrix is the same as the element type of the source one.If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real percentile
v(r)/σ , defined in the comments to this class. In this case, this method, instead of the real valuev(r)/σ , returns an integerw/σ , where w is:- either the integer result of
, if this object works in the simple histogram model (where b is the histogram, corresponding to every aperture position),Histogram.iValue
(b, (long)Math.floor(r)) - or the integer result of
, if it works in the precise histogram model.Histogram.iPreciseValue
(b, r)
1/σ is a positive integer number, andw/σ=w*2β−μ ,β = src. , μ is the binary logarithm of the histogram length M — see thearray()
.bitsPerElement()
comments to this class
, section 3. So, if μ is chosen less than the precision of this matrix β (8 for byte, 16 for short, etc.), thenβ−μ lowest bits in the result will be always zero. ForBasicRankMorphology
object, μ is chosen whileinstantiating this object
asmin(bitLevels[bitLevels.length-1], β) .- Parameters:
src
- the source matrix.percentileIndexes
- the matrix containing r argument: the indexes of the percentile for every element of the result.pattern
- the pattern: the shape of the aperture.- Returns:
- the "lazy" matrix containing the percentile of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
- either the integer result of
-
asPercentile
Matrix<? extends PArray> asPercentile(Matrix<? extends PArray> src, double percentileIndex, Pattern pattern) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the percentile of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "percentile" term. The real index r of the percentile is equal to percentileIndex argument for all aperture positions. Theelement type
of the created matrix is the same as the element type of the source one.This method is equivalent to
asPercentile
(src, src.matrix(Arrays.nDoubleCopies
(src.size(), percentileIndex), pattern)If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real percentile
v(r)/σ , defined in the comments to this class. In this case, this method, instead of the real valuev(r)/σ , returns an integerw/σ , where w is:- either the integer result of
, if this object works in the simple histogram model (where b is the histogram, corresponding to every aperture position),Histogram.iValue
(b, (long)Math.floor(r)) - or the integer result of
, if it works in the precise histogram model.Histogram.iPreciseValue
(b, r)
1/σ is a positive integer number, andw/σ=w*2β−μ ,β = src. , μ is the binary logarithm of the histogram length M — see thearray()
.bitsPerElement()
comments to this class
, section 3. So, if μ is chosen less than the precision of this matrix β (8 for byte, 16 for short, etc.), thenβ−μ lowest bits in the result will be always zero. ForBasicRankMorphology
object, μ is chosen whileinstantiating this object
asmin(bitLevels[bitLevels.length-1], β) .- Parameters:
src
- the source matrix.percentileIndex
- r argument of the percentile.pattern
- the pattern: the shape of the aperture.- Returns:
- the "lazy" matrix containing the percentile of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
- either the integer result of
-
percentile
Matrix<? extends UpdatablePArray> percentile(Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes, Pattern pattern) Returns a new updatable matrix, containing the percentile of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "percentile" term. The real index r of the percentile for every element of the result is equal to the corresponding element of percentileIndexes matrix. Theelement type
of the created matrix is the same as the element type of the source one.If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real percentile
v(r)/σ , defined in the comments to this class. In this case, this method, instead of the real valuev(r)/σ , returns an integerw/σ , where w is:- either the integer result of
, if this object works in the simple histogram model (where b is the histogram, corresponding to every aperture position),Histogram.iValue
(b, (long)Math.floor(r)) - or the integer result of
, if it works in the precise histogram model.Histogram.iPreciseValue
(b, r)
1/σ is a positive integer number, andw/σ=w*2β−μ ,β = src. , μ is the binary logarithm of the histogram length M — see thearray()
.bitsPerElement()
comments to this class
, section 3. So, if μ is chosen less than the precision of this matrix β (8 for byte, 16 for short, etc.), thenβ−μ lowest bits in the result will be always zero. ForBasicRankMorphology
object, μ is chosen whileinstantiating this object
asmin(bitLevels[bitLevels.length-1], β) .- Parameters:
src
- the source matrix.percentileIndexes
- the matrix containing r argument: the indexes of the percentile for every element of the result.pattern
- the pattern: the shape of the aperture.- Returns:
- the percentile of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
- either the integer result of
-
percentile
Matrix<? extends UpdatablePArray> percentile(Matrix<? extends PArray> src, double percentileIndex, Pattern pattern) Returns a new updatable matrix, containing the percentile of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "percentile" term. The real index r of the percentile is equal to percentileIndex argument for all aperture positions. Theelement type
of the created matrix is the same as the element type of the source one.This method is equivalent to
percentile
(src, src.matrix(Arrays.nDoubleCopies
(src.size(), percentileIndex), pattern)If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real percentile
v(r)/σ , defined in the comments to this class. In this case, this method, instead of the real valuev(r)/σ , returns an integerw/σ , where w is:- either the integer result of
, if this object works in the simple histogram model (where b is the histogram, corresponding to every aperture position),Histogram.iValue
(b, (long)Math.floor(r)) - or the integer result of
, if it works in the precise histogram model.Histogram.iPreciseValue
(b, r)
1/σ is a positive integer number, andw/σ=w*2β−μ ,β = src. , μ is the binary logarithm of the histogram length M — see thearray()
.bitsPerElement()
comments to this class
, section 3. So, if μ is chosen less than the precision of this matrix β (8 for byte, 16 for short, etc.), thenβ−μ lowest bits in the result will be always zero. ForBasicRankMorphology
object, μ is chosen whileinstantiating this object
asmin(bitLevels[bitLevels.length-1], β) .- Parameters:
src
- the source matrix.percentileIndex
- r argument of the percentile.pattern
- the pattern: the shape of the aperture.- Returns:
- the percentile of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
- either the integer result of
-
percentile
void percentile(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes, Pattern pattern) Equivalent topercentile(Matrix, Matrix, Pattern)
method, but the result matrix will be placed in the dest argument.If the
element type
of the passed dest matrix is the same as the element type of the source one, the result, saved in dest, will be identically equal to the result ofpercentile(Matrix, Matrix, Pattern)
method with the same src, percentileIndexes and pattern arguments. In other case, the result, saved in dest, will be equal toMatrices.asFuncMatrix
(true,Func.IDENTITY
, dest.array().type()
,percentile
(src, percentileIndexes, pattern))So, even if the precision of dest matrix is better than the precision of src — for example, if
src. is byte, butelementType()
dest. is double — this method does not try to calculate more precise percentile and rounds results likeelementType()
andasPercentile(Matrix, Matrix, Pattern)
methods.percentile(Matrix, Matrix, Pattern)
- Parameters:
dest
- the target matrix.src
- the source matrix.percentileIndexes
- the matrix containing r argument: the indexes of the percentile for every element of the result.pattern
- the pattern: the shape of the aperture.- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
percentile
void percentile(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, double percentileIndex, Pattern pattern) Equivalent topercentile(Matrix, double, Pattern)
method, but the result matrix will be placed in the dest argument.This method is equivalent to
percentile
(dest, src, src.matrix(Arrays.nDoubleCopies
(src.size(), percentileIndex), pattern)- Parameters:
dest
- the target matrix.src
- the source matrix.percentileIndex
- r argument of the percentile.pattern
- the pattern: the shape of the aperture.- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
asRank
<T extends PArray> Matrix<T> asRank(Class<? extends T> requiredType, Matrix<? extends PArray> baseMatrix, Matrix<? extends PArray> rankedMatrix, Pattern pattern) Returns an immutable view of the passed baseMatrix matrix, such that any reading data from it calculates and returns the ranks of some given values v regarding the source matrix baseMatrix with the specified pattern. See thecomments to this class
, section 4 about the "rank" term. The real value v for every element of the result is equal to the corresponding element of rankedMatrix matrix.The matrix, returned by this method, is immutable, and the class of its built-in array implements one of the basic interfaces
BitArray
,CharArray
,ByteArray
,ShortArray
,IntArray
,LongArray
,FloatArray
orDoubleArray
. The class of desired interface (one of 8 possible classes) must be passed as requiredType argument. So, it defines the element type of the returned matrix. The rules of casting the floating-point ranks to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.The element types of baseMatrix and rankedMatrix are usually equal. If they are different (
baseMatrix. ), this method replaces rankedMatrix withelementType()
!=rankedMatrix.elementType()
Matrices.asFuncMatrix
(true,Func.IDENTITY
, baseMatrix.array().type()
, rankedMatrix)before all other calculations. In other words, this method always casts the type of the ranked elements to the type of baseMatrix elements. As a result, we can be sure, that if the source baseMatrix matrix is fixed-point (boolean, char, byte, short, int or long elements), then the rank
r(v*σ) , according to the definition of the "rank" term, will be an integer number. In this case, you can specify requiredType=IntArray.class and get the precise rank without precision loss. Moreover, if you know that the number of points in the pattern (pattern. ) is less thanpointCount()
216=65536 or28=256 , it is enough to specify correspondingly requiredType=ShortArray.class or ByteArray.class.- Parameters:
requiredType
- the desired type of the built-in array in the returned matrix.baseMatrix
- the source matrix.rankedMatrix
- the matrix containing v argument: the values, the rank of which should be calculated.pattern
- the pattern: the shape of the aperture.- Returns:
- the "lazy" matrix containing the rank of the given values.
- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to baseMatrix.dimCount()
, or if requiredType is not one of classesBitArray
.class,CharArray
.class,ByteArray
.class,ShortArray
.class,IntArray
.class,LongArray
.class,FloatArray
.class orDoubleArray
.class.- See Also:
-
rank
<T extends PArray> Matrix<? extends T> rank(Class<? extends T> requiredType, Matrix<? extends PArray> baseMatrix, Matrix<? extends PArray> rankedMatrix, Pattern pattern) Returns a new updatable matrix, containing the rank of some given values v regarding the source matrix baseMatrix with the specified pattern. See thecomments to this class
, section 4 about the "rank" term. The real value v for every element of the result is equal to the corresponding element of rankedMatrix matrix.The matrix, returned by this method, is updatable, and the class of its built-in array implements one of the basic interfaces
UpdatableBitArray
,UpdatableCharArray
,UpdatableByteArray
,UpdatableShortArray
,UpdatableIntArray
,UpdatableLongArray
,UpdatableFloatArray
orUpdatableDoubleArray
. The class of desired interface (one of 8 possible classes) must be passed as requiredType argument. So, it defines the element type of the returned matrix. Instead of these classes, you can also pass one of corresponding immutable interfacesBitArray
,CharArray
,ByteArray
,ShortArray
,IntArray
,LongArray
,FloatArray
orDoubleArray
: the result will be the same. The rules of casting the floating-point ranks to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.The element types of baseMatrix and rankedMatrix are usually equal. If they are different (
baseMatrix. ), this method replaces rankedMatrix withelementType()
!=rankedMatrix.elementType()
Matrices.asFuncMatrix
(true,Func.IDENTITY
, baseMatrix.array().type()
, rankedMatrix)before all other calculations. In other words, this method always casts the type of the ranked elements to the type of baseMatrix elements. As a result, we can be sure, that if the source baseMatrix matrix is fixed-point (boolean, char, byte, short, int or long elements), then the rank
r(v*σ) , according to the definition of the "rank" term, will be an integer number. In this case, you can specify requiredType=IntArray.class and get the precise rank without precision loss. Moreover, if you know that the number of points in the pattern (pattern. ) is less thanpointCount()
216=65536 or28=256 , it is enough to specify correspondingly requiredType=ShortArray.class or ByteArray.class. The less result precision allows you to save memory.- Parameters:
requiredType
- the desired type of the built-in array in the returned matrix.baseMatrix
- the source matrix.rankedMatrix
- the matrix containing v argument: the values, the rank of which should be calculated.pattern
- the pattern: the shape of the aperture.- Returns:
- the rank of the given values.
- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to baseMatrix.dimCount()
, or if requiredType is not one of classesUpdatableBitArray
.class /BitArray
.class,UpdatableCharArray
.class /CharArray
.class,UpdatableByteArray
.class /ByteArray
.class,UpdatableShortArray
.class /ShortArray
.class,UpdatableIntArray
.class /IntArray
.class,UpdatableLongArray
.class /LongArray
.class,UpdatableFloatArray
.class /FloatArray
.class orUpdatableDoubleArray
.class /DoubleArray
.class.- See Also:
-
rank
void rank(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> baseMatrix, Matrix<? extends PArray> rankedMatrix, Pattern pattern) Equivalent torank(Class, Matrix, Matrix, Pattern)
method, but the result matrix will be placed in the dest argument and the required type will be chosen automatically asdest. . More precisely, the result, saved in dest, will be equal totype
(PArray.class)rank
(dest.array().type()
, baseMatrix, rankedMatrix, pattern)The element types of baseMatrix and rankedMatrix are usually equal. If they are different (
baseMatrix. ), this method replaces rankedMatrix withelementType()
!=rankedMatrix.elementType()
Matrices.asFuncMatrix
(true,Func.IDENTITY
, baseMatrix.array().type()
, rankedMatrix)before all other calculations. In other words, this method always casts the type of the ranked elements to the type of baseMatrix elements. As a result, we can be sure, that if the source baseMatrix matrix is fixed-point (boolean, char, byte, short, int or long elements), then the rank
r(v*σ) , according to the definition of the "rank" term, will be an integer number. In this case, you can specify requiredType=IntArray.class and get the precise rank without precision loss. Moreover, if you know that the number of points in the pattern (pattern. ) is less thanpointCount()
216=65536 or28=256 , it is enough to specify correspondingly requiredType=ShortArray.class or ByteArray.class. The less result precision allows you to save memory.- Parameters:
dest
- the target matrix.baseMatrix
- the source matrix.rankedMatrix
- the matrix containing v argument: the values, the rank of which should be calculated.pattern
- the pattern: the shape of the aperture.- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to baseMatrix.dimCount()
.- See Also:
-
asMeanBetweenPercentiles
Matrix<? extends PArray> asMeanBetweenPercentiles(Matrix<? extends PArray> src, Matrix<? extends PArray> fromPercentileIndexes, Matrix<? extends PArray> toPercentileIndexes, Pattern pattern, double filler) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the mean between 2 percentiles of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "mean between 2 percentiles" term. The real indexes r1 and r2 of the percentiles for every element of the result are equal to the corresponding elements of fromPercentileIndexes and toPercentileIndexes matrices. The reserved value filler is specified by the last argument of this method. Theelement type
of the created matrix is the same as the element type of the source one.If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real mean, defined in the comments to this class. In this case, the found mean value m is usually truncated to its integer part
⌊m⌋=(long)m (remember that the mean value, according to our definition, is always ≥0). More precisely, the rules of casting the floating-point means to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.- Parameters:
src
- the source matrix.fromPercentileIndexes
- the matrix containing r1 argument: the indexes of the less percentile of the averaged range for every element of the result.toPercentileIndexes
- the matrix containing r2 argument: the indexes of the greater percentile of the averaged range for every element of the result.pattern
- the pattern: the shape of the aperture.filler
- the reserved value, returned whenr1≥r2 .- Returns:
- the "lazy" matrix containing the mean between 2 given percentiles of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
asMeanBetweenPercentiles
Matrix<? extends PArray> asMeanBetweenPercentiles(Matrix<? extends PArray> src, double fromPercentileIndex, double toPercentileIndex, Pattern pattern, double filler) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the mean between 2 percentiles of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "mean between 2 percentiles" term. The real indexes r1 and r2 of the percentiles for every element of the result are equal to fromPercentileIndex and toPercentileIndex arguments for all aperture positions. The reserved value filler is specified by the last argument of this method. Theelement type
of the created matrix is the same as the element type of the source one.This method is equivalent to
asMeanBetweenPercentiles
(src, src.matrix(Arrays.nDoubleCopies
(src.size(), fromPercentileIndex), src.matrix(Arrays.nDoubleCopies
(src.size(), toPercentileIndex), pattern, filler)If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real mean, defined in the comments to this class. In this case, the found mean value m is usually truncated to its integer part
⌊m⌋=(long)m (remember that the mean value, according to our definition, is always ≥0). More precisely, the rules of casting the floating-point means to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.- Parameters:
src
- the source matrix.fromPercentileIndex
- r1 argument: the index of the less percentile of the averaged range for every element of the result.toPercentileIndex
- r2 argument: the indexes of the greater percentile of the averaged range for every element of the result.pattern
- the pattern: the shape of the aperture.filler
- the reserved value, returned whenr1≥r2 .- Returns:
- the "lazy" matrix containing the mean between 2 given percentiles of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
meanBetweenPercentiles
Matrix<? extends UpdatablePArray> meanBetweenPercentiles(Matrix<? extends PArray> src, Matrix<? extends PArray> fromPercentileIndexes, Matrix<? extends PArray> toPercentileIndexes, Pattern pattern, double filler) Returns a new updatable matrix, containing the mean between 2 percentiles of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "mean between 2 percentiles" term. The real indexes r1 and r2 of the percentiles for every element of the result are equal to the corresponding elements of fromPercentileIndexes and toPercentileIndexes matrices. The reserved value filler is specified by the last argument of this method. Theelement type
of the created matrix is the same as the element type of the source one.If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real mean, defined in the comments to this class. In this case, the found mean value m is usually truncated to its integer part
⌊m⌋=(long)m (remember that the mean value, according to our definition, is always ≥0). More precisely, the rules of casting the floating-point means to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.- Parameters:
src
- the source matrix.fromPercentileIndexes
- the matrix containing r1 argument: the indexes of the less percentile of the averaged range for every element of the result.toPercentileIndexes
- the matrix containing r2 argument: the indexes of the greater percentile of the averaged range for every element of the result.pattern
- the pattern: the shape of the aperture.filler
- the reserved value, returned whenr1≥r2 .- Returns:
- the mean between 2 given percentiles of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
meanBetweenPercentiles
Matrix<? extends UpdatablePArray> meanBetweenPercentiles(Matrix<? extends PArray> src, double fromPercentileIndex, double toPercentileIndex, Pattern pattern, double filler) Returns a new updatable matrix, containing the mean between 2 percentiles of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "mean between 2 percentiles" term. The real indexes r1 and r2 of the percentiles for every element of the result are equal to fromPercentileIndex and toPercentileIndex arguments for all aperture positions. The reserved value filler is specified by the last argument of this method. Theelement type
of the created matrix is the same as the element type of the source one.This method is equivalent to
meanBetweenPercentiles
(src, src.matrix(Arrays.nDoubleCopies
(src.size(), fromPercentileIndex), src.matrix(Arrays.nDoubleCopies
(src.size(), toPercentileIndex), pattern, filler)If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real mean, defined in the comments to this class. In this case, the found mean value m is usually truncated to its integer part
⌊m⌋=(long)m (remember that the mean value, according to our definition, is always ≥0). More precisely, the rules of casting the floating-point means to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.- Parameters:
src
- the source matrix.fromPercentileIndex
- r1 argument: the index of the less percentile of the averaged range for every element of the result.toPercentileIndex
- r2 argument: the indexes of the greater percentile of the averaged range for every element of the result.pattern
- the pattern: the shape of the aperture.filler
- the reserved value, returned whenr1≥r2 .- Returns:
- the mean between 2 given percentiles of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
meanBetweenPercentiles
void meanBetweenPercentiles(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> fromPercentileIndexes, Matrix<? extends PArray> toPercentileIndexes, Pattern pattern, double filler) Equivalent tomeanBetweenPercentiles(Matrix, Matrix, Matrix, Pattern, double)
method, but the result matrix will be placed in the dest argument.If the element type of dest matrix is fixed-point — boolean, char, byte, short, int or long — then we need to round the real mean, defined in the comments to this class. In this case, the found mean value m is usually truncated to its integer part
⌊m⌋=(long)m (remember that the mean value, according to our definition, is always ≥0). More precisely, the rules of casting the floating-point means to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.- Parameters:
dest
- the target matrix.src
- the source matrix.fromPercentileIndexes
- the matrix containing r1 argument: the indexes of the less percentile of the averaged range for every element of the result.toPercentileIndexes
- the matrix containing r2 argument: the indexes of the greater percentile of the averaged range for every element of the result.pattern
- the pattern: the shape of the aperture.filler
- the reserved value, returned whenr1≥r2 .- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
meanBetweenPercentiles
void meanBetweenPercentiles(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, double fromPercentileIndex, double toPercentileIndex, Pattern pattern, double filler) Equivalent tomeanBetweenPercentiles(Matrix, double, double, Pattern, double)
method, but the result matrix will be placed in the dest argument.If the element type of dest matrix is fixed-point — boolean, char, byte, short, int or long — then we need to round the real mean, defined in the comments to this class. In this case, the found mean value m is usually truncated to its integer part
⌊m⌋=(long)m (remember that the mean value, according to our definition, is always ≥0). More precisely, the rules of casting the floating-point means to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.- Parameters:
dest
- the target matrix.src
- the source matrix.fromPercentileIndex
- r1 argument: the index of the less percentile of the averaged range for every element of the result.toPercentileIndex
- r2 argument: the indexes of the greater percentile of the averaged range for every element of the result.pattern
- the pattern: the shape of the aperture.filler
- the reserved value, returned whenr1≥r2 .- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
asMeanBetweenValues
Matrix<? extends PArray> asMeanBetweenValues(Matrix<? extends PArray> src, Matrix<? extends PArray> minValues, Matrix<? extends PArray> maxValues, Pattern pattern, double filler) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the mean between 2 values of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "mean between 2 values" term. The real numbers v1 and v2 for every element of the result are equal to the corresponding elements of minValues and maxValues matrices. The reserved value filler and the mode of calculation (for the caser(v1*σ)≥r(v2*σ) ) are specified by the last filler argument of this method:- if filler argument is
FILL_MIN_VALUE
(Double.NEGATIVE_INFINITY), the mode B is used; - if filler argument is
FILL_MAX_VALUE
(Double.POSITIVE_INFINITY), the mode C is used; - if filler argument is
FILL_NEAREST_VALUE
(Double.NaN), the mode D is used; - if filler argument contains any other value, the mode A is used and this argument specifies the reserved value filler.
element type
of the created matrix is the same as the element type of the source one.If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real mean, defined in the comments to this class. In this case, the found mean value m is usually truncated to its integer part
⌊m⌋=(long)m (remember that the mean value, according to our definition, is always ≥0). More precisely, the rules of casting the floating-point means to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.- Parameters:
src
- the source matrix.minValues
- the matrix containing v1 argument: the low bound of the averaged range of values for every element of the result.maxValues
- the matrix containing v2 argument: the high bound of the averaged range of values for every element of the result.pattern
- the pattern: the shape of the aperture.filler
- the reserved value, returned whenr(v1*σ)≥r(v2*σ) , or one of the special keysFILL_MIN_VALUE
,FILL_MAX_VALUE
,FILL_NEAREST_VALUE
, which mean using of special calculation modes B, C, D.- Returns:
- the "lazy" matrix containing the mean between 2 given values of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
- if filler argument is
-
meanBetweenValues
Matrix<? extends UpdatablePArray> meanBetweenValues(Matrix<? extends PArray> src, Matrix<? extends PArray> minValues, Matrix<? extends PArray> maxValues, Pattern pattern, double filler) Returns a new updatable matrix, containing the mean between 2 values of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "mean between 2 values" term. The real numbers v1 and v2 for every element of the result are equal to the corresponding elements of minValues and maxValues matrices. The reserved value filler and the mode of calculation (for the caser(v1*σ)≥r(v2*σ) ) are specified by the last filler argument of this method:- if filler argument is
FILL_MIN_VALUE
(Double.NEGATIVE_INFINITY), the mode B is used; - if filler argument is
FILL_MAX_VALUE
(Double.POSITIVE_INFINITY), the mode C is used; - if filler argument is
FILL_NEAREST_VALUE
(Double.NaN), the mode D is used; - if filler argument contains any other value, the mode A is used and this argument specifies the reserved value filler.
element type
of the created matrix is the same as the element type of the source one.If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real mean, defined in the comments to this class. In this case, the found mean value m is usually truncated to its integer part
⌊m⌋=(long)m (remember that the mean value, according to our definition, is always ≥0). More precisely, the rules of casting the floating-point means to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.- Parameters:
src
- the source matrix.minValues
- the matrix containing v1 argument: the low bound of the averaged range of values for every element of the result.maxValues
- the matrix containing v2 argument: the high bound of the averaged range of values for every element of the result.pattern
- the pattern: the shape of the aperture.filler
- the reserved value, returned whenr(v1*σ)≥r(v2*σ) , or one of the special keysFILL_MIN_VALUE
,FILL_MAX_VALUE
,FILL_NEAREST_VALUE
, which mean using of special calculation modes B, C, D.- Returns:
- the mean between 2 given values of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
- if filler argument is
-
meanBetweenValues
void meanBetweenValues(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> minValues, Matrix<? extends PArray> maxValues, Pattern pattern, double filler) Equivalent tomeanBetweenValues(Matrix, Matrix, Matrix, Pattern, double)
method, but the result matrix will be placed in the dest argument.If the element type of dest matrix is fixed-point — boolean, char, byte, short, int or long — then we need to round the real mean, defined in the comments to this class. In this case, the found mean value m is usually truncated to its integer part
⌊m⌋=(long)m (remember that the mean value, according to our definition, is always ≥0). More precisely, the rules of casting the floating-point means to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.- Parameters:
dest
- the target matrix.src
- the source matrix.minValues
- the matrix containing v1 argument: the low bound of the averaged range of values for every element of the result.maxValues
- the matrix containing v2 argument: the high bound of the averaged range of values for every element of the result.pattern
- the pattern: the shape of the aperture.filler
- the reserved value, returned whenr(v1*σ)≥r(v2*σ) , or one of the special keysFILL_MIN_VALUE
,FILL_MAX_VALUE
,FILL_NEAREST_VALUE
, which mean using of special calculation modes B, C, D.- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
asMean
Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the mean of the source matrix by the specified pattern.More precisely, this method is equivalent to
, where the function meanFunc is:asFunctionOfSum
(src, pattern, meanFunc)LinearFunc.getInstance
(0.0, 1.0/N),N = pattern. , if the source matrix is floating-point (pointCount()
src. is float or double) — in other words, this method calculates the usual mean of all elements in the aperture:elementType()
(v0+v1+...+vN−1) / N ;LinearFunc.getInstance
(0.5, 1.0/N),N = pattern. , if the source matrix is fixed-point (pointCount()
src. is boolean, char, byte, short, int or long) — in other words, this method calculates the mean of all elements in the aperture plus 0.5:elementType()
(v0+v1+...+vN−1) / N + 0.5.
If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real mean, defined above. In this case, the found mean value m is usually truncated to its integer part
⌊m⌋=(long)m (remember that the mean value, according to our definition, is always ≥0). More precisely, the rules of casting the floating-point means to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.The described rounding rule explains, why we add 0.5 to the mean in the case of a fixed-point source elements. Namely, in this case the combination of adding 0.5 and further truncation to the integer part works as rounding to the nearest integer:
⌊m+0.5⌋=Math.round(m) (excepting some rare cases when the real mean m is a strictly half-integer:m=2k+½ , k∈Z). In other words, this behaviour provides the maximal possible precision of the returned integer mean.Note: the behaviour of this method is similar to
asMeanBetweenPercentiles
(src, 0, N, pattern, anyFiller), whereN = pattern. , if the histogram is processed in the simple histogram model (seepointCount()
comments to SummingHistogram class
). Really, in this case the mean between 2 percentiles is equal to(S(r2)−S(r1)) / ((r2−r1)*σ) = S(N) / (N*σ) = (Σ 0≤j<M(j+0.5)*b[j]) / (N*σ)
In the simplest case, when the source elements are real numbers in the "standard" allowed range
0.0..1.0 , we haveσ = M (the histogram length),ai = ⌊vi*M⌋ , and this expression is equal to(Σ 0≤i<N(ai+0.5)) / (NM) = (v'0+v'1+...+v'N−1) / N + 0.5 / M ≈ (v0+v1+...+vN−1) / N
where
v'i = ai/M is an attempt to represent the real number vi with the given precision μ=log2M bits and a correction0.5/M is very little for large M.In another simplest case, when the source elements are integer numbers, σ=1 and the elements vi are non-negative integers, we have
ai = vi , and this expression is equal to(Σ 0≤i<N(vi+0.5)) / N = (v0+v1+...+vN−1) / N + 0.5
- Parameters:
src
- the source matrix.pattern
- the pattern: the shape of the aperture.- Returns:
- the "lazy" matrix containing the mean of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
mean
Returns a new updatable matrix, containing the mean of the source matrix by the specified pattern.More precisely, this method is equivalent to
, where the function meanFunc is:functionOfSum
(src, pattern, meanFunc)LinearFunc.getInstance
(0.0, 1.0/N),N = pattern. , if the source matrix is floating-point (pointCount()
src. is float or double) — in other words, this method calculates the usual mean of all elements in the aperture:elementType()
(v0+v1+...+vN−1) / N ;LinearFunc.getInstance
(0.5, 1.0/N),N = pattern. , if the source matrix is fixed-point (pointCount()
src. is boolean, char, byte, short, int or long) — in other words, this method calculates the mean of all elements in the aperture plus 0.5:elementType()
(v0+v1+...+vN−1) / N + 0.5.
If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real mean, defined above. In this case, the found mean value m is usually truncated to its integer part
⌊m⌋=(long)m (remember that the mean value, according to our definition, is always ≥0). More precisely, the rules of casting the floating-point means to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.The described rounding rule explains, why we add 0.5 to the mean in the case of a fixed-point source elements. Namely, in this case the combination of adding 0.5 and further truncation to the integer part works as rounding to the nearest integer:
⌊m+0.5⌋=Math.round(m) (excepting some rare cases when the real mean m is a strictly half-integer:m=2k+½ , k∈Z). In other words, this behaviour provides the maximal possible precision of the returned integer mean.Note: the behaviour of this method is similar to
meanBetweenPercentiles
(src, 0, N, pattern, anyFiller), whereN = pattern. , if the histogram is processed in the simple histogram model (seepointCount()
comments to SummingHistogram class
). Really, in this case the mean between 2 percentiles is equal to(S(r2)−S(r1)) / ((r2−r1)*σ) = S(N) / (N*σ) = (Σ 0≤j<M(j+0.5)*b[j]) / (N*σ)
In the simplest case, when the source elements are real numbers in the "standard" allowed range
0.0..1.0 , we haveσ = M (the histogram length),ai = ⌊vi*M⌋ , and this expression is equal to(Σ 0≤i<N(ai+0.5)) / (NM) = (v'0+v'1+...+v'N−1) / N + 0.5 / M ≈ (v0+v1+...+vN−1) / N
where
v'i = ai/M is an attempt to represent the real number vi with the given precision μ=log2M bits and a correction0.5/M is very little for large M.In another simplest case, when the source elements are integer numbers, σ=1 and the elements vi are non-negative integers, we have
ai = vi , and this expression is equal to(Σ 0≤i<N(vi+0.5)) / N = (v0+v1+...+vN−1) / N + 0.5
- Parameters:
src
- the source matrix.pattern
- the pattern: the shape of the aperture.- Returns:
- the mean of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
mean
Equivalent tomean(Matrix, Pattern)
method, but the result matrix will be placed in the dest argument.If the element type of dest matrix is fixed-point — boolean, char, byte, short, int or long — then we need to round the real mean, defined above. In this case, the found mean value m is usually truncated to its integer part
⌊m⌋=(long)m (remember that the mean value, according to our definition, is always ≥0). More precisely, the rules of casting the floating-point means to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.The described rounding rule explains, why we add 0.5 to the mean in the case of a fixed-point source elements. Namely, in this case the combination of adding 0.5 and further truncation to the integer part works as rounding to the nearest integer:
⌊m+0.5⌋=Math.round(m) (excepting some rare cases when the real mean m is a strictly half-integer:m=2k+½ , k∈Z). In other words, this behaviour provides the maximal possible precision of the returned integer mean.Note: the behaviour of this method is similar to
meanBetweenPercentiles
(src, 0, N, pattern, anyFiller), whereN = pattern. , if the histogram is processed in the simple histogram model (seepointCount()
comments to SummingHistogram class
). Really, in this case the mean between 2 percentiles is equal to(S(r2)−S(r1)) / ((r2−r1)*σ) = S(N) / (N*σ) = (Σ 0≤j<M(j+0.5)*b[j]) / (N*σ)
In the simplest case, when the source elements are real numbers in the "standard" allowed range
0.0..1.0 , we haveσ = M (the histogram length),ai = ⌊vi*M⌋ , and this expression is equal to(Σ 0≤i<N(ai+0.5)) / (NM) = (v'0+v'1+...+v'N−1) / N + 0.5 / M ≈ (v0+v1+...+vN−1) / N
where
v'i = ai/M is an attempt to represent the real number vi with the given precision μ=log2M bits and a correction0.5/M is very little for large M.In another simplest case, when the source elements are integer numbers, σ=1 and the elements vi are non-negative integers, we have
ai = vi , and this expression is equal to(Σ 0≤i<N(vi+0.5)) / N = (v0+v1+...+vN−1) / N + 0.5
- Parameters:
dest
- the target matrix.src
- the source matrix.pattern
- the pattern: the shape of the aperture.- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
asFunctionOfSum
Matrix<? extends PArray> asFunctionOfSum(Matrix<? extends PArray> src, Pattern pattern, Func processingFunc) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the result of some given functionf(S) of the aperture sum S of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "aperture sum" term. Theelement type
of the created matrix is the same as the element type of the source one.The function, applied to each calculated aperture sum S, is specified via processingFunc argument. Namely, for each aperture position this method calculates the aperture sum S of the source matrix and returns
processingFunc. in the corresponding element of the resulting matrix.get
(S)If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real function result. In this case, the found function result f is usually truncated to its integer part
(long)f . More precisely, the rules of casting the floating-point function results to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.This method can be considered as a generalization of
asMean(Matrix, Pattern)
.- Parameters:
src
- the source matrix.pattern
- the pattern: the shape of the aperture.processingFunc
- the function, which should be applied to every calculated aperture sum.- Returns:
- the "lazy" matrix containing the result of the given function for the aperture sum of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
functionOfSum
Matrix<? extends UpdatablePArray> functionOfSum(Matrix<? extends PArray> src, Pattern pattern, Func processingFunc) Returns a new updatable matrix, containing the result of some given functionf(S) of the aperture sum S of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "aperture sum" term. Theelement type
of the created matrix is the same as the element type of the source one.The function, applied to each calculated aperture sum S, is specified via processingFunc argument. Namely, for each aperture position this method calculates the aperture sum S of the source matrix and returns
processingFunc. in the corresponding element of the resulting matrix.get
(S)If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real function result. In this case, the found function result f is usually truncated to its integer part
(long)f . More precisely, the rules of casting the floating-point function results to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.This method can be considered as a generalization of
mean(Matrix, Pattern)
.- Parameters:
src
- the source matrix.pattern
- the pattern: the shape of the aperture.processingFunc
- the function, which should be applied to every calculated aperture sum.- Returns:
- the result of the given function for the aperture sum of the source matrix.
- Throws:
NullPointerException
- if one of the arguments is null.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
functionOfSum
void functionOfSum(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Pattern pattern, Func processingFunc) Equivalent tofunctionOfSum(Matrix, Pattern, Func)
method, but the result matrix will be placed in the dest argument.If the element type of dest matrix is fixed-point — boolean, char, byte, short, int or long — then we need to round the real function result. In this case, the found function result f is usually truncated to its integer part
(long)f . More precisely, the rules of casting the floating-point function results to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.This method can be considered as a generalization of
mean(Matrix, Matrix, Pattern)
.- Parameters:
dest
- the target matrix.src
- the source matrix.pattern
- the pattern: the shape of the aperture.processingFunc
- the function, which should be applied to every calculated aperture sum.- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
asFunctionOfPercentilePair
Matrix<? extends PArray> asFunctionOfPercentilePair(Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes1, Matrix<? extends PArray> percentileIndexes2, Pattern pattern, Func processingFunc) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the result of some given functionf(v, v1,v2) of the source matrix v and two percentiles v1,v2 of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "percentile" term. The real indexes r of two percentiles for every element of the result are equal to the corresponding elements of percentileIndexes1 (for v1) or percentileIndexes2 matrix (for v2). Theelement type
of the created matrix is the same as the element type of the source one.The function, applied to each calculated three
(v,v1,v2) , is specified via processingFunc argument. Namely, for each aperture position x this method takes the value v — the element of the source matrix src at this aperture position x, calculates two percentiles v1 and v2 of the source matrix and returnsprocessingFunc. in the corresponding element of the resulting matrix.get
(v,v1,v2)If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real function result. In this case, the found function result f is usually truncated to its integer part
(long)f . More precisely, the rules of casting the floating-point function results to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.You can get the same results by 2 calls of
asPercentile(Matrix, Matrix, Pattern)
method for both matrices of percentile indexes and applying the function to them and to the source matrix via method. But such a way works slower and is less convenient, than this method. A typical application of this method in image processing area is the contrasting image — in this case, we recommend usingMatrices.asFuncMatrix(Func, Class, Matrix, Matrix, Matrix)
ContrastingFunc
object as processingFunc argument.- Parameters:
src
- the source matrix.percentileIndexes1
- the 1st matrix containing r argument: the indexes of the 1st percentile v1 for every element of the result.percentileIndexes2
- the 2nd matrix containing r argument: the indexes of the 2nd percentile v2 for every element of the result.pattern
- the pattern: the shape of the aperture.processingFunc
- the function, which should be applied to every calculated three(v,v1,v2) , where v is the element of the source matrix, v1 and v2 are the corresponding percentiles.- Returns:
- the "lazy" matrix containing the result of the given function.
- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
asFunctionOfPercentilePair
Matrix<? extends PArray> asFunctionOfPercentilePair(Matrix<? extends PArray> src, double percentileIndex1, double percentileIndex2, Pattern pattern, Func processingFunc) Returns an immutable view of the passed source matrix, such that any reading data from it calculates and returns the result of some given functionf(v, v1,v2) of the source matrix v and two percentiles v1,v2 of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "percentile" term. The real indexes r of two percentiles for every element of the result are equal to percentileIndex1 (for v1) or percentileIndex2 argument (for v2). Theelement type
of the created matrix is the same as the element type of the source one.This method is equivalent to
asFunctionOfPercentilePair
(src, src.matrix(Arrays.nDoubleCopies
(src.size(), percentileIndex1), src.matrix(Arrays.nDoubleCopies
(src.size(), percentileIndex1), pattern, processingFunc)If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real function result. In this case, the found function result f is usually truncated to its integer part
(long)f . More precisely, the rules of casting the floating-point function results to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.You can get the same results by 2 calls of
asPercentile(Matrix, double, Pattern)
method for both matrices of percentile indexes and applying the function to them and to the source matrix via method. But such a way works slower and is less convenient, than this method. A typical application of this method in image processing area is the contrasting image — in this case, we recommend usingMatrices.asFuncMatrix(Func, Class, Matrix, Matrix, Matrix)
ContrastingFunc
object as processingFunc argument.- Parameters:
src
- the source matrix.percentileIndex1
- the 1st r argument: the index of the 1st percentile v1.percentileIndex2
- the 2nd r argument: the index of the 2nd percentile v2.pattern
- the pattern: the shape of the aperture.processingFunc
- the function, which should be applied to every calculated three(v,v1,v2) , where v is the element of the source matrix, v1 and v2 are the corresponding percentiles.- Returns:
- the "lazy" matrix containing the result of the given function.
- Throws:
NullPointerException
- if one of the arguments is null.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
functionOfPercentilePair
Matrix<? extends UpdatablePArray> functionOfPercentilePair(Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes1, Matrix<? extends PArray> percentileIndexes2, Pattern pattern, Func processingFunc) Returns a new updatable matrix, containing the result of some given functionf(v, v1,v2) of the source matrix v and two percentiles v1,v2 of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "percentile" term. The real indexes r of two percentiles for every element of the result are equal to the corresponding elements of percentileIndexes1 (for v1) or percentileIndexes2 matrix (for v2). Theelement type
of the created matrix is the same as the element type of the source one.The function, applied to each calculated three
(v,v1,v2) , is specified via processingFunc argument. Namely, for each aperture position x this method takes the value v — the element of the source matrix src at this aperture position x, calculates two percentiles v1 and v2 of the source matrix and returnsprocessingFunc. in the corresponding element of the resulting matrix.get
(v,v1,v2)If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real function result. In this case, the found function result f is usually truncated to its integer part
(long)f . More precisely, the rules of casting the floating-point function results to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.You can get the same results by 2 calls of
percentile(Matrix, Matrix, Pattern)
method for both matrices of percentile indexes and applying the function to them and to the source matrix via method. But such a way works slower and is less convenient, than this method. A typical application of this method in image processing area is the contrasting image — in this case, we recommend usingMatrices.asFuncMatrix(Func, Class, Matrix, Matrix, Matrix)
ContrastingFunc
object as processingFunc argument.- Parameters:
src
- the source matrix.percentileIndexes1
- the 1st matrix containing r argument: the indexes of the 1st percentile v1 for every element of the result.percentileIndexes2
- the 2nd matrix containing r argument: the indexes of the 2nd percentile v2 for every element of the result.pattern
- the pattern: the shape of the aperture.processingFunc
- the function, which should be applied to every calculated three(v,v1,v2) , where v is the element of the source matrix, v1 and v2 are the corresponding percentiles.- Returns:
- the result of the given function.
- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
functionOfPercentilePair
Matrix<? extends UpdatablePArray> functionOfPercentilePair(Matrix<? extends PArray> src, double percentileIndex1, double percentileIndex2, Pattern pattern, Func processingFunc) Returns a new updatable matrix, containing the result of some given functionf(v, v1,v2) of the source matrix v and two percentiles v1,v2 of the source matrix by the specified pattern. See thecomments to this class
, section 4 about the "percentile" term. The real indexes r of two percentiles for every element of the result are equal to percentileIndex1 (for v1) or percentileIndex2 argument (for v2). Theelement type
of the created matrix is the same as the element type of the source one.This method is equivalent to
functionOfPercentilePair
(src, src.matrix(Arrays.nDoubleCopies
(src.size(), percentileIndex1), src.matrix(Arrays.nDoubleCopies
(src.size(), percentileIndex1), pattern, processingFunc)If the element type of the source matrix (and, thus, of the result) is fixed-point — boolean, char, byte, short, int or long — then we need to round the real function result. In this case, the found function result f is usually truncated to its integer part
(long)f . More precisely, the rules of casting the floating-point function results to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.You can get the same results by 2 calls of
percentile(Matrix, double, Pattern)
method for both matrices of percentile indexes and applying the function to them and to the source matrix via method. But such a way works slower and is less convenient, than this method. A typical application of this method in image processing area is the contrasting image — in this case, we recommend usingMatrices.asFuncMatrix(Func, Class, Matrix, Matrix, Matrix)
ContrastingFunc
object as processingFunc argument.- Parameters:
src
- the source matrix.percentileIndex1
- the 1st r argument: the index of the 1st percentile v1.percentileIndex2
- the 2nd r argument: the index of the 2nd percentile v2.pattern
- the pattern: the shape of the aperture.processingFunc
- the function, which should be applied to every calculated three(v,v1,v2) , where v is the element of the source matrix, v1 and v2 are the corresponding percentiles.- Returns:
- the result of the given function.
- Throws:
NullPointerException
- if one of the arguments is null.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
functionOfPercentilePair
void functionOfPercentilePair(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes1, Matrix<? extends PArray> percentileIndexes2, Pattern pattern, Func processingFunc) Equivalent tofunctionOfPercentilePair(Matrix, Matrix, Matrix, Pattern, Func)
method, but the result matrix will be placed in the dest argument.If the element type of dest matrix is fixed-point — boolean, char, byte, short, int or long — then we need to round the real function result. In this case, the found function result f is usually truncated to its integer part
(long)f . More precisely, the rules of casting the floating-point function results to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.- Parameters:
dest
- the target matrix.src
- the source matrix.percentileIndexes1
- the 1st matrix containing r argument: the indexes of the 1st percentile v1 for every element of the result.percentileIndexes2
- the 2nd matrix containing r argument: the indexes of the 2nd percentile v2 for every element of the result.pattern
- the pattern: the shape of the aperture.processingFunc
- the function, which should be applied to every calculated three(v,v1,v2) , where v is the element of the source matrix, v1 and v2 are the corresponding percentiles.- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-
functionOfPercentilePair
void functionOfPercentilePair(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, double percentileIndex1, double percentileIndex2, Pattern pattern, Func processingFunc) Equivalent tofunctionOfPercentilePair(Matrix, double, double, Pattern, Func)
method, but the result matrix will be placed in the dest argument.If the element type of dest matrix is fixed-point — boolean, char, byte, short, int or long — then we need to round the real function result. In this case, the found function result f is usually truncated to its integer part
(long)f . More precisely, the rules of casting the floating-point function results to the desired element type are the same as inArrays.asFuncArray(boolean, Func, Class, PArray...)
method with the argument truncateOverflows=true.- Parameters:
dest
- the target matrix.src
- the source matrix.percentileIndex1
- the 1st r argument: the index of the 1st percentile v1.percentileIndex2
- the 2nd r argument: the index of the 2nd percentile v2.pattern
- the pattern: the shape of the aperture.processingFunc
- the function, which should be applied to every calculated three(v,v1,v2) , where v is the element of the source matrix, v1 and v2 are the corresponding percentiles.- Throws:
NullPointerException
- if one of the arguments is null.SizeMismatchException
- if the passed matrices have different dimensions.IllegalArgumentException
- if the number of the pattern dimensions pattern.dimCount()
is not equal to src.dimCount()
.- See Also:
-