Class BasicRankMorphology
- All Implemented Interfaces:
Cloneable
,ArrayProcessor
,ArrayProcessorWithContextSwitching
,Morphology
,RankMorphology
Almost complete implementation of RankMorphology
interface with an instantiation method
of some complete implementation.
This class fully implements all methods, declared in RankMorphology
interface,
according to the detailed specifications listed in the comments to that interface.
The only methods, which stay abstract here, are the following 3 methods of AbstractMorphology
superclass:
AbstractRankMorphology.context(ArrayContext newContext)
,asDilationOrErosion(Matrix src, Pattern pattern, boolean isDilation)
,dilationOrErosion(Matrix dest, Matrix src, Pattern pattern, boolean isDilation, boolean disableMemoryAllocation)
.
All other methods are implemented via the simple calls of
asProcessed
and process
method of the corresponding streaming aperture processors, listed in RankProcessors
class.
This package provides some concrete complete inheritor, which implements also these 3 methods. This inheritor is instantiated by the following method:
But you can also inherit this class yourself and implement dilation and erosion (the basic operations of the mathematical morphology) in other way.
- Author:
- Daniel Alievsky
-
Nested Class Summary
Nested classes/interfaces inherited from interface net.algart.matrices.morphology.Morphology
Morphology.SubtractionMode
-
Field Summary
Fields inherited from interface net.algart.matrices.morphology.RankMorphology
FILL_MAX_VALUE, FILL_MIN_VALUE, FILL_NEAREST_VALUE
-
Method Summary
Modifier and TypeMethodDescriptionasDilationOrErosion
(Matrix<? extends PArray> src, Pattern pattern, boolean isDilation) This method must be equivalent toAbstractMorphology.asDilation(Matrix src, Pattern pattern)
if isDilation argument is true or toAbstractMorphology.asErosion(Matrix src, Pattern pattern)
if isDilation argument is false.asFunctionOfPercentilePair
(Matrix<? extends PArray> src, Matrix<? extends PArray> percentilesIndexes1, Matrix<? extends PArray> percentilesIndexes2, 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.asMeanBetweenPercentiles
(Matrix<? extends PArray> src, Matrix<? extends PArray> fromPercentilesIndexes, Matrix<? extends PArray> toPercentilesIndexes, 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, 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.protected abstract Matrix<? extends UpdatablePArray>
dilationOrErosion
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Pattern pattern, boolean isDilation, boolean disableMemoryAllocation) This method must be equivalent toAbstractMorphology.dilation(Matrix dest, Matrix src, Pattern pattern, boolean disableMemoryAllocation)
if isDilation argument is true or toAbstractMorphology.erosion(Matrix dest, Matrix src, Pattern pattern, boolean disableMemoryAllocation)
if isDilation argument is false.void
functionOfPercentilePair
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> percentilesIndexes1, Matrix<? extends PArray> percentilesIndexes2, Pattern pattern, Func processingFunc) Equivalent toRankMorphology.functionOfPercentilePair(Matrix, Matrix, Matrix, Pattern, Func)
method, but the result matrix will be placed in the dest argument.void
functionOfSum
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Pattern pattern, Func processingFunc) Equivalent toRankMorphology.functionOfSum(Matrix, Pattern, Func)
method, but the result matrix will be placed in the dest argument.static RankMorphology
getInstance
(ArrayContext context, double dilationLevel, CustomRankPrecision precision) Returns new instance of some inheritor of this class, implementing dilation and erosion operations via the percentiles.boolean
Returns true, if this class works in the defaultpseudo-cyclic continuation mode
.void
meanBetweenPercentiles
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> fromPercentilesIndexes, Matrix<? extends PArray> toPercentilesIndexes, Pattern pattern, double filler) Equivalent toRankMorphology.meanBetweenPercentiles(Matrix, Matrix, Matrix, Pattern, double)
method, but the result matrix will be placed in the dest argument.void
meanBetweenValues
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> minValues, Matrix<? extends PArray> maxValues, Pattern pattern, double filler) Equivalent toRankMorphology.meanBetweenValues(Matrix, Matrix, Matrix, Pattern, double)
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 toRankMorphology.percentile(Matrix, Matrix, Pattern)
method, but the result matrix will be placed in the dest argument.void
rank
(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> baseMatrix, Matrix<? extends PArray> rankedMatrix, Pattern pattern) Equivalent toRankMorphology.rank(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 class net.algart.matrices.morphology.AbstractRankMorphology
asFunctionOfPercentilePair, asMean, asMeanBetweenPercentiles, asPercentile, constantPercentileMatrix, context, functionOfPercentilePair, functionOfPercentilePair, functionOfPercentilePair, functionOfSum, mean, mean, meanBetweenPercentiles, meanBetweenPercentiles, meanBetweenPercentiles, meanBetweenValues, percentile, percentile, percentile, rank
Methods inherited from class net.algart.matrices.morphology.AbstractMorphology
asDilation, asErosion, beucherGradient, closing, dilation, dilation, dilation, dilation, dilationErosion, dimensionsAllowed, erosion, erosion, erosion, erosion, erosionDilation, maskedDilationErosion, maskedErosionDilation, opening, weakDilation, weakErosion
Methods inherited from class net.algart.arrays.AbstractArrayProcessorWithContextSwitching
context, contextPart, memoryModel
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
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, maskedDilationErosion, maskedErosionDilation, opening, weakDilation, weakErosion
Methods inherited from interface net.algart.matrices.morphology.RankMorphology
asFunctionOfPercentilePair, asMean, asMeanBetweenPercentiles, asPercentile, context, functionOfPercentilePair, functionOfPercentilePair, functionOfPercentilePair, functionOfSum, mean, mean, meanBetweenPercentiles, meanBetweenPercentiles, meanBetweenPercentiles, meanBetweenValues, percentile, percentile, percentile, rank
-
Method Details
-
getInstance
public static RankMorphology getInstance(ArrayContext context, double dilationLevel, CustomRankPrecision precision) Returns new instance of some inheritor of this class, implementing dilation and erosion operations via the percentiles. Namely, in the created object method is equivalent todilation
(m,pattern) andpercentile
(m,dilationLevel*N,pattern) method is equivalent toerosion
(m,pattern) , wherepercentile
(m,dilationLevel*N,pattern.symmetric()
)N=pattern. and dilationLevel is the argument of this method. This argument must be in rangepointCount()
-10.0 ≤ dilationLevel ≤ 1.0 .More precisely, in the created object the methods
asDilationOrErosion(Matrix src, Pattern pattern, boolean isDilation)
anddilationOrErosion(Matrix dest, Matrix src, Pattern pattern, boolean isDilation, boolean disableMemoryAllocation)
work in the following way.
Let the double value r be
r=dilationLevel*(pattern. in a case of dilation (isDilation argument is true) orpointCount()
-1)r=(1.0-dilationLevel)*(pattern. in a case of erosion (isDilation argument is false). Then, let index be:pointCount()
-1)- this double value index=r, if the element type of
the source matrix src is float or double or
if we are using the precise histogram model
(precision.
interpolated()
is true); - or the rounded (long) integer value index=Math.round(r),
if the source matrix is fixed-point and we are using the simple histogram model
(precision.
interpolated()
is false).
At last, let P be pattern in a case of dilation (isDilation argument is true) or
pattern. in a case of erosion (isDilation argument is false).symmetric()
Then, in the returned object the 1st method
asDilationOrErosion
is equivalent to and the 2nd methodasPercentile
(src,index,P)dilationOrErosion
is equivalent to . (The disableMemoryAllocation argument ofpercentile
(dest,src,index,P)dilationOrErosion
method is ignored by this implementation.)Please note: using Math.round for rounding the percentile index does not correspond to the standard behaviour of integer percentiles, which are rounded, in a case of the precise histogram model, according more complicated rules (see comments to
RankMorphology.percentile(Matrix, Matrix, Pattern)
andHistogram.iPreciseValue(long[], double)
methods). So, this method does not try to round the real percentile index r in the precise histogram model. But in the simple histogram model, when the element type is fixed-point and some form of rounding is required in any case, this method calls Math.round — it provides better "symmetry" between dilation and erosion operations.The precise behaviour of all methods of
RankMorphology
interface in the returned object depends on precision object: see comments toCustomRankPrecision
andRankMorphology
.- Parameters:
context
- thecontext
that will be used by this object; may be null, then it will be ignored.dilationLevel
- the level: 1.0 means strict dilation and erosion as described inMorphology
interface, 0.5 means median, 0.0 means that dilation works like erosion and erosion works like dilation (but with asymmetric
pattern).precision
- precision characteristics of all rank operations, performed by the created object.- Returns:
- new instance of this class.
- Throws:
NullPointerException
- if precision argument is nullIllegalArgumentException
- if the dilationLevel argument is out of 0.0..1.0 range of if bitLevels=precision.bitLevels()
are incorrect: bitLevels.length==0, or if bitLevels.length>31, or if some of elements bitLevels is not in 1..30 range, or ifbitLevels[k]>=bitLevels[k+1] for some k.
-
isPseudoCyclic
public boolean isPseudoCyclic()Description copied from interface:Morphology
Returns true, if this class works in the defaultpseudo-cyclic continuation mode
.More precisely, it means that when the value in some element of the processed matrix, returned by a method of this class, depends on elements of the source matrix, lying outside its bounds, then it is supposed that the values outside the source matrix are calculated as described in
Matrix.ContinuationMode.PSEUDO_CYCLIC
. Exactly such behaviour is specified in the comments to the basicMorphology.dilation(Matrix, Pattern)
andMorphology.erosion(Matrix, Pattern)
methods as the default definition of dilation and erosion.This method returns true in
BasicMorphology
andBasicRankMorphology
implementation. However, it usually returns false inContinuedMorphology
andContinuedRankMorphology
classes — excepting the only degenerated case when the usedcontinuation mode
isPSEUDO_CYCLIC
.- Specified by:
isPseudoCyclic
in interfaceMorphology
- Specified by:
isPseudoCyclic
in classAbstractMorphology
- Returns:
- whether this class works in the pseudo-cyclic continuation mode.
-
asDilationOrErosion
protected abstract Matrix<? extends PArray> asDilationOrErosion(Matrix<? extends PArray> src, Pattern pattern, boolean isDilation) Description copied from class:AbstractMorphology
This method must be equivalent toAbstractMorphology.asDilation(Matrix src, Pattern pattern)
if isDilation argument is true or toAbstractMorphology.asErosion(Matrix src, Pattern pattern)
if isDilation argument is false.The implementations of those methods, provided by this class, just call this method with corresponding isDilation argument.
- Specified by:
asDilationOrErosion
in classAbstractRankMorphology
- Parameters:
src
- the source matrix.pattern
- the pattern.isDilation
- what should return this method: dilation or erosion.- Returns:
- the "lazy" matrix containing the dilation or erosion of the source matrix.
-
dilationOrErosion
protected abstract Matrix<? extends UpdatablePArray> dilationOrErosion(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Pattern pattern, boolean isDilation, boolean disableMemoryAllocation) Description copied from class:AbstractMorphology
This method must be equivalent toAbstractMorphology.dilation(Matrix dest, Matrix src, Pattern pattern, boolean disableMemoryAllocation)
if isDilation argument is true or toAbstractMorphology.erosion(Matrix dest, Matrix src, Pattern pattern, boolean disableMemoryAllocation)
if isDilation argument is false. There is the only little difference: if dest argument is null, this methods does not throw NullPointerException, but allocates new matrix with the same dimensions and element type as src and use it for storing the result. The result (newly created matrix or non-null dest argument) is returned as the result of this method.The implementations of
AbstractMorphology.dilation(Matrix dest, Pattern pattern)
,AbstractMorphology.erosion(Matrix dest, Pattern pattern)
,AbstractMorphology.dilation(Matrix dest, Matrix src, Pattern pattern, boolean disableMemoryAllocation)
,AbstractMorphology.erosion(Matrix dest, Matrix src, Pattern pattern, boolean disableMemoryAllocation)
methods, provided by this class, just call this method with corresponding isDilation argument and with dest==null in a case of first two methods.The implementation of this method, provided by
AbstractMorphology
class, just copies the result ofAbstractMorphology.asDilationOrErosion(Matrix, Pattern, boolean)
asDilationOrErosion} method to dest matrix:Matrices.copy
(context, castDest,AbstractMorphology.asDilationOrErosion(Matrix, Pattern, boolean)
asDilationOrErosion}(src, pattern, isDilation));where castDest is dest if dest.elementType()==src.elementType(), the newly created matrix if dest==null or the dest matrix, cast to the necessary element type, if the source and destination element types are different:
Matrices.asUpdatableFuncMatrix
(true,Func.UPDATABLE_IDENTITY
, src.updatableType(UpdatablePArray.class), dest)The implementations of this method in the inheritors usually provide better algorithms, especially if disableMemoryAllocation argument is false.
- Specified by:
dilationOrErosion
in classAbstractRankMorphology
- Parameters:
dest
- the target matrix (or null for creating a new matrix).src
- the source matrix.pattern
- the pattern.isDilation
- what should perform this method: dilation or erosion.disableMemoryAllocation
- if false, this method may allocate additional temporary matrices for optimizing the algorithm speed; if true, no any work memory will be allocated.- Returns:
- the reference to dest argument if it is not null, newly allocated resulting matrix in other case.
-
asPercentile
public Matrix<? extends PArray> asPercentile(Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes, Pattern pattern) Description copied from interface:RankMorphology
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], β) .- Specified by:
asPercentile
in interfaceRankMorphology
- Specified by:
asPercentile
in classAbstractRankMorphology
- 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.
- See Also:
- either the integer result of
-
percentile
public void percentile(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> percentileIndexes, Pattern pattern) Description copied from interface:RankMorphology
Equivalent toRankMorphology.percentile(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 ofRankMorphology.percentile(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()
andRankMorphology.asPercentile(Matrix, Matrix, Pattern)
methods.RankMorphology.percentile(Matrix, Matrix, Pattern)
- Specified by:
percentile
in interfaceRankMorphology
- Specified by:
percentile
in classAbstractRankMorphology
- 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.- See Also:
-
asRank
public <T extends PArray> Matrix<T> asRank(Class<? extends T> requiredType, Matrix<? extends PArray> baseMatrix, Matrix<? extends PArray> rankedMatrix, Pattern pattern) Description copied from interface:RankMorphology
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.- Specified by:
asRank
in interfaceRankMorphology
- Specified by:
asRank
in classAbstractRankMorphology
- 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.
- See Also:
-
rank
public void rank(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> baseMatrix, Matrix<? extends PArray> rankedMatrix, Pattern pattern) Description copied from interface:RankMorphology
Equivalent toRankMorphology.rank(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.- Specified by:
rank
in interfaceRankMorphology
- Specified by:
rank
in classAbstractRankMorphology
- 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.- See Also:
-
asMeanBetweenPercentiles
public Matrix<? extends PArray> asMeanBetweenPercentiles(Matrix<? extends PArray> src, Matrix<? extends PArray> fromPercentilesIndexes, Matrix<? extends PArray> toPercentilesIndexes, Pattern pattern, double filler) Description copied from interface:RankMorphology
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.- Specified by:
asMeanBetweenPercentiles
in interfaceRankMorphology
- Specified by:
asMeanBetweenPercentiles
in classAbstractRankMorphology
- Parameters:
src
- the source matrix.fromPercentilesIndexes
- the matrix containing r1 argument: the indexes of the less percentile of the averaged range for every element of the result.toPercentilesIndexes
- 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.
- See Also:
-
meanBetweenPercentiles
public void meanBetweenPercentiles(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> fromPercentilesIndexes, Matrix<? extends PArray> toPercentilesIndexes, Pattern pattern, double filler) Description copied from interface:RankMorphology
Equivalent toRankMorphology.meanBetweenPercentiles(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.- Specified by:
meanBetweenPercentiles
in interfaceRankMorphology
- Specified by:
meanBetweenPercentiles
in classAbstractRankMorphology
- Parameters:
dest
- the target matrix.src
- the source matrix.fromPercentilesIndexes
- the matrix containing r1 argument: the indexes of the less percentile of the averaged range for every element of the result.toPercentilesIndexes
- 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 .- See Also:
-
asMeanBetweenValues
public Matrix<? extends PArray> asMeanBetweenValues(Matrix<? extends PArray> src, Matrix<? extends PArray> minValues, Matrix<? extends PArray> maxValues, Pattern pattern, double filler) Description copied from interface:RankMorphology
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
RankMorphology.FILL_MIN_VALUE
(Double.NEGATIVE_INFINITY), the mode B is used; - if filler argument is
RankMorphology.FILL_MAX_VALUE
(Double.POSITIVE_INFINITY), the mode C is used; - if filler argument is
RankMorphology.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.- Specified by:
asMeanBetweenValues
in interfaceRankMorphology
- Specified by:
asMeanBetweenValues
in classAbstractRankMorphology
- 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 keysRankMorphology.FILL_MIN_VALUE
,RankMorphology.FILL_MAX_VALUE
,RankMorphology.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.
- See Also:
- if filler argument is
-
meanBetweenValues
public void meanBetweenValues(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> minValues, Matrix<? extends PArray> maxValues, Pattern pattern, double filler) Description copied from interface:RankMorphology
Equivalent toRankMorphology.meanBetweenValues(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.- Specified by:
meanBetweenValues
in interfaceRankMorphology
- Specified by:
meanBetweenValues
in classAbstractRankMorphology
- 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 keysRankMorphology.FILL_MIN_VALUE
,RankMorphology.FILL_MAX_VALUE
,RankMorphology.FILL_NEAREST_VALUE
, which mean using of special calculation modes B, C, D.- See Also:
-
asFunctionOfSum
public Matrix<? extends PArray> asFunctionOfSum(Matrix<? extends PArray> src, Pattern pattern, Func processingFunc) Description copied from interface:RankMorphology
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
RankMorphology.asMean(Matrix, Pattern)
.- Specified by:
asFunctionOfSum
in interfaceRankMorphology
- Specified by:
asFunctionOfSum
in classAbstractRankMorphology
- 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.
- See Also:
-
functionOfSum
public void functionOfSum(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Pattern pattern, Func processingFunc) Description copied from interface:RankMorphology
Equivalent toRankMorphology.functionOfSum(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
RankMorphology.mean(Matrix, Matrix, Pattern)
.- Specified by:
functionOfSum
in interfaceRankMorphology
- Specified by:
functionOfSum
in classAbstractRankMorphology
- 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.- See Also:
-
asFunctionOfPercentilePair
public Matrix<? extends PArray> asFunctionOfPercentilePair(Matrix<? extends PArray> src, Matrix<? extends PArray> percentilesIndexes1, Matrix<? extends PArray> percentilesIndexes2, Pattern pattern, Func processingFunc) Description copied from interface:RankMorphology
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
RankMorphology.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.- Specified by:
asFunctionOfPercentilePair
in interfaceRankMorphology
- Specified by:
asFunctionOfPercentilePair
in classAbstractRankMorphology
- Parameters:
src
- the source matrix.percentilesIndexes1
- the 1st matrix containing r argument: the indexes of the 1st percentile v1 for every element of the result.percentilesIndexes2
- 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.
- See Also:
-
functionOfPercentilePair
public void functionOfPercentilePair(Matrix<? extends UpdatablePArray> dest, Matrix<? extends PArray> src, Matrix<? extends PArray> percentilesIndexes1, Matrix<? extends PArray> percentilesIndexes2, Pattern pattern, Func processingFunc) Description copied from interface:RankMorphology
Equivalent toRankMorphology.functionOfPercentilePair(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.- Specified by:
functionOfPercentilePair
in interfaceRankMorphology
- Specified by:
functionOfPercentilePair
in classAbstractRankMorphology
- Parameters:
dest
- the target matrix.src
- the source matrix.percentilesIndexes1
- the 1st matrix containing r argument: the indexes of the 1st percentile v1 for every element of the result.percentilesIndexes2
- 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.- See Also:
-