Class ThresholdBlock<T extends ImageGray<T>,S extends ImageBase<S>>
- All Implemented Interfaces:
InputToBinary<T>
- Direct Known Subclasses:
ThresholdBlock_MT
Computes image statistics in regularly spaced blocks across the image. Then computes an average of the statistics in a block within a local 3x3 grid region. The average statistics in a local 3x3 grid region is used to reduce the adverse affects of using a grid. Ideally a local region around each pixel would be used, but this is expensive to compute. Since a grid is used instead of a pixel local region boundary conditions can be an issue. For example, consider a black square in the image, if the grid just happens to lie on this black square perfectly then if you look at only a single grid element it will be considered textureless and the edge lost. This problem isn't an issue if you consder a local 3x3 region of blocks.
The size each block in the grid in pixels is adjusted depending on image size. This is done to minimize "squares" in the upper image boundaries from having many more pixels than other blocks.
The block based approach used here was inspired by a high level description found in AprilTags.
-
Nested Class Summary
-
Field Summary
Modifier and TypeFieldDescriptionprotected int
protected int
protected ThresholdBlock.BlockProcessor<T,
S> protected RecycleStack<ThresholdBlock.BlockProcessor<T,
S>> protected ConfigLength
protected S
protected boolean
-
Constructor Summary
ConstructorDescriptionThresholdBlock
(ThresholdBlock.BlockProcessor<T, S> processor, ConfigLength requestedBlockWidth, boolean thresholdFromLocalBlocks, Class<T> imageClass) Configures the detector -
Method Summary
Modifier and TypeMethodDescriptionprotected void
applyThreshold
(T input, GrayU8 output) Applies the dynamically computed threshold to each pixel in the image, one block at a timeprotected void
computeStatistics
(T input, int innerWidth, int innerHeight) Computes the min-max value for each block in the imageboolean
void
Converts the gray scale input image into a binary imagevoid
setThresholdFromLocalBlocks
(boolean thresholdFromLocalBlocks)
-
Field Details
-
stats
-
requestedBlockWidth
-
blockWidth
protected int blockWidth -
blockHeight
protected int blockHeight -
thresholdFromLocalBlocks
protected boolean thresholdFromLocalBlocks -
original
-
processors
protected RecycleStack<ThresholdBlock.BlockProcessor<T extends ImageGray<T>,S extends ImageBase<S>>> processors
-
-
Constructor Details
-
ThresholdBlock
public ThresholdBlock(ThresholdBlock.BlockProcessor<T, S> processor, ConfigLength requestedBlockWidth, boolean thresholdFromLocalBlocks, Class<T> imageClass) Configures the detector- Parameters:
requestedBlockWidth
- About how wide and tall you wish a block to be in pixels.
-
-
Method Details
-
process
Converts the gray scale input image into a binary image- Specified by:
process
in interfaceInputToBinary<T extends ImageGray<T>>
- Parameters:
input
- Input imageoutput
- Output binary image
-
applyThreshold
Applies the dynamically computed threshold to each pixel in the image, one block at a time -
computeStatistics
Computes the min-max value for each block in the image -
isThresholdFromLocalBlocks
public boolean isThresholdFromLocalBlocks() -
setThresholdFromLocalBlocks
public void setThresholdFromLocalBlocks(boolean thresholdFromLocalBlocks) -
getInputType
- Specified by:
getInputType
in interfaceInputToBinary<T extends ImageGray<T>>
-