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, setOutputImageaddProgressListener, addProgressListeners, getAbort, removeProgressListener, setAbort, setProgress, setProgresspublic 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
Operationprocess in class OperationMissingParameterException - 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