| \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} |