Applies a convolution kernel filter to an image.
Supported image types
Only image types that store intensity samples are supported.
Right now, this only includes
GrayIntegerImage
and
RGBIntegerImage
.
Usage example
Standard approach (set up everything yourself):
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);
Credits
The implementation of the filter was created by members of the Java newsgroup
de.comp.lang.java and adapted to the JIU
framework by Marco Schmidt.
As it was done in a contest style where people improved other people's work, and even
more people suggested ideas, tested results and discussed the contest it is (1)
hard to tell who won the contest and (2) only fair to list all persons involved.
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.
BLUR_DATA
private static final int[] BLUR_DATA
EDGE_DETECTION_DATA
private static final int[] EDGE_DETECTION_DATA
EMBOSS_DATA
private static final int[] EMBOSS_DATA
HORIZONTAL_PREWITT_DATA
private static final int[] HORIZONTAL_PREWITT_DATA
HORIZONTAL_SOBEL_DATA
private static final int[] HORIZONTAL_SOBEL_DATA
LITHOGRAPH_DATA
private static final int[] LITHOGRAPH_DATA
PSYCHEDELIC_DISTILLATION_DATA
private static final int[] PSYCHEDELIC_DISTILLATION_DATA
SHARPEN_DATA
private static final int[] SHARPEN_DATA
TYPE_BLUR
public static final int TYPE_BLUR
TYPE_EDGE_DETECTION
public static final int TYPE_EDGE_DETECTION
TYPE_EMBOSS
public static final int TYPE_EMBOSS
TYPE_HORIZONTAL_PREWITT
public static final int TYPE_HORIZONTAL_PREWITT
TYPE_HORIZONTAL_SOBEL
public static final int TYPE_HORIZONTAL_SOBEL
TYPE_LITHOGRAPH
public static final int TYPE_LITHOGRAPH
TYPE_PSYCHEDELIC_DISTILLATION
public static final int TYPE_PSYCHEDELIC_DISTILLATION
TYPE_SHARPEN
public static final int TYPE_SHARPEN
TYPE_VERTICAL_PREWITT
public static final int TYPE_VERTICAL_PREWITT
TYPE_VERTICAL_SOBEL
public static final int TYPE_VERTICAL_SOBEL
VERTICAL_PREWITT_DATA
private static final int[] VERTICAL_PREWITT_DATA
VERTICAL_SOBEL_DATA
private static final int[] VERTICAL_SOBEL_DATA
kernelBias
private int kernelBias
kernelData
private int[] kernelData
kernelDiv
private int kernelDiv
kernelHeight
private int kernelHeight
kernelWidth
private int kernelWidth
copyRow
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.
filter
public static PixelImage filter(PixelImage input,
int kernelType)
Filters argument image with argument kernel type and returns output image.
Static convenience method to do filtering with one line of code:
PixelImage blurredImage = ConvolutionKernelFilter.filter(in, ConvolutionKernelFilter.TYPE_BLUR);
process
private void process(int channelIndex,
IntegerImage in,
IntegerImage out)
Applies the kernel to one of the channels of an image.
channelIndex
- index of the channel to be filtered, must be from 0 to ByteChannelImage.getNumChannels() - 1
setKernel
public void setKernel(int type)
Sets one of the predefined kernel types to be used for filtering.
type
- one of the TYPE_xyz constants of this class
setKernel
public void setKernel(int[] data,
int width,
int height,
int div,
int bias)
Sets properties of the kernel to be used in this operation.
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 division
setKernel
public void setKernel(ConvolutionKernelData ckd)
Sets kernel data to be used for filtering.
ckd
- all information necessary for filtering