net.sourceforge.jiu.color.reduction

Class RGBToGrayConversion


public class RGBToGrayConversion
extends ImageToImageOperation

Converts RGB color images (both truecolor and paletted) to grayscale images. The weights to be used with the three base colors red, green and blue can be modified with a call to setColorWeights(float,float,float).

Supported image types

RGB24Image and Paletted8Image can be used as input image types. A Gray8Image be will be created from them.

Could be optimized to use int multiplication instead of float multiplication.

Usage example

Convert some PixelImage rgbImage to grayscale:
PixelImage grayImg = RGBToGrayConversion.convert(rgbImage);
Using your own color weights can be done like this. You may also want to specify an output grayscale image if you have one to reuse.
 RGBToGrayConversion rgbtogray = new RGBToGrayConversion();
 rgbtogray.setInputImage(image);
 rgbtogray.setColorWeights(0.3f, 0.3f, 0.4f);
 rgbtogray.process();
 PixelImage grayImage = rgbtogray.getOutputImage();
 
Author:
Marco Schmidt

Field Summary

static float
DEFAULT_BLUE_WEIGHT
The default weight for blue samples in the conversion, 0.11f.
static float
DEFAULT_GREEN_WEIGHT
The default weight for green samples in the conversion, 0.59f.
static float
DEFAULT_RED_WEIGHT
The default weight for red samples in the conversion, 0.3f.
private float
blueWeight
private float
greenWeight
private float
redWeight

Fields inherited from class net.sourceforge.jiu.ops.ImageToImageOperation

canInAndOutBeEqual, inputImage, outputImage

Fields inherited from class net.sourceforge.jiu.ops.Operation

abort, progressListeners

Method Summary

static PixelImage
convert(PixelImage rgbImage)
Static convenience method to convert an RGB image to a grayscale image.
void
process()
private void
process(Paletted8Image in)
private void
process(RGB24Image in)
private void
process(RGB48Image in)
private void
process(RGBIntegerImage in, GrayIntegerImage out)
void
setColorWeights(float red, float green, float blue)
Sets the weights for the three colors red, green and blue used in the conversion procedure.

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, process, removeProgressListener, setAbort, setProgress, setProgress

Field Details

DEFAULT_BLUE_WEIGHT

public static final float DEFAULT_BLUE_WEIGHT
The default weight for blue samples in the conversion, 0.11f.
Field Value:
0.0f

DEFAULT_GREEN_WEIGHT

public static final float DEFAULT_GREEN_WEIGHT
The default weight for green samples in the conversion, 0.59f.
Field Value:
0.0f

DEFAULT_RED_WEIGHT

public static final float DEFAULT_RED_WEIGHT
The default weight for red samples in the conversion, 0.3f.
Field Value:
0.0f

blueWeight

private float blueWeight

greenWeight

private float greenWeight

redWeight

private float redWeight

Method Details

convert

public static PixelImage convert(PixelImage rgbImage)
            throws MissingParameterException,
                   WrongParameterException
Static convenience method to convert an RGB image to a grayscale image.
Parameters:
rgbImage - input RGB image to be converted
Returns:
a new grayscale image, created from the RGB input image
Throws:
MissingParameterException - rgbImage is null
WrongParameterException - rgbImage's type is unsupported
Since:
0.14.2

process

public void process()
            throws MissingParameterException,
                   WrongParameterException
Overrides:
process in interface Operation

process

private void process(Paletted8Image in)
            throws MissingParameterException,
                   WrongParameterException

process

private void process(RGB24Image in)
            throws WrongParameterException

process

private void process(RGB48Image in)
            throws WrongParameterException

process

private void process(RGBIntegerImage in,
                     GrayIntegerImage out)

setColorWeights

public void setColorWeights(float red,
                            float green,
                            float blue)
Sets the weights for the three colors red, green and blue used in the conversion procedure. For each RGB value (r, g, b) to be converted (whether in a truecolor image or in the palette), the formula is gray = r * red + g * green + b * blue. The default values for these weights are DEFAULT_RED_WEIGHT, DEFAULT_GREEN_WEIGHT and DEFAULT_BLUE_WEIGHT. This method lets the user change these values. Each of these arguments must be >= 0.0f and <= 1.0f. The sum of the three must be <= 1.0f. For any resulting gray value to be spread over the complete scale from 0.0f to 1.0f it is preferable for the sum to be equal to or at least close to 1.0f. However, this is not checked. The smaller the sum of the weights is, the darker the resulting gray image will become.
Parameters:
red - weight of the red sample in the conversion, between 0.0f and 1.0f
green - weight of the green sample in the conversion, between 0.0f and 1.0f
blue - weight of the blue sample in the conversion, between 0.0f and 1.0f