Package net.sourceforge.jiu.filters
Class OilFilter
java.lang.Object
net.sourceforge.jiu.ops.Operation
net.sourceforge.jiu.ops.ImageToImageOperation
net.sourceforge.jiu.filters.AreaFilterOperation
net.sourceforge.jiu.filters.OilFilter
Applies a filter that makes the image look like an oil painting.
This is accomplished by creating a histogram of the neighboring samples
for each input sample and storing the value that occurs most often
in the output image.
If two or more samples occur an equal number of times, the lowest
sample value is picked.
Supported image types
Can process bothGrayIntegerImage
and
RGBIntegerImage
.
Note that this operation becomes very slow with 16 bits per sample
because a lot of runs over a 65536 element array are necessary.
Usage example
PixelImage image = ...; // some GrayIntegerImage or RGBIntegerImage OilFilter filter = new OilFilter(); filter.setArea(5, 5); filter.setInputImage(image); filter.process(); PixelImage filteredImage = filter.getOutputImage();
Credits
Idea taken from the Oil class of Jef Poskanzer's ACME package.- Author:
- Marco Schmidt
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionfinal int
computeSample
(int[] samples, int numSamples) Determine the resulting sample for an array with the source sample and zero or more of its neighbors.void
process()
This method does the actual work of the operation.Methods inherited from class net.sourceforge.jiu.filters.AreaFilterOperation
checkAreaHeight, checkAreaWidth, getAreaHeight, getAreaWidth, setArea, setAreaHeight, setAreaWidth
Methods inherited from class net.sourceforge.jiu.ops.ImageToImageOperation
canInputAndOutputBeEqual, ensureImagesHaveSameResolution, ensureInputImageIsAvailable, ensureOutputImageResolution, getInputImage, getOutputImage, setCanInputAndOutputBeEqual, setInputImage, setOutputImage
Methods inherited from class net.sourceforge.jiu.ops.Operation
addProgressListener, addProgressListeners, getAbort, removeProgressListener, setAbort, setProgress, setProgress
-
Field Details
-
hist
private int[] hist -
zeroes
private int[] zeroes
-
-
Constructor Details
-
OilFilter
public OilFilter()
-
-
Method Details
-
computeSample
public final int computeSample(int[] samples, int numSamples) Description copied from class:AreaFilterOperation
Determine the resulting sample for an array with the source sample and zero or more of its neighbors. This abstract method must be implemented by classes extending this operation. The array will holdnumSamples
samples, which will be stored starting at offset0
.Normally,
numSamples
is equal toAreaFilterOperation.getAreaWidth()
timesAreaFilterOperation.getAreaHeight()
. Near the border of the image you may get less samples. Example: the top left sample of an image has only three neighbors (east, south-east and south), so you will only get four samples (three neighbors and the sample itself).- Specified by:
computeSample
in classAreaFilterOperation
- Parameters:
samples
- the array holding the sample(s)numSamples
- number of samples in the array- Returns:
- sample to be written to the output image
-
process
Description copied from class:Operation
This method does the actual work of the operation. It must be called after all parameters have been given to the operation object.- Overrides:
process
in classAreaFilterOperation
- Throws:
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.)
-