public class ConvolutionKernelFilter extends ImageToImageOperation
GrayIntegerImage
and
RGBIntegerImage
.
ConvolutionKernelFilter filter = new ConvolutionKernelFilter(); filter.setKernel(ConvolutionKernelFilter.TYPE_SHARPEN); filter.setInputImage(image); filter.process(); PixelImage sharpenedImage = filter.getOutputImage();Use static convenience method on image
img
:
PixelImage filteredImage = ConvolutionKernelFilter.filter(img, ConvolutionKernelFilter.TYPE_BLUR);
The resulting implementation is significantly faster than the reference implementation. The contest was started by the posting [JPEC#3] Vorschläge to de.comp.lang.java by Marco Schmidt (2001-02-18) and was ended by the posting [JPEC#3] Ergebnisse (2001-03-07). A Usenet archive like Google Groups should be able to provide the postings.
Modifier and Type | Field and Description |
---|---|
private static int[] |
BLUR_DATA |
private static int[] |
EDGE_DETECTION_DATA |
private static int[] |
EMBOSS_DATA |
private static int[] |
HORIZONTAL_PREWITT_DATA |
private static int[] |
HORIZONTAL_SOBEL_DATA |
private int |
kernelBias |
private int[] |
kernelData |
private int |
kernelDiv |
private int |
kernelHeight |
private int |
kernelWidth |
private static int[] |
LITHOGRAPH_DATA |
private static ConvolutionKernelData[] |
PREDEFINED_KERNELS |
private static int[] |
PSYCHEDELIC_DISTILLATION_DATA |
private static int[] |
SHARPEN_DATA |
static int |
TYPE_BLUR |
static int |
TYPE_EDGE_DETECTION |
static int |
TYPE_EMBOSS |
static int |
TYPE_HORIZONTAL_PREWITT |
static int |
TYPE_HORIZONTAL_SOBEL |
static int |
TYPE_LITHOGRAPH |
static int |
TYPE_PSYCHEDELIC_DISTILLATION |
static int |
TYPE_SHARPEN |
static int |
TYPE_VERTICAL_PREWITT |
static int |
TYPE_VERTICAL_SOBEL |
private static int[] |
VERTICAL_PREWITT_DATA |
private static int[] |
VERTICAL_SOBEL_DATA |
Constructor and Description |
---|
ConvolutionKernelFilter() |
Modifier and Type | Method and Description |
---|---|
private void |
copyRow(IntegerImage srcImage,
int srcChannelIndex,
int rowIndex,
int[] dest,
int destOffset,
int numBorderColumns)
Copies row data from input image to buffer and replicates
samples at the left and right border.
|
static PixelImage |
filter(PixelImage input,
ConvolutionKernelData data) |
static PixelImage |
filter(PixelImage input,
int kernelType)
Filters argument image with argument kernel type and returns output image.
|
void |
process()
This method does the actual work of the operation.
|
private void |
process(IntegerImage in,
IntegerImage out) |
private void |
process(int channelIndex,
IntegerImage in,
IntegerImage out)
Applies the kernel to one of the channels of an image.
|
void |
setKernel(ConvolutionKernelData ckd)
Sets kernel data to be used for filtering.
|
void |
setKernel(int type)
Sets one of the predefined kernel types to be used for filtering.
|
void |
setKernel(int[] data,
int width,
int height,
int div,
int bias)
Sets properties of the kernel to be used in this operation.
|
canInputAndOutputBeEqual, ensureImagesHaveSameResolution, ensureInputImageIsAvailable, ensureOutputImageResolution, getInputImage, getOutputImage, setCanInputAndOutputBeEqual, setInputImage, setOutputImage
addProgressListener, addProgressListeners, getAbort, removeProgressListener, setAbort, setProgress, setProgress
public static final int TYPE_BLUR
public static final int TYPE_SHARPEN
public static final int TYPE_EDGE_DETECTION
public static final int TYPE_EMBOSS
public static final int TYPE_PSYCHEDELIC_DISTILLATION
public static final int TYPE_LITHOGRAPH
public static final int TYPE_HORIZONTAL_SOBEL
public static final int TYPE_VERTICAL_SOBEL
public static final int TYPE_HORIZONTAL_PREWITT
public static final int TYPE_VERTICAL_PREWITT
private static final int[] BLUR_DATA
private static final int[] SHARPEN_DATA
private static final int[] EDGE_DETECTION_DATA
private static final int[] EMBOSS_DATA
private static final int[] PSYCHEDELIC_DISTILLATION_DATA
private static final int[] LITHOGRAPH_DATA
private static final int[] HORIZONTAL_SOBEL_DATA
private static final int[] VERTICAL_SOBEL_DATA
private static final int[] HORIZONTAL_PREWITT_DATA
private static final int[] VERTICAL_PREWITT_DATA
private static ConvolutionKernelData[] PREDEFINED_KERNELS
private int kernelBias
private int[] kernelData
private int kernelDiv
private int kernelHeight
private int kernelWidth
private void copyRow(IntegerImage srcImage, int srcChannelIndex, int rowIndex, int[] dest, int destOffset, int numBorderColumns)
public static PixelImage filter(PixelImage input, int kernelType)
PixelImage blurredImage = ConvolutionKernelFilter.filter(in, ConvolutionKernelFilter.TYPE_BLUR);
public static PixelImage filter(PixelImage input, ConvolutionKernelData data)
private void process(int channelIndex, IntegerImage in, IntegerImage out)
channelIndex
- index of the channel to be filtered, must be from 0 to ByteChannelImage.getNumChannels() - 1private void process(IntegerImage in, IntegerImage out)
public void process() throws MissingParameterException, WrongParameterException
Operation
process
in class Operation
MissingParameterException
- if any mandatory parameter was not given to the operationWrongParameterException
- if at least one of the input parameters was
not initialized appropriately (values out of the valid interval, etc.)public void setKernel(int[] data, int width, int height, int div, int bias)
data
- the kernel coefficients; this one-dimensional array stores
them in order top-to-bottom, left-to-right; the length of this
array must be at least width times heightwidth
- the width of the kernel; must not be evenheight
- the height of the kernel; must not be evendiv
- the result is divided by this value after the addition of value
(so this value must not be zero)bias
- this value is added to the result before the divisionpublic void setKernel(ConvolutionKernelData ckd)
ckd
- all information necessary for filteringpublic void setKernel(int type)
type
- one of the TYPE_xyz constants of this classjava.lang.IllegalArgumentException
- if the argument is not a valid TYPE_xyz constant