|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectnet.grelf.grip.ImageBase
net.grelf.grip.ImageInt
public class ImageInt
For holding and processing images having 32 bits (integer) per pixel per channel. Originally used for adding
16-bit images, to prevent overflow but that is now done by the sub-class AccumulatorInt.
This needs a lot of memory of course: width x height x (12 + 4n) bytes for n-channel images.
This Image is used as an alternative to BufferedImage for holding 32-bits-per-channel (integer) images.
Its behaviour differs from BufferedImages in that the maximum level available is not automatically increased
to 2 to the power 32. A 16-bit BufferedImage would always be considered to have a maximum level of 65535
but the maximum level of an Accumulator is the maximum level actually reached in the data (across all
channels). The range of values held must be updated by every operation that modifies the data, so it is then
available as getRange () without rescanning the image. A rescan can always be done, by getOverallRange () or
getChannelRanges (), but that can be time consuming.
Whereas a BufferedImage would be processed by static methods in class ImProcess, ImageInts have all such
methods as instance methods.
The data can be saved on disc and reloaded in FITS format. GRIP has its own simple format (.accum files)
which has really been made obsolete by the FITS capability but it is still available for backwards
compatibility. The .accum format comprises a text header followed by binary pixel data.
The header is Java 2-bytes-per-character text strings, each preceded by an int containing the number of
characters in the string. Each string except the first contains an equals sign (=) after which are the
digits of a value. There are no line end characters or other formatting. The strings are (UTF-8 encoding):
GRIP v...
width(px)=...
height(px)=...
channels=...
bitsPerChannel=32
min=...
max=...
where the first string contains the GRIP version number and min and max show the overall range of values
occurring (across all channels).
The binary pixel data are stored as int values, in the usual Java big-endian format, in this order:
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
for (int b = 0; b < nBands; b++)
{
dos.writeInt (accum [x][y][b]); // dos is a java.io.DataOutputStream
}
}
}
| Field Summary | |
|---|---|
protected int[][] |
data
|
| Constructor Summary | |
|---|---|
ImageInt(java.awt.image.BufferedImage bim)
Use the BufferedImage to set the width, height and number of bands (channels) in this Image. |
|
ImageInt(int width,
int height,
int nBands)
Creates image without setting any pixels. |
|
ImageInt(int width,
int height,
int nBands,
boolean fillWithZeroes)
Creates image with pixels optionally set to zero. |
|
ImageInt(java.lang.String filePath)
Reload an accumulator that has previously been saved on disc by GRIP. |
|
| Method Summary | |
|---|---|
void |
add(java.awt.image.BufferedImage bim)
Add pixel values from bim into the accumulator array. |
void |
add(java.awt.image.BufferedImage bim,
double dx,
double dy)
Add pixel values from bim into the accumulator array, offset by vector (dx, dy). |
void |
add(java.awt.image.BufferedImage bim,
int dx,
int dy)
Add pixel values from bim into the accumulator array, offset by vector (dx, dy). |
void |
add(Image other)
Add pixel values from the other Image into the current data array. |
void |
add(ImageInt other)
Add pixel values from another accumulator into the accumulator array. |
void |
add(ImageInt other,
double f1,
double f2)
Add pixel values from another accumulator into the accumulator array, taking fraction f1 of the values in the current accumulator and f2 of those in the other. |
void |
applyCurve(RangeInt currentRange,
java.util.List<java.awt.Point> points,
java.awt.image.BufferedImage bim)
Apply a look-up curve to transform accumulator pixels into BufferedImage pixels or, if the BufferedImage is null, back into the accumulator. |
void |
autoCrop()
Automatically remove any rectangular margin of black (0, 0, 0) pixels from the image, thereby cropping it. |
void |
autoStretch(boolean allChannelsSame)
Stretch the contrast in the image so the full range of levels is used. |
void |
autoStretch(boolean allChannelsSame,
java.awt.Point topLeft,
java.awt.Point bottomRight)
Stretch the contrast in the image so the full range of levels is used. |
byte[][] |
autoThreshold()
Threshold automatically. |
void |
averageVertically()
Replace every pixel of every vertical line in the image by the average of the levels along the line. |
void |
averageVertically(int yMin,
int yMax)
Replace every pixel of every vertical line in the image by the average of the levels along the line, within two y coordinate limits. |
protected void |
checkCompatibility(java.awt.image.BufferedImage bim)
|
Image |
clone()
|
java.awt.image.BufferedImage |
convertTo16BitImage()
|
ImageDouble |
convertToAccumulatorDouble()
Convert to an AccumulatorDouble containing the same values. |
void |
convertToMonochrome()
Reduce the number of bands from 3 to 1, converting RGB to monochrome, using 0.325 x red + 0.5 * green + 0.175 * blue. |
void |
convertToMonochrome(double... f)
Reduce the number of bands to 1, combining channels, using sum_i (f[i]/I x px[i]), wher * I = sum_i (f[i]). |
void |
correctBackground()
Level the background of the image by dividing the image into n x n cells and using the modal values of the histogram in every cell. |
void |
crop(java.awt.Point pt1,
java.awt.Point pt2)
Crop the accumulator by a rectangle defined by the diagonally opposite points. |
void |
divide(int n)
Divide all pixel values (in all bands) in the accumulator by n. |
void |
divideByFlatField(ImageInt other)
Divide this accumulator by other accumulator (flat field), pixel by pixel. |
void |
drawImage(java.awt.image.BufferedImage bim)
Convert the accumulator data into a BufferedImage, by drawing it into the image displayed in an ImFrame. |
void |
drawRim(int width,
java.awt.Color colour)
Draw a rim around the image, of the given width and colour |
void |
fit(int width,
int height)
Scale the image so it fits into the given width and height (in pixels), without changing its proportions. |
void |
flipHorizontal()
Flip the image horizontally. |
void |
flipVertical()
Flip the image vertically. |
int |
getBitsPerChannel()
Get the number of bits per channel; always returns 32. |
RangeInt[] |
getChannelRanges()
Find the range of values in each channel, as pairs of int values. |
RangeDouble[] |
getChannelRangesDouble()
Find the range of values in each channel, as pairs of double values. |
int |
getHeight()
Get the height, in pixels, of the image. |
int[] |
getHorizontalSamples(int x0,
int y,
int band,
int n)
|
Metadata |
getMetadata()
Get metadata associated with the image. |
int |
getNBands()
Get the number of bands (channels) in the image. |
RangeInt |
getOverallRange()
Get overall range of values across all channels, as a pair of int values. |
RangeDouble |
getOverallRangeDouble()
Get overall range of values across all channels, as a pair of double values. |
int[] |
getPixel(int x,
int y)
Get array of int pixel values for all bands at the given integer (x, y) position. |
double[] |
getPixelDouble(int x,
int y)
Get array of double pixel values for all bands at the given integer (x, y) position. |
double[] |
getPixelDoubleInterpolated(double x,
double y)
Get array of double pixel values for all bands at the given fractional (x, y) position. |
int[] |
getPixelInterpolated(double x,
double y)
Get array of int pixel values for all bands at the given fractional (x, y) position. |
RangeInt |
getRange()
Get the minimum and maximum values occurring, across all channels. |
RangeDouble |
getRangeDouble()
Get the minimum and maximum values occurring, across all channels. |
int[] |
getVerticalSamples(int x,
int y0,
int band,
int n)
|
int |
getWidth()
Get the width, in pixels, of the image. |
Image |
gnomonicProjection(int focalLength)
Project from sphere to plane. |
Image |
inverseGnomonicProjection(int focalLength)
Project from plane to sphere. |
void |
invert()
Invert the colour at every pixel in the image. |
static boolean |
isAccumFile(java.lang.String path)
Read the start of a file to find out whether it is a saved Accumulator. |
void |
meanFilter(int halfWidth,
javax.swing.ProgressMonitor monitor)
Replace every pixel in the image by the mean value of its n x n neighbourhood, where n = 2.halfWidth + 1. |
void |
medianFilter(int halfWidth,
javax.swing.ProgressMonitor monitor)
Replace every pixel in the image by the median value of its n x n neighbourhood, where n = 2.halfWidth + 1. |
void |
multiply(double f)
Multiply all pixel values (in all bands) in the accumulator by factor f, truncating the result if pixels contain integer values. |
void |
multiply(ImageInt other)
|
void |
multiply(ImageInt other,
double f1,
double f2)
Multiply fraction f1 of this accumulator by f2 of the other. |
void |
nearestExtremeFilter(int halfWidth,
javax.swing.ProgressMonitor monitor)
Replace every pixel in the image by the nearest of the max and min of its n x n neighbourhood, where n = 2.halfWidth + 1. |
void |
neutraliseBackground()
Equate the modes in the histogram by stretching downwards from maxLevel. |
void |
rankFilter(int halfWidth,
javax.swing.ProgressMonitor monitor)
Replace every pixel in the image by its rank in its n x n neighbourhood, where n = 2.halfWidth + 1. |
void |
reapplyColour(Image intensityAcc,
Image colourAcc)
For combining a monochrome intensity image with a multi-band colour information image, the 2 images having been created by ImProcess.splitIntensity (). |
Image |
rotate(double angleDegs)
Rotate the image anticlockwise by the given angle (in degrees). |
void |
save(java.lang.String filePath)
Save on disc: slower version, has to work out the range of values occurring in the accumulator. |
void |
save(java.lang.String filePath,
RangeDouble range)
Save on disc: faster version if the range of values occurring in the accumulator is already known. |
void |
save(java.lang.String filePath,
RangeInt range)
Save on disc: faster version if the range of values occurring in the accumulator is already known. |
void |
saveAsFITS(java.lang.String filePath)
|
Image |
scale(double factor,
boolean interpolating)
Scale the image in x and y by the given factor |
void |
scale(RangeDouble[] currentChannelRanges,
java.awt.image.BufferedImage bim)
Deprecated. |
void |
scale(RangeDouble[] currentChannelRanges,
RangeDouble[] targetChannelRanges)
Deprecated. |
void |
scale(RangeInt[] currentChannelRanges,
java.awt.image.BufferedImage bim)
Deprecated. |
void |
scale(RangeInt[] currentChannelRanges,
RangeInt[] targetChannelRanges)
Deprecated. |
void |
set(java.awt.image.BufferedImage bim)
Set pixel values from bim into the accumulator array. |
void |
setMetadata(Metadata theData)
Associate metadata with the image. |
void |
setPixel(int x,
int y,
int[] px)
Does nothing if (x, y) is outside the image. |
void |
setPixel(int x,
int y,
int band,
int px)
Set value into a single band of a pixel without changing the other bands. |
void |
setPixelDouble(int x,
int y,
double[] px)
Does nothing if (x, y) is outside the image. |
void |
setPixelDouble(int x,
int y,
int band,
double px)
Set value into a single band of a pixel without changing the other bands. |
protected void |
setRange(RangeInt range)
|
Image[] |
splitChannels()
Convert image to any array of monochrome images. |
void |
subtract(java.awt.image.BufferedImage bim)
Subtract pixel values of bim from the accumulator array. |
void |
subtract(ImageInt other)
Subtract other from this, pixel by pixel, the result being about the half-way brightness level so that both negative and positive results can be seen. |
void |
subtractToZero(ImageInt other)
Subtract other from this, pixel by pixel, negative results being cut off at zero. |
byte[][] |
threshold(Threshold thresh)
Threshold the image to detect pixels in the range(s) specified by the given threshold. |
java.lang.String |
toString()
Get a simple description : wd x ht x channels |
Image |
translate(int dx,
int dy)
Displace the image content by the given offset vector. |
void |
varianceFilter(int halfWidth,
javax.swing.ProgressMonitor monitor)
Replace every pixel in the image by the variance of its n x n neighbourhood, where n = 2.halfWidth + 1. |
| Methods inherited from class net.grelf.grip.ImageBase |
|---|
padTo, padTo, rJustified20 |
| Methods inherited from class java.lang.Object |
|---|
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
protected int[][] data
| Constructor Detail |
|---|
public ImageInt(int width,
int height,
int nBands)
public ImageInt(int width,
int height,
int nBands,
boolean fillWithZeroes)
public ImageInt(java.awt.image.BufferedImage bim)
throws IncompatibleImageException
IncompatibleImageExceptionpublic ImageInt(java.lang.String filePath)
| Method Detail |
|---|
public int getWidth()
getWidth in interface Imagepublic int getHeight()
getHeight in interface Imagepublic int getNBands()
getNBands in interface Imagepublic int getBitsPerChannel()
getBitsPerChannel in interface Imagepublic Metadata getMetadata()
getMetadata in interface Imagepublic void setMetadata(Metadata theData)
setMetadata in interface Imagepublic RangeInt getRange()
getRange in interface Imageprotected void setRange(RangeInt range)
public RangeDouble getRangeDouble()
getRangeDouble in interface Imagepublic RangeInt getOverallRange()
getOverallRange in interface Imagepublic RangeDouble getOverallRangeDouble()
getOverallRangeDouble in interface Imagepublic RangeInt[] getChannelRanges()
getChannelRanges in interface Imagepublic RangeDouble[] getChannelRangesDouble()
getChannelRangesDouble in interface Image
protected void checkCompatibility(java.awt.image.BufferedImage bim)
throws IncompatibleImageException
IncompatibleImageException
public void add(java.awt.image.BufferedImage bim)
throws IncompatibleImageException
add in interface ImageIncompatibleImageException
public void add(Image other)
throws IncompatibleImageException
add in interface ImageIncompatibleImageException
public void add(ImageInt other)
throws IncompatibleImageException
IncompatibleImageException
public void add(ImageInt other,
double f1,
double f2)
throws IncompatibleImageException
IncompatibleImageException
public void add(java.awt.image.BufferedImage bim,
int dx,
int dy)
throws IncompatibleImageException
add in interface ImageIncompatibleImageException
public void add(java.awt.image.BufferedImage bim,
double dx,
double dy)
throws IncompatibleImageException
add in interface ImageIncompatibleImageException
public void applyCurve(RangeInt currentRange,
java.util.List<java.awt.Point> points,
java.awt.image.BufferedImage bim)
throws IncompatibleImageException
applyCurve in interface ImageIncompatibleImageExceptionpublic void autoCrop()
autoCrop in interface Imagepublic void autoStretch(boolean allChannelsSame)
autoStretch in interface Image
public void autoStretch(boolean allChannelsSame,
java.awt.Point topLeft,
java.awt.Point bottomRight)
autoStretch in interface Imagepublic byte[][] autoThreshold()
autoThreshold in interface Imagepublic void averageVertically()
averageVertically in interface Image
public void averageVertically(int yMin,
int yMax)
averageVertically in interface Imagepublic Image clone()
clone in interface Imageclone in class java.lang.Objectpublic java.awt.image.BufferedImage convertTo16BitImage()
public ImageDouble convertToAccumulatorDouble()
public void convertToMonochrome()
convertToMonochrome in interface Imagepublic void convertToMonochrome(double... f)
convertToMonochrome in interface Imagepublic void correctBackground()
public void crop(java.awt.Point pt1,
java.awt.Point pt2)
crop in interface Image
public void drawRim(int width,
java.awt.Color colour)
public void fit(int width,
int height)
fit in interface Imagepublic void flipHorizontal()
flipHorizontal in interface Imagepublic void flipVertical()
flipVertical in interface Imagepublic void divide(int n)
divide in interface Imagepublic void divideByFlatField(ImageInt other)
public void drawImage(java.awt.image.BufferedImage bim)
drawImage in interface Image
public int[] getPixel(int x,
int y)
getPixel in interface Image
public double[] getPixelDouble(int x,
int y)
getPixelDouble in interface Image
public int[] getPixelInterpolated(double x,
double y)
getPixelInterpolated in interface Image
public double[] getPixelDoubleInterpolated(double x,
double y)
getPixelDoubleInterpolated in interface Image
public int[] getHorizontalSamples(int x0,
int y,
int band,
int n)
public int[] getVerticalSamples(int x,
int y0,
int band,
int n)
public Image gnomonicProjection(int focalLength)
gnomonicProjection in interface Imagepublic Image inverseGnomonicProjection(int focalLength)
inverseGnomonicProjection in interface Imagepublic void invert()
invert in interface Imagepublic static boolean isAccumFile(java.lang.String path)
public void meanFilter(int halfWidth,
javax.swing.ProgressMonitor monitor)
meanFilter in interface Image
public void medianFilter(int halfWidth,
javax.swing.ProgressMonitor monitor)
medianFilter in interface Imagepublic void multiply(double f)
multiply in interface Imagepublic void multiply(ImageInt other)
public void multiply(ImageInt other,
double f1,
double f2)
public void nearestExtremeFilter(int halfWidth,
javax.swing.ProgressMonitor monitor)
nearestExtremeFilter in interface Imagepublic void neutraliseBackground()
neutraliseBackground in interface Image
public void rankFilter(int halfWidth,
javax.swing.ProgressMonitor monitor)
rankFilter in interface Image
public void reapplyColour(Image intensityAcc,
Image colourAcc)
reapplyColour in interface Imagepublic Image rotate(double angleDegs)
rotate in interface Imagepublic void save(java.lang.String filePath)
save in interface Image
public void save(java.lang.String filePath,
RangeInt range)
save in interface Image
public void save(java.lang.String filePath,
RangeDouble range)
save in interface Imagepublic void saveAsFITS(java.lang.String filePath)
saveAsFITS in interface Image
public Image scale(double factor,
boolean interpolating)
scale in interface Image
@Deprecated
public void scale(RangeInt[] currentChannelRanges,
RangeInt[] targetChannelRanges)
scale in interface Image
@Deprecated
public void scale(RangeInt[] currentChannelRanges,
java.awt.image.BufferedImage bim)
throws IncompatibleImageException
scale in interface ImageIncompatibleImageException
@Deprecated
public void scale(RangeDouble[] currentChannelRanges,
RangeDouble[] targetChannelRanges)
scale in interface Image
@Deprecated
public void scale(RangeDouble[] currentChannelRanges,
java.awt.image.BufferedImage bim)
throws IncompatibleImageException
scale in interface ImageIncompatibleImageException
public final void set(java.awt.image.BufferedImage bim)
throws IncompatibleImageException
set in interface ImageIncompatibleImageException
public void setPixel(int x,
int y,
int[] px)
setPixel in interface Image
public void setPixel(int x,
int y,
int band,
int px)
setPixel in interface Image
public void setPixelDouble(int x,
int y,
double[] px)
setPixelDouble in interface Image
public void setPixelDouble(int x,
int y,
int band,
double px)
setPixelDouble in interface Imagepublic Image[] splitChannels()
splitChannels in interface Imagepublic void subtract(ImageInt other)
public void subtract(java.awt.image.BufferedImage bim)
throws IncompatibleImageException
subtract in interface ImageIncompatibleImageExceptionpublic void subtractToZero(ImageInt other)
public byte[][] threshold(Threshold thresh)
threshold in interface Imagepublic java.lang.String toString()
toString in interface ImagetoString in class java.lang.Object
public Image translate(int dx,
int dy)
translate in interface Image
public void varianceFilter(int halfWidth,
javax.swing.ProgressMonitor monitor)
varianceFilter in interface Image
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||