890 lines
37 KiB
TeX
890 lines
37 KiB
TeX
\section{VIPS packages}
|
|
\mylabel{sec:packages}
|
|
|
|
\subsection{Arithmetic}
|
|
|
|
See \fref{fg:arithmetic}.
|
|
|
|
Arithmetic functions work on images as if each band element were a separate
|
|
number. All operations are point-to-point --- each output element depends
|
|
exactly upon the corresponding input element. All (except in a few cases
|
|
noted in the manual pages) will work with images of any type (or any mixture
|
|
of types), of any size and of any number of bands.
|
|
|
|
Arithmetic operations try to preserve precision by increasing the number of
|
|
bits in the output image when necessary. Generally, this follows the ANSI C
|
|
conventions for type promotion --- so multiplying two \verb+IM_BANDFMT_UCHAR+
|
|
images together, for example, produces a \verb+IM_BANDFMT_USHORT+ image, and
|
|
taking the \verb+im_costra()+ of a \verb+IM_BANDFMT_USHORT+ image produces
|
|
a \verb+IM_BANDFMT_FLOAT+ image. The details of the type conversions are
|
|
in the manual pages.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list arithmetic
|
|
im_abs - absolute value
|
|
im_acostra - acos of image (result in degrees)
|
|
im_add - add two images
|
|
im_asintra - asin of image (result in degrees)
|
|
im_atantra - atan of image (result in degrees)
|
|
im_avg - average value of image
|
|
im_point_bilinear - interpolate value at single point, linearly
|
|
im_bandmean - average image bands
|
|
im_ceil - round to smallest integal value not less than
|
|
im_cmulnorm - multiply two complex images, normalising output
|
|
im_costra - cos of image (angles in degrees)
|
|
im_cross_phase - phase of cross power spectrum of two complex images
|
|
im_deviate - standard deviation of image
|
|
im_divide - divide two images
|
|
im_exp10tra - 10^pel of image
|
|
im_expntra - x^pel of image
|
|
im_expntra_vec - [x,y,z]^pel of image
|
|
im_exptra - e^pel of image
|
|
im_fav4 - average of 4 images
|
|
im_floor - round to largest integal value not greater than
|
|
im_gadd - calculate a*in1 + b*in2 + c = outfile
|
|
im_invert - photographic negative
|
|
im_lintra - calculate a*in + b = outfile
|
|
im_linreg - pixelwise linear regression
|
|
im_lintra_vec - calculate a*in + b -> out, a and b vectors
|
|
im_litecor - calculate max(white)*factor*(in/white), if clip == 1
|
|
im_log10tra - log10 of image
|
|
im_logtra - ln of image
|
|
im_max - maximum value of image
|
|
im_maxpos - position of maximum value of image
|
|
im_maxpos_avg - position of maximum value of image, averaging in case of draw
|
|
im_maxpos_vec - position and value of n maxima of image
|
|
im_measure - measure averages of a grid of patches
|
|
im_min - minimum value of image
|
|
im_minpos - position of minimum value of image
|
|
im_minpos_vec - position and value of n minima of image
|
|
im_multiply - multiply two images
|
|
im_powtra - pel^x ofbuildimage
|
|
im_powtra_vec - pel^[x,y,z] of image
|
|
im_remainder - remainder after integer division
|
|
im_remainderconst - remainder after integer division by a constant
|
|
im_remainderconst_vec - remainder after integer division by a vector of constants
|
|
im_rint - round to nearest integal value
|
|
im_sign - unit vector in direction of value
|
|
im_sintra - sin of image (angles in degrees)
|
|
im_stats - many image statistics in one pass
|
|
im_subtract - subtract two images
|
|
im_tantra - tan of image (angles in degrees)
|
|
\end{verbatim}
|
|
\caption{Arithmetic functions}
|
|
\label{fg:arithmetic}
|
|
\end{fig2}
|
|
|
|
\subsection{Relational}
|
|
|
|
See \fref{fg:relational}.
|
|
|
|
Relational functions compare images to other images or to constants. They
|
|
accept any image or pair of images (provided they are the same size and
|
|
have the same number of bands --- their types may differ) and produce a
|
|
\verb+IM_BANDFMT_UCHAR+ image with the same number of bands as the input
|
|
image, with 255 in every band element for which the condition is true and
|
|
0 elsewhere.
|
|
|
|
They may be combined with the boolean functions to form complex relational
|
|
conditions. Use \verb+im_max()+ (or \verb+im_min()+) to find out if a
|
|
condition is true (or false) for a whole image.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list relational
|
|
im_blend - use cond image to blend between images in1 and in2
|
|
im_equal - two images equal in value
|
|
im_equal_vec - image equals doublevec
|
|
im_equalconst - image equals const
|
|
im_ifthenelse - use cond image to choose pels from image in1 or in2
|
|
im_less - in1 less than in2 in value
|
|
im_less_vec - in less than doublevec
|
|
im_lessconst - in less than const
|
|
im_lesseq - in1 less than or equal to in2 in value
|
|
im_lesseq_vec - in less than or equal to doublevec
|
|
im_lesseqconst - in less than or equal to const
|
|
im_more - in1 more than in2 in value
|
|
im_more_vec - in more than doublevec
|
|
im_moreconst - in more than const
|
|
im_moreeq - in1 more than or equal to in2 in value
|
|
im_moreeq_vec - in more than or equal to doublevec
|
|
im_moreeqconst - in more than or equal to const
|
|
im_notequal - two images not equal in value
|
|
im_notequal_vec - image does not equal doublevec
|
|
im_notequalconst - image does not equal const
|
|
\end{verbatim}
|
|
\caption{Relational functions}
|
|
\label{fg:relational}
|
|
\end{fig2}
|
|
|
|
\subsection{Boolean}
|
|
|
|
See \fref{fg:boolean}.
|
|
|
|
The boolean functions perform boolean arithmetic on pairs of
|
|
\verb+IM_BANDFMT_UCHAR+ images. They are useful for combining the results of
|
|
the relational and morphological functions. You can use
|
|
\verb+im_eorconst()+ with 255 as \verb+im_not()+.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list boolean
|
|
im_andimage - bitwise and of two images
|
|
im_andimageconst - bitwise and of an image with a constant
|
|
im_andimage_vec - bitwise and of an image with a vector constant
|
|
im_orimage - bitwise or of two images
|
|
im_orimageconst - bitwise or of an image with a constant
|
|
im_orimage_vec - bitwise or of an image with a vector constant
|
|
im_eorimage - bitwise eor of two images
|
|
im_eorimageconst - bitwise eor of an image with a constant
|
|
im_eorimage_vec - bitwise eor of an image with a vector constant
|
|
im_shiftleft - shift integer image n bits to left
|
|
im_shiftright - shift integer image n bits to right
|
|
\end{verbatim}
|
|
\caption{Boolean functions}
|
|
\label{fg:boolean}
|
|
\end{fig2}
|
|
|
|
\subsection{Colour}
|
|
\label{sec:colour}
|
|
|
|
See \fref{fg:colour}.
|
|
|
|
The colour functions can be divided into two main types. First, functions to
|
|
transform images between the different colour spaces supported by VIPS:
|
|
\verb+RGB+ (also referred to as \verb+disp+), \verb+sRGB+, \verb+XYZ+,
|
|
\verb+Yxy+, \verb+Lab+, \verb+LabQ+, \verb+LabS+, \verb+LCh+ and
|
|
\verb+UCS+), and second, functions for calculating colour difference
|
|
metrics. Figure~\ref{fg:convert} shows how the VIPS colour spaces
|
|
interconvert.
|
|
|
|
\begin{fig2}
|
|
\figw{5in}{interconvert.png}
|
|
\caption{VIPS colour space conversion}
|
|
\label{fg:convert}
|
|
\end{fig2}
|
|
|
|
The colour spaces supported by VIPS are:
|
|
|
|
\begin{description}
|
|
|
|
\item[\texttt{LabQ}]
|
|
This is the principal VIPS colorimetric storage format. See the
|
|
man page for \verb+im_LabQ2Lab()+ for an explanation. You cannot perform
|
|
calculations on \verb+LabQ+ images. They are for storage only. Also refered
|
|
to as \verb+LABPACK+.
|
|
|
|
\item[\texttt{LabS}]
|
|
This format represents coordinates in \cielab{} space as a three-
|
|
band \verb+IM_BANDFMT_SHORT+ image, scaled to fit the full range of bits. It is
|
|
the best format for computation, being relatively compact, quick, and
|
|
accurate. Colour values expressed in this way are hard to visualise.
|
|
|
|
\item[\texttt{Lab}]
|
|
\verb+Lab+ colourspace represents \cielab{} colour values with a three-band
|
|
\verb+IM_BANDFMT_FLOAT+ image. This is the simplest format for general work: adding the
|
|
constant 50 to the L channel, for example, has the expected result.
|
|
|
|
\item[\texttt{XYZ}]
|
|
\ciexyz{} colour space represented as a three-band \verb+IM_BANDFMT_FLOAT+
|
|
image.
|
|
|
|
\item[\texttt{XYZ}]
|
|
\cieyxy{} colour space represented as a three-band \verb+IM_BANDFMT_FLOAT+
|
|
image.
|
|
|
|
\item[\texttt{RGB}]
|
|
(also refered to as \verb+disp+) This format is similar to the RGB colour
|
|
systems used in other packages. If you want to export your image to a PC,
|
|
for example, convert your colorimetric image to \verb+RGB+, then turn it
|
|
to TIFF with \verb+im_vips2tiff()+. You need to supply a structure which
|
|
characterises your display. See the manual page for \verb+im_col_XYZ2rgb()+
|
|
for hints on these guys.
|
|
|
|
VIPS also supports \verb+sRGB+. This is a version of RGB with a carefully
|
|
defined and standard conversion from XYZ. See:
|
|
|
|
\begin{verbatim}
|
|
http://www.color.org/
|
|
\end{verbatim}
|
|
|
|
\item[\texttt{LCh}]
|
|
Like \verb+Lab+, but rectangular $ab$ coordinates are replaced with polar $Ch$
|
|
(Chroma and hue) coordinates. Hue angles are expressed in degrees.
|
|
|
|
\item[\texttt{UCS}]
|
|
A colour space based on the CMC(1:1) colour difference measurement. This
|
|
is a highly uniform colour space, much better than \cielab{} for expressing
|
|
small differences. Conversions to and from \verb+UCS+ are extremely slow.
|
|
|
|
\end{description}
|
|
|
|
All VIPS colourspaces assume a D65 illuminant.
|
|
|
|
The colour-difference functions calculate either $\Delta{}E$ \cielab{} (1976
|
|
or 2000) or $\Delta{}E$ CMC(1:1) on two images in \verb+Lab+, \verb+XYZ+
|
|
or \verb+disp+ colour space.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list colour
|
|
im_LCh2Lab - convert LCh to Lab
|
|
im_LCh2UCS - convert LCh to UCS
|
|
im_Lab2LCh - convert Lab to LCh
|
|
im_Lab2LabQ - convert Lab to LabQ
|
|
im_Lab2LabS - convert Lab to LabS
|
|
im_Lab2UCS - convert Lab to UCS
|
|
im_Lab2XYZ - convert D65 Lab to XYZ
|
|
im_Lab2XYZ_temp - convert Lab to XYZ, with a specified colour temperature
|
|
im_Lab2disp - convert Lab to displayable
|
|
im_LabQ2LabS - convert LabQ to LabS
|
|
im_LabQ2Lab - convert LabQ to Lab
|
|
im_LabQ2XYZ - convert LabQ to XYZ
|
|
im_LabQ2disp - convert LabQ to displayable
|
|
im_LabS2LabQ - convert LabS to LabQ
|
|
im_LabS2Lab - convert LabS to Lab
|
|
im_UCS2LCh - convert UCS to LCh
|
|
im_UCS2Lab - convert UCS to Lab
|
|
im_UCS2XYZ - convert UCS to XYZ
|
|
im_XYZ2Lab - convert D65 XYZ to Lab
|
|
im_XYZ2Lab_temp - convert XYZ to Lab, with a specified colour temperature
|
|
im_XYZ2UCS - convert XYZ to UCS
|
|
im_XYZ2Yxy - convert XYZ to Yxy
|
|
im_XYZ2disp - convert XYZ to displayble
|
|
im_XYZ2sRGB - convert XYZ to sRGB
|
|
im_Yxy2XYZ - convert Yxy to XYZ
|
|
im_dE00_fromLab - calculate delta-E CIE2000 for two Lab images
|
|
im_dECMC_fromLab - calculate delta-E CMC(1:1) for two Lab images
|
|
im_dECMC_fromdisp - calculate delta-E CMC(1:1) for two displayable images
|
|
im_dE_fromLab - calculate delta-E for two Lab images
|
|
im_dE_fromXYZ - calculate delta-E for two XYZ images
|
|
im_dE_fromdisp - calculate delta-E for two displayable images
|
|
im_disp2Lab - convert displayable to Lab
|
|
im_disp2XYZ - convert displayable to XYZ
|
|
im_float2rad - convert float to Radiance packed
|
|
im_icc_ac2rc - convert LAB from AC to RC using an ICC profile
|
|
im_icc_export - convert a float LAB to an 8-bit device image with an ICC profile
|
|
im_icc_export_depth - convert a float LAB to device space with an ICC profile
|
|
im_icc_import - convert a device image to float LAB with an ICC profile
|
|
im_icc_import_embedded - convert a device image to float LAB using the embedded profile
|
|
im_icc_present - test for presence of ICC library
|
|
im_icc_transform - convert between two device images with a pair of ICC profiles
|
|
im_lab_morph - morph colourspace of a LAB image
|
|
im_rad2float - convert Radiance packed to float
|
|
im_sRGB2XYZ - convert sRGB to XYZ
|
|
\end{verbatim}
|
|
\caption{Colour functions}
|
|
\label{fg:colour}
|
|
\end{fig2}
|
|
|
|
\subsection{Conversion}
|
|
|
|
See \fref{fg:conversion}.
|
|
|
|
These functions may be split into three broad groups: functions which convert
|
|
between the VIPS numeric formats (\verb+im_clip2fmt()+, for example, converts
|
|
an image of any type to the specified \verb+IM_BANDFMT+), functions
|
|
supporting complex arithmetic (\verb+im_c2amph()+, for example, converts
|
|
a complex image from rectangular to polar co ordinates) and functions
|
|
which perform some simple geometric conversion (\verb+im_extract()+ forms
|
|
a sub-image).
|
|
|
|
\verb+gbandjoin+ and the C function \verb+im_gbandjoin()+ will do a bandwise
|
|
join of many images at the same time. See the manual pages.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list conversion
|
|
im_bandjoin - bandwise join of two images
|
|
im_bernd - extract from pyramid as jpeg
|
|
im_black - generate black image
|
|
im_c2amph - convert real and imaginary to phase and amplitude
|
|
im_c2imag - extract imaginary part of complex image
|
|
im_c2ps - find power spectrum of complex image
|
|
im_c2real - extract real part of complex image
|
|
im_c2rect - convert phase and amplitude to real and imaginary
|
|
im_clip2c - convert to signed 8-bit integer
|
|
im_clip2cm - convert to complex
|
|
im_clip2d - convert to double-precision float
|
|
im_clip2dcm - convert to double complex
|
|
im_clip2f - convert to single-precision float
|
|
im_clip2fmt - convert image format to ofmt
|
|
im_clip2i - convert to signed 32-bit integer
|
|
im_clip2s - convert to signed 16-bit integer
|
|
im_clip2ui - convert to unsigned 32-bit integer
|
|
im_clip2us - convert to unsigned 16-bit integer
|
|
im_clip - convert to unsigned 8-bit integer
|
|
im_copy - copy image
|
|
im_copy_morph - copy image, setting pixel layout
|
|
im_copy_swap - copy image, swapping byte order
|
|
im_copy_set - copy image, setting informational fields
|
|
im_copy_set_meta - copy image, setting a meta field
|
|
im_extract_area - extract area
|
|
im_extract_areabands - extract area and bands
|
|
im_extract_band - extract band
|
|
im_extract_bands - extract several bands
|
|
im_extract - extract area/band
|
|
im_falsecolour - turn luminance changes into chrominance changes
|
|
im_fliphor - flip image left-right
|
|
im_flipver - flip image top-bottom
|
|
im_gbandjoin - bandwise join of many images
|
|
im_grid - chop a tall thin image into a grid of images
|
|
im_insert - insert sub-image into main image at position
|
|
im_insert_noexpand - insert sub-image into main image at position, no expansion
|
|
im_lrjoin - join two images left-right
|
|
im_mask2vips - convert DOUBLEMASK to VIPS image
|
|
im_msb - convert to uchar by discarding bits
|
|
im_msb_band - convert to single band uchar by discarding bits
|
|
im_print - print string to stdout
|
|
im_recomb - linear recombination with mask
|
|
im_replicate - replicate an image horizontally and vertically
|
|
im_ri2c - join two non-complex images to form complex
|
|
\end{verbatim}
|
|
\caption{Conversion functions}
|
|
\label{fg:conversion}
|
|
\end{fig2}
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
im_rot180 - rotate image 180 degrees
|
|
im_rot270 - rotate image 270 degrees clockwise
|
|
im_rot90 - rotate image 90 degrees clockwise
|
|
im_scale - scale image linearly to fit range 0-255
|
|
im_scaleps - logarithmic scale of image to fit range 0-255
|
|
im_rightshift_size - decrease size by a power-of-two factor
|
|
im_slice - slice an image using two thresholds
|
|
im_subsample - subsample image by integer factors
|
|
im_system - run command on image
|
|
im_tbjoin - join two images top-bottom
|
|
im_text - generate text image
|
|
im_thresh - slice an image at a threshold
|
|
im_vips2mask - convert VIPS image to DOUBLEMASK
|
|
im_wrap - shift image origin, wrapping at sides
|
|
im_zoom - simple zoom of an image by integer factors
|
|
\end{verbatim}
|
|
\caption{Conversion functions (cont.)}
|
|
\end{fig2}
|
|
|
|
\subsection{Matricies}
|
|
|
|
See \fref{fg:matricies}.
|
|
|
|
VIPS uses matricies for morphological operations, for convolutions, and
|
|
for some colour-space conversions. There are two types of matrix: integer
|
|
(\verb+INTMASK+) and double precision floating point (\verb+DOUBLEMASK+).
|
|
|
|
For convenience, both types are stored in files as ASCII. The first
|
|
line of the file should start with the matrix dimensions, width first,
|
|
then on the same line an optional scale and offset. The two size fields
|
|
should be integers; the scale and offset may be floats. Subsequent lines
|
|
should contain the matrix elements, one row per line. The scale and
|
|
offset are the conventional ones used to represent non-integer values in
|
|
convolution masks --- in other words:
|
|
|
|
\[
|
|
result = {value \over scale} + offset
|
|
\]
|
|
|
|
If the scale and offset are missing, they default to 1.0 and 0.0. See the
|
|
sections on convolution for more on the use of these fields. So as an example,
|
|
a 4 by 4 identity matrix would be stored as:
|
|
|
|
\begin{verbatim}
|
|
4 4
|
|
1 0 0 0
|
|
0 1 0 0
|
|
0 0 1 0
|
|
0 0 0 1
|
|
\end{verbatim}
|
|
|
|
And a 3 by 3 mask for block averaging with convolution might be stored as:
|
|
|
|
\begin{verbatim}
|
|
3 3 9 0
|
|
1 1 1
|
|
1 1 1
|
|
1 1 1
|
|
\end{verbatim}
|
|
|
|
\noindent
|
|
(in other words, sum all the pels in every 3 by 3 area, and divide by 9).
|
|
|
|
This matrix contains only integer elements and so could be used as an
|
|
argument to functions expecting both \verb+INTMASK+ and \verb+DOUBLEMASK+
|
|
matricies. However, masks containing floating-point values (such as the
|
|
output of \verb+im_matinv()+) can only be used as arguments to functions
|
|
expecting \verb+DOUBLEMASK+s.
|
|
|
|
A set of functions for mask input and output are also available for
|
|
C-programmers --- see the manual pages for \verb+im_read_dmask()+. For
|
|
other matrix functions, see also the convolution sections and the arithmetic
|
|
sections.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list matrix
|
|
im_matcat - append matrix in2 to the end of matrix in1
|
|
im_matinv - invert matrix
|
|
im_matmul - multiply matrix in1 by matrix in2
|
|
im_mattrn - transpose matrix
|
|
\end{verbatim}
|
|
\caption{Matrix functions}
|
|
\label{fg:matricies}
|
|
\end{fig2}
|
|
|
|
\subsection{Convolution}
|
|
|
|
See \fref{fg:convolution}.
|
|
|
|
The functions available in the convolution package can be split into five
|
|
main groups.
|
|
|
|
First, are the convolution functions. The most useful function is
|
|
\verb+im_conv()+ which will convolve any non-complex type with an
|
|
\verb+INTMASK+ matrix. The output image will have the same size, type, and
|
|
number of bands as the input image. Of the other \verb+im_conv()+ functions,
|
|
functions whose name ends in \verb+_raw+ do not add a black border around the
|
|
output image, functions ending in \verb+f+ use a \verb+DOUBLEMASK+ matrix
|
|
and write float (or double) output, and functions containing \verb+sep+
|
|
are for seperable convolutions. \verb+im_compass()+, \verb+im_lindetect()+
|
|
and \verb+im_gradient()+ convolve with rotating masks. \verb+im_embed()+
|
|
is used by the convolution functions to add the border to the output.
|
|
|
|
Next, are the build functions. \verb+im_gauss_*mask()+ and its ilk
|
|
generate gaussian masks, \verb+im_log_*mask()+ generate logs of Laplacians.
|
|
\verb+im_addgnoise()+ and \verb+im_gaussnoise()+ create or add gaussian
|
|
noise to an image.
|
|
|
|
Two functions do correlation: \verb+im_fastcor()+ does a quick and dirty
|
|
correlation, \verb+im_spcor()+ calculates true spatial correlation, and is
|
|
rather slow.
|
|
|
|
Some functions are provided for analysing images: \verb+im_zerox()+ counts
|
|
zero-crossing points in an image, \verb+im_mpercent()+ finds a threshold
|
|
that will isolate a percentage of points in an image.
|
|
|
|
Finally, \verb+im_resize_linear()+ and \verb+im_shrink()+ do as you would
|
|
expect.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list convolution
|
|
im_addgnoise - add gaussian noise with mean 0 and std. dev. sigma
|
|
im_compass - convolve with 8-way rotating integer mask
|
|
im_contrast_surface - find high-contrast points in an image
|
|
im_contrast_surface_raw - find high-contrast points in an image
|
|
im_conv - convolve
|
|
im_conv_raw - convolve, no border
|
|
im_convf - convolve, with DOUBLEMASK
|
|
im_convf_raw - convolve, with DOUBLEMASK, no border
|
|
im_convsep - seperable convolution
|
|
im_convsep_raw - seperable convolution, no border
|
|
im_convsepf - seperable convolution, with DOUBLEMASK
|
|
im_convsepf_raw - seperable convolution, with DOUBLEMASK, no border
|
|
im_convsub - convolve uchar to uchar, sub-sampling by xskip, yskip
|
|
im_dmask_xsize - horizontal size of a doublemask
|
|
im_dmask_ysize - vertical size of a doublemask
|
|
im_embed - embed in within a set of borders
|
|
im_fastcor - fast correlate in2 within in1
|
|
im_fastcor_raw - fast correlate in2 within in1, no border
|
|
im_gauss_dmask - generate gaussian DOUBLEMASK
|
|
im_gauss_imask - generate gaussian INTMASK
|
|
im_gauss_imask_sep - generate separable gaussian INTMASK
|
|
im_gaussnoise - generate image of gaussian noise with specified statistics
|
|
im_grad_x - horizontal difference image
|
|
im_grad_y - vertical difference image
|
|
im_gradcor - non-normalised correlation of gradient of in2 within in1
|
|
im_gradcor_raw - non-normalised correlation of gradient of in2 within in1, no padding
|
|
im_gradient - convolve with 2-way rotating mask
|
|
im_imask_xsize - horizontal size of an intmask
|
|
im_imask_ysize - vertical size of an intmask
|
|
im_rank_image - point-wise pixel rank
|
|
im_lindetect - convolve with 4-way rotating mask
|
|
im_log_dmask - generate laplacian of gaussian DOUBLEMASK
|
|
im_log_imask - generate laplacian of gaussian INTMASK
|
|
im_maxvalue - point-wise maximum value
|
|
im_mpercent - find threshold above which there are percent values
|
|
im_phasecor_fft - non-normalised correlation of gradient of in2 within in1
|
|
im_rank - rank filter nth element of xsize/ysize window
|
|
im_rank_raw - rank filter nth element of xsize/ysize window, no border
|
|
im_read_dmask - read matrix of double from file
|
|
im_resize_linear - resize to X by Y pixels with linear interpolation
|
|
im_rotate_dmask45 - rotate DOUBLEMASK clockwise by 45 degrees
|
|
im_rotate_dmask90 - rotate DOUBLEMASK clockwise by 90 degrees
|
|
im_rotate_imask45 - rotate INTMASK clockwise by 45 degrees
|
|
im_rotate_imask90 - rotate INTMASK clockwise by 90 degrees
|
|
im_sharpen - sharpen high frequencies of L channel of LabQ
|
|
im_shrink - shrink image by xfac, yfac times
|
|
im_spcor - normalised correlation of in2 within in1
|
|
im_spcor_raw - normalised correlation of in2 within in1, no black padding
|
|
im_stretch3 - stretch 3%, sub-pixel displace by xdisp/ydisp
|
|
im_zerox - find +ve or -ve zero crossings in image
|
|
\end{verbatim}
|
|
\caption{Convolution functions}
|
|
\label{fg:convolution}
|
|
\end{fig2}
|
|
|
|
\subsection{In-place operations}
|
|
\label{sec:inplace}
|
|
|
|
See \fref{fg:inplace}.
|
|
|
|
A few of the in-place operations are available from the command-line. Most are
|
|
not.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list inplace
|
|
im_circle - plot circle on image
|
|
im_flood_blob_copy - flood while pixel == start pixel
|
|
im_insertplace - draw image sub inside image main at position (x,y)
|
|
im_line - draw line between points (x1,y1) and (x2,y2)
|
|
im_lineset - draw line between points (x1,y1) and (x2,y2)
|
|
\end{verbatim}
|
|
\caption{In-place operations}
|
|
\label{fg:inplace}
|
|
\end{fig2}
|
|
|
|
\subsection{Frequency filtering}
|
|
|
|
See \fref{fg:freq}.
|
|
|
|
The basic Fourier functions are \verb+im_fwfft()+ and
|
|
\verb+im_invfft()+, which calculate the fast-fourier transform and inverse
|
|
transform of an image. Also \verb+im_invfftr()+, which just returns the real
|
|
part of the inverse transform.
|
|
The Fourier image has its origin at pel (0,0) ---
|
|
for viewing, use \verb+im_rotquad()+ to move the origin to the centre of
|
|
the image.
|
|
|
|
Once an image is in the frequency domain, it can be filtered by multiplying
|
|
it with a mask image. The VIPS mask generator is \verb+im_create_fmask()+
|
|
see the manual page for details of the arguments, but it will create low
|
|
pass, high pass, ring pass and band pass filters, which may each be ideal,
|
|
Gaussian or Butterworth. There is also a fractal mask option.
|
|
|
|
The other functions in the package build on these base
|
|
facilities. \verb+im_freqflt()+ transforms an input image to
|
|
Fourier space, multiplies it by a mask image, and transforms it back
|
|
again. \verb+im_flt_image_freq()+ will create a mask image of the correct
|
|
size for you, and call \verb+im_freqflt()+. \verb+im_disp_ps()+ will call
|
|
the right combinations of functions to make a displayable power spectrum
|
|
for an image.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list freq_filt
|
|
im_create_fmask - create frequency domain filter mask
|
|
im_disp_ps - make displayable power spectrum
|
|
im_flt_image_freq - frequency domain filter image
|
|
im_fractsurf - generate a fractal surface of given dimension
|
|
im_freqflt - frequency-domain filter of in with mask
|
|
im_fwfft - forward fast-fourier transform
|
|
im_rotquad - rotate image quadrants to move origin to centre
|
|
im_invfft - inverse fast-fourier transform
|
|
im_invfftr - real part of inverse fast-fourier transform
|
|
\end{verbatim}
|
|
\caption{Fourier functions}
|
|
\label{fg:freq}
|
|
\end{fig2}
|
|
|
|
\subsection{Histograms and LUTs}
|
|
|
|
See \fref{fg:hist}.
|
|
|
|
VIPS represents histograms and look-up tables in the same way --- as images.
|
|
|
|
They should have either \verb+Xsize+ or \verb+Ysize+ set to 1, and the
|
|
other dimension set to the number of elements in the table. The table can be
|
|
of any size, have any band format, and have any number of bands.
|
|
|
|
Use \verb+im_histgr()+ to find the histogram of an image. Use
|
|
\verb+im_histnD()+ to find the n-dimensional histogram of an n-band
|
|
image. Perform operations on histograms with \verb+im_histcum()+,
|
|
\verb+im_histnorm()+, \verb+im_histspec()+, \verb+im_invertlut()+. Visualise
|
|
histograms with \verb+im_histplot()+. Use a histogram (or LUT) to transform
|
|
an image with \verb+im_maplut()+. Build a histogram from scratch with
|
|
\verb+im_identity()+ or \verb+im_identity_ushort()+.
|
|
|
|
Use \verb+im_lhist*()+ for local histogram equalisation, and
|
|
\verb+im_stdif*()+ for statisticaol differencing. The \verb+im_tone_*()+
|
|
functions are for operations on the L channel of a LAB image. Other
|
|
functions are useful combinations of these basic operations.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list histograms_lut
|
|
im_gammacorrect - gamma-correct image
|
|
im_heq - histogram-equalise image
|
|
im_hist - find and graph histogram of image
|
|
im_histcum - turn histogram to cumulative histogram
|
|
im_histeq - form histogram equalistion LUT
|
|
im_histgr - find histogram of image
|
|
im_histnD - find 1D, 2D or 3D histogram of image
|
|
im_histnorm - form normalised histogram
|
|
im_histplot - plot graph of histogram
|
|
im_histspec - find histogram which will make pdf of in match ref
|
|
im_hsp - match stats of in to stats of ref
|
|
im_identity - generate identity histogram
|
|
im_identity_ushort - generate ushort identity histogram
|
|
im_ismonotonic - test LUT for monotonicity
|
|
im_lhisteq - local histogram equalisation
|
|
im_lhisteq_raw - local histogram equalisation, no border
|
|
im_invertlut - generate correction table from set of measures
|
|
im_buildlut - generate LUT table from set of x/y positions
|
|
im_maplut - map image through LUT
|
|
im_project - find horizontal and vertical projections of an image
|
|
im_stdif - statistical differencing
|
|
im_stdif_raw - statistical differencing, no border
|
|
im_tone_analyse - analyse in and create LUT for tone adjustment
|
|
im_tone_build - create LUT for tone adjustment of LabS images
|
|
im_tone_build_range - create LUT for tone adjustment
|
|
im_tone_map - map L channel of LabS or LabQ image through LUT
|
|
\end{verbatim}
|
|
\caption{Histogram/LUT functions}
|
|
\label{fg:hist}
|
|
\end{fig2}
|
|
|
|
\subsection{Morphology}
|
|
|
|
See \fref{fg:morph}.
|
|
|
|
The morphological functions are used on one-band \verb+IM_BANDFMT_UCHAR+ binary
|
|
images (images containing only zero and not-zero). They search images
|
|
for particular patterns of pixels (specified with the mask argument),
|
|
either adding or removing pixels when they find a match. They are useful
|
|
for cleaning up images --- for example, you might threshold an image, and
|
|
then use one of the morphological functions to remove all single isolated
|
|
pixels from the result.
|
|
|
|
If you combine the morphological operators with the mask rotators
|
|
(\verb+im_rotate_imask45()+, for example) and apply them repeatedly, you
|
|
can achieve very complicated effects: you can thin, prune, fill, open edges,
|
|
close gaps, and many others. For example, see `Fundamentals of Digital
|
|
Image Processing' by A. Jain, pp 384-388, Prentice-Hall, 1989 for more ideas.
|
|
|
|
Beware that VIPS reverses the usual image processing convention, by assuming
|
|
white objects on a black background.
|
|
|
|
The mask you give to the morphological functions should contain only the
|
|
values 0 (for background), 128 (for don't care) and 255 (for object). The
|
|
mask must have odd length sides --- the origin of the mask is taken to be
|
|
the centre value. For example, the mask:
|
|
|
|
\begin{verbatim}
|
|
3 3
|
|
128 255 128
|
|
255 0 255
|
|
128 255 128
|
|
\end{verbatim}
|
|
|
|
\noindent
|
|
applied to an image with \verb+im_erode()+, will find all black pixels
|
|
4-way connected with white pixels. Essentially, \verb+im_dilate()+
|
|
sets pixels in the output if any part of the mask matches, whereas
|
|
\verb+im_erode()+ sets pixels only if all of the mask matches.
|
|
|
|
The \verb+_raw()+ version of the functions do not add a black border to the
|
|
output. \verb+im_cntlines()+ and \verb+im_profile+ are occasionally useful for
|
|
analysing results.
|
|
|
|
See the boolean operations \verb+im_and()+, \verb+im_or()+ and
|
|
\verb+im_eor()+ for analogues of the usual set difference and set
|
|
union operations.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list morphology
|
|
im_cntlines - count horizontal or vertical lines
|
|
im_dilate - dilate image with mask, adding a black border
|
|
im_dilate_raw - dilate image with mask
|
|
im_erode - erode image with mask, adding a black border
|
|
im_erode_raw - erode image with mask
|
|
im_profile - find first horizontal/vertical edge
|
|
\end{verbatim}
|
|
\caption{Morphological functions}
|
|
\label{fg:morph}
|
|
\end{fig2}
|
|
|
|
\subsection{Mosaicing}
|
|
|
|
See \fref{fg:mosaicing}.
|
|
|
|
These functions are useful for joining many small images together to make one
|
|
large image. They can cope with unstable contrast, and arbitary sub-image
|
|
layout, but will not do any geometric correction. The mosaicing functions
|
|
can be grouped into layers:
|
|
|
|
The lowest level functions are \verb+im_correl()+. and \verb+im_affine()+.
|
|
\verb+im_correl()+ searches a large image for a small sub-image, returning
|
|
the position of the best sub-image match. \verb+im_affine()+ performs
|
|
a general affine transform on an image: that is, any transform in which
|
|
parallel lines remain parallel.
|
|
|
|
Next, \verb+im_lrmerge()+ and \verb+im_tbmerge()+ blend two images together
|
|
left-right or up-down.
|
|
|
|
Next up are \verb+im_lrmosaic()+ and \verb+im_tbmosaic()+. These use the
|
|
two low-level merge operations to join two images given just an approximate
|
|
overlap as a start point. Optional extra parameters let you do 'balancing'
|
|
too: if your images have come from a source where there is no precise
|
|
control over the exposure (for example, images from a tube camera, or a
|
|
set of images scanned from photographic sources), \verb+im_lrmosaic()+
|
|
and \verb+im_tbmosaic()+ will adjust the contrast of the left image to
|
|
match the right, the right to the left, or both to some middle value.
|
|
|
|
The functions \verb+im_lrmosaic1()+ and \verb+im_tbmosaic1()+ are first-order
|
|
analogues of the basic mosaic functions: they take two tie-points and use
|
|
them to rotate and scale the right-hand or bottom image before starting to join.
|
|
|
|
Finally, \verb+im_global_balance()+ can be used to re-balance a mosaic
|
|
which has been assembled with these functions. It will generally do a
|
|
better job than the low-level balancer built into \verb+im_lrmosaic()+
|
|
and \verb+im_tbmosaic()+. See the man page. \verb+im_remosaic()+ uses the same
|
|
techniques, but will reassemble the image from a different set of source
|
|
images.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list mosaicing
|
|
im_align_bands - align the bands of an image
|
|
im_correl - search area around sec for match for area around ref
|
|
im__find_lroverlap - search for left-right overlap of ref and sec
|
|
im__find_tboverlap - search for top-bottom overlap of ref and sec
|
|
im_global_balance - automatically rebuild mosaic with balancing
|
|
im_global_balancef - automatically rebuild mosaic with balancing, float output
|
|
im_lrmerge - left-right merge of in1 and in2
|
|
im_lrmerge1 - first-order left-right merge of ref and sec
|
|
im_lrmosaic - left-right mosaic of ref and sec
|
|
im_lrmosaic1 - first-order left-right mosaic of ref and sec
|
|
im_match_linear - resample ref so that tie-points match
|
|
im_match_linear_search - search sec, then resample so that tie-points match
|
|
im_maxpos_subpel - subpixel position of maximum of (phase correlation) image
|
|
im_remosaic - automatically rebuild mosaic with new files
|
|
im_tbmerge - top-bottom merge of in1 and in2
|
|
im_tbmerge1 - first-order top-bottom merge of in1 and in2
|
|
im_tbmosaic - top-bottom mosaic of in1 and in2
|
|
im_tbmosaic1 - first-order top-bottom mosaic of ref and sec
|
|
\end{verbatim}
|
|
caption{Mosaic functions}
|
|
\label{fg:mosaicing}
|
|
\end{fig2}
|
|
|
|
\subsection{CImg functions}
|
|
|
|
See \fref{fg:cimg}.
|
|
|
|
These operations wrap the anisotropic blur function from the CImg library.
|
|
They are useful for removing noise from images.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list cimg
|
|
im_greyc - noise-removing filter
|
|
im_greyc_mask - noise-removing filter, with a mask
|
|
\end{verbatim}
|
|
\caption{CImg functions}
|
|
\label{fg:cimg}
|
|
\end{fig2}
|
|
|
|
\subsection{Other}
|
|
|
|
See \fref{fg:other}.
|
|
|
|
These functions generate various test images. You can combine them with
|
|
the arithmetic and rotate functions to build more complicated images.
|
|
|
|
The \verb+im_benchmark*()+ operations are for testing the VIPS SMP system.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list other
|
|
im_benchmark - do something complicated for testing
|
|
im_benchmark2 - do something complicated for testing
|
|
im_benchmarkn - do something complicated for testing
|
|
im_eye - generate IM_BANDFMT_UCHAR [0,255] frequency/amplitude image
|
|
im_grey - generate IM_BANDFMT_UCHAR [0,255] grey scale image
|
|
im_feye - generate IM_BANDFMT_FLOAT [-1,1] frequency/amplitude image
|
|
im_fgrey - generate IM_BANDFMT_FLOAT [0,1] grey scale image
|
|
im_fzone - generate IM_BANDFMT_FLOAT [-1,1] zone plate image
|
|
im_make_xy - generate image with pixel value equal to coordinate
|
|
im_zone - generate IM_BANDFMT_UCHAR [0,255] zone plate image
|
|
\end{verbatim}
|
|
\caption{Other functions}
|
|
\label{fg:other}
|
|
\end{fig2}
|
|
|
|
\subsection{IO functions}
|
|
|
|
See \fref{fg:io}.
|
|
|
|
These functions are related to the image IO system.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list iofuncs
|
|
im_binfile - open a headerless binary file
|
|
im_cache - cache results of an operation
|
|
im_guess_prefix - guess install area
|
|
im_guess_libdir - guess library area
|
|
im_header_get_type - return field type
|
|
im_header_int - extract int fields from header
|
|
im_header_double - extract double fields from header
|
|
im_header_string - extract string fields from header
|
|
im_version - VIPS version number
|
|
im_version_string - VIPS version string
|
|
\end{verbatim}
|
|
\caption{IO functions}
|
|
\label{fg:io}
|
|
\end{fig2}
|
|
|
|
\subsection{Format functions}
|
|
|
|
See \fref{fg:format}.
|
|
|
|
These functions convert to and from various image formats. See
|
|
\pref{sec:format} for a nice API over these. VIPS can read more than these
|
|
formats, see the man page for \verb+VipsFormat+.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list format
|
|
im_csv2vips - read a file in csv format
|
|
im_jpeg2vips - convert from jpeg
|
|
im_magick2vips - load file with libMagick
|
|
im_png2vips - convert PNG file to VIPS image
|
|
im_exr2vips - convert an OpenEXR file to VIPS
|
|
im_ppm2vips - read a file in pbm/pgm/ppm format
|
|
im_analyze2vips - read a file in analyze format
|
|
im_tiff2vips - convert TIFF file to VIPS image
|
|
im_vips2csv - write an image in csv format
|
|
im_vips2jpeg - convert to jpeg
|
|
im_vips2mimejpeg - convert to jpeg as mime type on stdout
|
|
im_vips2png - convert VIPS image to PNG file
|
|
im_vips2ppm - write a file in pbm/pgm/ppm format
|
|
im_vips2tiff - convert VIPS image to TIFF file
|
|
\end{verbatim}
|
|
\caption{Format functions}
|
|
\label{fg:format}
|
|
\end{fig2}
|
|
|
|
\subsection{Resample functions}
|
|
|
|
See \fref{fg:resample}.
|
|
|
|
These functions resample images with various interpolators.
|
|
|
|
\begin{fig2}
|
|
\begin{verbatim}
|
|
$ vips --list resample
|
|
im_affine - affine transform
|
|
im_affinei - affine transform
|
|
im_affinei_all - affine transform of whole image
|
|
im_similarity_area - output area xywh of similarity transformation
|
|
im_similarity - similarity transformation
|
|
\end{verbatim}
|
|
\caption{Resample functions}
|
|
\label{fg:resample}
|
|
\end{fig2}
|