fre_flt gtkdoc
This commit is contained in:
parent
fa6a8f7e40
commit
5e58148666
7
TODO
7
TODO
@ -1,3 +1,10 @@
|
||||
- im_spcor a.value a.value fails, argh
|
||||
|
||||
nip2: im_prepare.c:324: im_prepare_to:
|
||||
Assertion `clipped.left == r->left' failed.
|
||||
|
||||
- doing im_create_fmask() and friends
|
||||
|
||||
- how about im_invalidate_area()? we currently repaint the whole window on
|
||||
every paint action in nip2 :-(
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
<xi:include href="xml/conversion.xml"/>
|
||||
<xi:include href="xml/convolution.xml"/>
|
||||
<xi:include href="xml/format.xml"/>
|
||||
<xi:include href="xml/freq_filt.xml"/>
|
||||
</chapter>
|
||||
|
||||
<chapter>
|
||||
@ -46,7 +47,6 @@
|
||||
<xi:include href="xml/morphology.xml"/>
|
||||
<xi:include href="xml/resample.xml"/>
|
||||
<xi:include href="xml/histograms_lut.xml"/>
|
||||
<xi:include href="xml/freq_filt.xml"/>
|
||||
<xi:include href="xml/mask.xml"/>
|
||||
<xi:include href="xml/inplace.xml"/>
|
||||
<xi:include href="xml/mosaicing.xml"/>
|
||||
@ -66,7 +66,6 @@
|
||||
<xi:include href="xml/rect.xml"/>
|
||||
<xi:include href="xml/semaphore.xml"/>
|
||||
<xi:include href="xml/dispatch.xml"/>
|
||||
<xi:include href="xml/fmask.xml"/>
|
||||
</chapter>
|
||||
|
||||
<chapter id="object-tree">
|
||||
|
@ -170,7 +170,7 @@ im_copy_set_all( IMAGE *in, IMAGE *out,
|
||||
*
|
||||
* See also: im_copy(), im_copy_set(), im_copy_morph().
|
||||
*
|
||||
* Returns: 0 on success, -1 on error
|
||||
* Returns: 0 on success, -1 on error.
|
||||
*/
|
||||
int
|
||||
im_copy( IMAGE *in, IMAGE *out )
|
||||
@ -193,7 +193,7 @@ im_copy( IMAGE *in, IMAGE *out )
|
||||
*
|
||||
* See also: im_copy().
|
||||
*
|
||||
* Returns: 0 on success, -1 on error
|
||||
* Returns: 0 on success, -1 on error.
|
||||
*/
|
||||
int
|
||||
im_copy_set( IMAGE *in, IMAGE *out,
|
||||
@ -221,7 +221,7 @@ im_copy_set( IMAGE *in, IMAGE *out,
|
||||
*
|
||||
* See also: im_copy().
|
||||
*
|
||||
* Returns: 0 on success, -1 on error
|
||||
* Returns: 0 on success, -1 on error.
|
||||
*/
|
||||
int
|
||||
im_copy_morph( IMAGE *in, IMAGE *out,
|
||||
@ -244,7 +244,7 @@ im_copy_morph( IMAGE *in, IMAGE *out,
|
||||
*
|
||||
* See also: im_copy().
|
||||
*
|
||||
* Returns: 0 on success, -1 on error
|
||||
* Returns: 0 on success, -1 on error.
|
||||
*/
|
||||
int
|
||||
im_copy_set_meta( IMAGE *in, IMAGE *out, const char *field, GValue *value )
|
||||
@ -316,7 +316,7 @@ im_copy_swap8_gen( PEL *in, PEL *out, int width, IMAGE *im )
|
||||
*
|
||||
* See also: im_copy(), im_amiMSBfirst(), im_isMSBfirst().
|
||||
*
|
||||
* Returns: 0 on success, -1 on error
|
||||
* Returns: 0 on success, -1 on error.
|
||||
*/
|
||||
int
|
||||
im_copy_swap( IMAGE *in, IMAGE *out )
|
||||
@ -375,7 +375,7 @@ im_copy_swap( IMAGE *in, IMAGE *out )
|
||||
*
|
||||
* See also: im_copy_swap(), im_amiMSBfirst().
|
||||
*
|
||||
* Returns: 0 on success, -1 on error
|
||||
* Returns: 0 on success, -1 on error.
|
||||
*/
|
||||
int
|
||||
im_copy_native( IMAGE *in, IMAGE *out, gboolean is_msb_first )
|
||||
|
@ -74,7 +74,6 @@
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <vips/vips.h>
|
||||
#include <vips/fmask.h>
|
||||
|
||||
#ifdef WITH_DMALLOC
|
||||
#include <dmalloc.h>
|
||||
@ -735,7 +734,7 @@ fractal_flt( IMAGE *out, int xs, int ys, double frdim )
|
||||
*/
|
||||
|
||||
float *
|
||||
im__create_quarter( IMAGE *out, int xs, int ys, MaskType flag, va_list ap )
|
||||
im__create_quarter( IMAGE *out, int xs, int ys, VipsMaskType flag, va_list ap )
|
||||
{
|
||||
/* May be fewer than 4 args ... but extract them all anyway. Should be
|
||||
* safe.
|
||||
@ -748,47 +747,47 @@ im__create_quarter( IMAGE *out, int xs, int ys, MaskType flag, va_list ap )
|
||||
switch( flag ) {
|
||||
/* High pass - low pass
|
||||
*/
|
||||
case MASK_IDEAL_HIGHPASS:
|
||||
case VIPS_MASK_IDEAL_HIGHPASS:
|
||||
return( ideal_hpf( out, xs, ys, p0 ) );
|
||||
|
||||
case MASK_IDEAL_LOWPASS:
|
||||
case VIPS_MASK_IDEAL_LOWPASS:
|
||||
return( ideal_lpf( out, xs, ys, p0 ) );
|
||||
|
||||
case MASK_BUTTERWORTH_HIGHPASS:
|
||||
case VIPS_MASK_BUTTERWORTH_HIGHPASS:
|
||||
return( butterworth_hpf( out, xs, ys, p0, p1, p2 ) );
|
||||
|
||||
case MASK_BUTTERWORTH_LOWPASS:
|
||||
case VIPS_MASK_BUTTERWORTH_LOWPASS:
|
||||
return( butterworth_lpf( out, xs, ys, p0, p1, p2 ) );
|
||||
|
||||
case MASK_GAUSS_HIGHPASS:
|
||||
case VIPS_MASK_GAUSS_HIGHPASS:
|
||||
return( gaussian_hpf( out, xs, ys, p0, p1 ) );
|
||||
|
||||
case MASK_GAUSS_LOWPASS:
|
||||
case VIPS_MASK_GAUSS_LOWPASS:
|
||||
return( gaussian_lpf( out, xs, ys, p0, p1 ) );
|
||||
|
||||
/* Ring pass - ring reject.
|
||||
*/
|
||||
case MASK_IDEAL_RINGPASS:
|
||||
case VIPS_MASK_IDEAL_RINGPASS:
|
||||
return( ideal_rpf( out, xs, ys, p0, p1 ) );
|
||||
|
||||
case MASK_IDEAL_RINGREJECT:
|
||||
case VIPS_MASK_IDEAL_RINGREJECT:
|
||||
return( ideal_rrf( out, xs, ys, p0, p1 ) );
|
||||
|
||||
case MASK_BUTTERWORTH_RINGPASS:
|
||||
case VIPS_MASK_BUTTERWORTH_RINGPASS:
|
||||
return( butterworth_rpf( out,
|
||||
xs, ys, p0, p1, p2, p3 ) );
|
||||
|
||||
case MASK_BUTTERWORTH_RINGREJECT:
|
||||
case VIPS_MASK_BUTTERWORTH_RINGREJECT:
|
||||
return( butterworth_rrf( out,
|
||||
xs, ys, p0, p1, p2, p3 ) );
|
||||
|
||||
case MASK_GAUSS_RINGPASS:
|
||||
case VIPS_MASK_GAUSS_RINGPASS:
|
||||
return( gaussian_rpf( out, xs, ys, p0, p1, p2 ) );
|
||||
|
||||
case MASK_GAUSS_RINGREJECT:
|
||||
case VIPS_MASK_GAUSS_RINGREJECT:
|
||||
return( gaussian_rrf( out, xs, ys, p0, p1, p2 ) );
|
||||
|
||||
case MASK_FRACTAL_FLT:
|
||||
case VIPS_MASK_FRACTAL_FLT:
|
||||
return( fractal_flt( out, xs, ys, p0 ) );
|
||||
|
||||
default:
|
||||
|
@ -65,7 +65,6 @@
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <vips/vips.h>
|
||||
#include <vips/fmask.h>
|
||||
|
||||
#ifdef WITH_DMALLOC
|
||||
#include <dmalloc.h>
|
||||
@ -623,7 +622,7 @@ gaussian_brf( IMAGE *out, double fcx, double fcy, double r, double ac )
|
||||
* however all masks are written as floats with maximum value normalised to 1.0
|
||||
*/
|
||||
int
|
||||
im__fmaskcir( IMAGE *out, MaskType flag, va_list ap )
|
||||
im__fmaskcir( IMAGE *out, VipsMaskType flag, va_list ap )
|
||||
{
|
||||
/* May be fewer than 5 args ... but extract them all anyway. Should be
|
||||
* safe.
|
||||
@ -637,22 +636,22 @@ im__fmaskcir( IMAGE *out, MaskType flag, va_list ap )
|
||||
switch( flag ) {
|
||||
/* Band pass - band reject.
|
||||
*/
|
||||
case MASK_IDEAL_BANDPASS:
|
||||
case VIPS_MASK_IDEAL_BANDPASS:
|
||||
return( ideal_bpf( out, p0, p1, p2 ) );
|
||||
|
||||
case MASK_IDEAL_BANDREJECT:
|
||||
case VIPS_MASK_IDEAL_BANDREJECT:
|
||||
return( ideal_brf( out, p0, p1, p2 ) );
|
||||
|
||||
case MASK_BUTTERWORTH_BANDPASS:
|
||||
case VIPS_MASK_BUTTERWORTH_BANDPASS:
|
||||
return( butterworth_bpf( out, p0, p1, p2, p3, p4 ) );
|
||||
|
||||
case MASK_BUTTERWORTH_BANDREJECT:
|
||||
case VIPS_MASK_BUTTERWORTH_BANDREJECT:
|
||||
return( butterworth_brf( out, p0, p1, p2, p3, p4 ) );
|
||||
|
||||
case MASK_GAUSS_BANDPASS:
|
||||
case VIPS_MASK_GAUSS_BANDPASS:
|
||||
return( gaussian_bpf( out, p0, p1, p2, p3 ) );
|
||||
|
||||
case MASK_GAUSS_BANDREJECT:
|
||||
case VIPS_MASK_GAUSS_BANDREJECT:
|
||||
return( gaussian_brf( out, p0, p1, p2, p3 ) );
|
||||
|
||||
default:
|
||||
|
@ -40,7 +40,6 @@
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <vips/vips.h>
|
||||
#include <vips/fmask.h>
|
||||
|
||||
#ifdef WITH_DMALLOC
|
||||
#include <dmalloc.h>
|
||||
|
@ -1,16 +1,4 @@
|
||||
/* @(#) Makes a displayable uchar power spectrum of an input one band image
|
||||
* @(#) Input should be float complex
|
||||
* @(#) All images are kept in RAM; so only square arrays of powers of
|
||||
* @(#) 2 as inputs.
|
||||
* @(#) Functions im_fwfft, im_c2ps, im_scaleps and im_rotquad are used
|
||||
* @(#) Image descriptors should have been set properly by the calling program
|
||||
* @(#)
|
||||
* @(#) int im_disp_ps(in, out)
|
||||
* @(#) IMAGE *in, *out;
|
||||
* @(#) int bandno;
|
||||
* @(#)
|
||||
* @(#) Returns 0 on sucess and -1 on error
|
||||
* @(#)
|
||||
/* im_disp_ps
|
||||
*
|
||||
* Copyright: 1991, N. Dessipris.
|
||||
*
|
||||
@ -25,6 +13,9 @@
|
||||
* - frees memory more quickly
|
||||
* 2/4/02 JC
|
||||
* - any number of bands
|
||||
* 7/2/10
|
||||
* - gtkdoc
|
||||
* - cleanups
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -75,27 +66,40 @@ disp_ps( IMAGE *dummy, IMAGE *in, IMAGE *out )
|
||||
if( im_open_local_array( out, t, 3, "im_disp_ps temp 1", "p" ) )
|
||||
return( -1 );
|
||||
|
||||
if( in->BandFmt == IM_BANDFMT_COMPLEX ) {
|
||||
if( im_abs( in, t[1] ) )
|
||||
return( -1 );
|
||||
}
|
||||
else {
|
||||
if( im_fwfft( in, t[0] ) || im_abs( t[0], t[1] ) )
|
||||
if( in->BandFmt != IM_BANDFMT_COMPLEX ) {
|
||||
if( im_fwfft( in, t[0] ) )
|
||||
return( -1 );
|
||||
in = t[0];
|
||||
}
|
||||
|
||||
if( im_scaleps( t[1], t[2] ) || im_rotquad( t[2], out ) )
|
||||
if( im_abs( in, t[1] ) ||
|
||||
im_scaleps( t[1], t[2] ) ||
|
||||
im_rotquad( t[2], out ) )
|
||||
return( -1 );
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
/**
|
||||
* im_disp_ps:
|
||||
* @in: input image
|
||||
* @out: output image
|
||||
*
|
||||
* Make a displayable (ie. 8-bit unsigned int) power spectrum.
|
||||
*
|
||||
* If @in is non-complex, it is transformed to Fourier space. Then the
|
||||
* absolute value is passed through im_scaleps(), and im_rotquad().
|
||||
*
|
||||
* See also: im_scaleps(), im_rotquad().
|
||||
*
|
||||
* Returns: 0 on success, -1 on error.
|
||||
*/
|
||||
int
|
||||
im_disp_ps( IMAGE *in, IMAGE *out )
|
||||
{
|
||||
IMAGE *dummy = im_open( "memory:1", "p" );
|
||||
IMAGE *dummy;
|
||||
|
||||
if( !dummy )
|
||||
if( !(dummy = im_open( "memory:1", "p" )) )
|
||||
return( -1 );
|
||||
if( disp_ps( dummy, in, out ) ) {
|
||||
im_close( dummy );
|
||||
|
@ -1,14 +1,4 @@
|
||||
/* @(#) Creates a vasari fractal surface of a given dimension by
|
||||
* @(#) filtering white gaussian noise (function im_gaussnoise(3X))
|
||||
* @(#) using the function im_fltimage_freq(3X)
|
||||
* @(#)
|
||||
* @(#) Usage:
|
||||
* @(#) int im_fractsurf(im, frd, size)
|
||||
* @(#) double frd;
|
||||
* @(#) int size;
|
||||
* @(#)
|
||||
* @(#) Returns 0 on sucess and -1 on error
|
||||
* @(#)
|
||||
/* im_fractsurf
|
||||
*
|
||||
* Copyright: 1991, N. Dessipris.
|
||||
*
|
||||
@ -17,6 +7,9 @@
|
||||
* Modified on:
|
||||
* 20/9/95 JC
|
||||
* - modernised, a little
|
||||
* 7/2/10
|
||||
* - cleanups
|
||||
* - gtkdoc
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -55,33 +48,38 @@
|
||||
#include <math.h>
|
||||
|
||||
#include <vips/vips.h>
|
||||
#include <vips/fmask.h> /* for MASK_FRACTAL_FLT */
|
||||
|
||||
#ifdef WITH_DMALLOC
|
||||
#include <dmalloc.h>
|
||||
#endif /*WITH_DMALLOC*/
|
||||
|
||||
/**
|
||||
* im_fractsurf:
|
||||
* @out: output image
|
||||
* @size: size of image to generate
|
||||
* @frd: fractal dimension
|
||||
*
|
||||
* Generate an image of size @size and fractal dimension @frd. The dimension
|
||||
* should be between 2 and 3.
|
||||
*
|
||||
* See also: im_gaussnoise(), im_flt_image_freq().
|
||||
*
|
||||
* Returns: 0 on success, -1 on error.
|
||||
*/
|
||||
int
|
||||
im_fractsurf( IMAGE *out, int size, double frd )
|
||||
{
|
||||
IMAGE *noise = im_open_local( out, "noise.v", "p" );
|
||||
IMAGE *noise;
|
||||
|
||||
if( !noise )
|
||||
return( -1 );
|
||||
if( frd <= 2.0 || frd >= 3.0 ) {
|
||||
im_error( "im_fractsurf", "%s",
|
||||
_( "dimension shuld be in (2,3)" ) );
|
||||
return( -1 );
|
||||
}
|
||||
|
||||
if( im_gaussnoise( noise, size, size, 0.0, 1.0 ) )
|
||||
return( -1 );
|
||||
|
||||
/* create the fractal filter mask, and perform filtering on noise
|
||||
* Note that the result is in im, stored as float since
|
||||
* the original noise is in float. It needs scaling for display
|
||||
*/
|
||||
if( im_flt_image_freq( noise, out, MASK_FRACTAL_FLT, frd ) )
|
||||
if( !(noise = im_open_local( out, "im_fractsurf", "p" )) ||
|
||||
im_gaussnoise( noise, size, size, 0.0, 1.0 ) ||
|
||||
im_flt_image_freq( noise, out, VIPS_MASK_FRACTAL_FLT, frd ) )
|
||||
return( -1 );
|
||||
|
||||
return( 0 );
|
||||
|
@ -80,7 +80,7 @@
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <vips/vips.h>
|
||||
#include <vips/fmask.h>
|
||||
#include <vips/internal.h>
|
||||
|
||||
#ifdef WITH_DMALLOC
|
||||
#include <dmalloc.h>
|
||||
@ -134,11 +134,11 @@ copy_quarter( IMAGE *out, float *coeff_s )
|
||||
/* Make a mask image.
|
||||
*/
|
||||
static int
|
||||
build_freq_mask( IMAGE *out, int xs, int ys, MaskType flag, va_list ap )
|
||||
build_freq_mask( IMAGE *out, int xs, int ys, VipsMaskType flag, va_list ap )
|
||||
{
|
||||
float *coeff;
|
||||
extern float *im__create_quarter( IMAGE *,
|
||||
int, int, MaskType, va_list );
|
||||
int, int, VipsMaskType, va_list );
|
||||
|
||||
/* Check sizes and create one quarter of the final mask
|
||||
*/
|
||||
@ -156,21 +156,21 @@ build_freq_mask( IMAGE *out, int xs, int ys, MaskType flag, va_list ap )
|
||||
return( -1 );
|
||||
|
||||
switch( flag ) {
|
||||
case MASK_IDEAL_HIGHPASS:
|
||||
case MASK_IDEAL_LOWPASS:
|
||||
case MASK_BUTTERWORTH_HIGHPASS:
|
||||
case MASK_BUTTERWORTH_LOWPASS:
|
||||
case MASK_GAUSS_HIGHPASS:
|
||||
case MASK_GAUSS_LOWPASS:
|
||||
case VIPS_MASK_IDEAL_HIGHPASS:
|
||||
case VIPS_MASK_IDEAL_LOWPASS:
|
||||
case VIPS_MASK_BUTTERWORTH_HIGHPASS:
|
||||
case VIPS_MASK_BUTTERWORTH_LOWPASS:
|
||||
case VIPS_MASK_GAUSS_HIGHPASS:
|
||||
case VIPS_MASK_GAUSS_LOWPASS:
|
||||
|
||||
case MASK_IDEAL_RINGPASS:
|
||||
case MASK_IDEAL_RINGREJECT:
|
||||
case MASK_BUTTERWORTH_RINGPASS:
|
||||
case MASK_BUTTERWORTH_RINGREJECT:
|
||||
case MASK_GAUSS_RINGPASS:
|
||||
case MASK_GAUSS_RINGREJECT:
|
||||
case VIPS_MASK_IDEAL_RINGPASS:
|
||||
case VIPS_MASK_IDEAL_RINGREJECT:
|
||||
case VIPS_MASK_BUTTERWORTH_RINGPASS:
|
||||
case VIPS_MASK_BUTTERWORTH_RINGREJECT:
|
||||
case VIPS_MASK_GAUSS_RINGPASS:
|
||||
case VIPS_MASK_GAUSS_RINGREJECT:
|
||||
|
||||
case MASK_FRACTAL_FLT:
|
||||
case VIPS_MASK_FRACTAL_FLT:
|
||||
/* All these are created as a quarter and duplicated.
|
||||
*/
|
||||
if( !(coeff = im__create_quarter( out, xs, ys, flag, ap )) ||
|
||||
@ -178,12 +178,12 @@ build_freq_mask( IMAGE *out, int xs, int ys, MaskType flag, va_list ap )
|
||||
return( -1 );
|
||||
break;
|
||||
|
||||
case MASK_IDEAL_BANDPASS:
|
||||
case MASK_IDEAL_BANDREJECT:
|
||||
case MASK_BUTTERWORTH_BANDPASS:
|
||||
case MASK_BUTTERWORTH_BANDREJECT:
|
||||
case MASK_GAUSS_BANDPASS:
|
||||
case MASK_GAUSS_BANDREJECT:
|
||||
case VIPS_MASK_IDEAL_BANDPASS:
|
||||
case VIPS_MASK_IDEAL_BANDREJECT:
|
||||
case VIPS_MASK_BUTTERWORTH_BANDPASS:
|
||||
case VIPS_MASK_BUTTERWORTH_BANDREJECT:
|
||||
case VIPS_MASK_GAUSS_BANDPASS:
|
||||
case VIPS_MASK_GAUSS_BANDREJECT:
|
||||
/* Created all in one go.
|
||||
*/
|
||||
if( im__fmaskcir( out, flag, ap ) )
|
||||
@ -201,7 +201,7 @@ build_freq_mask( IMAGE *out, int xs, int ys, MaskType flag, va_list ap )
|
||||
/* Create a mask, and filter an image with it.
|
||||
*/
|
||||
int
|
||||
im_flt_image_freq( IMAGE *in, IMAGE *out, MaskType flag, ... )
|
||||
im_flt_image_freq( IMAGE *in, IMAGE *out, VipsMaskType flag, ... )
|
||||
{
|
||||
IMAGE *mask = im_open_local( out, "tempmask", "p" );
|
||||
va_list ap;
|
||||
@ -225,7 +225,7 @@ im_flt_image_freq( IMAGE *in, IMAGE *out, MaskType flag, ... )
|
||||
/* Create a filter mask.
|
||||
*/
|
||||
int
|
||||
im_create_fmask( IMAGE *out, int xsize, int ysize, MaskType flag, ... )
|
||||
im_create_fmask( IMAGE *out, int xsize, int ysize, VipsMaskType flag, ... )
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
|
@ -71,6 +71,22 @@
|
||||
#include <dmalloc.h>
|
||||
#endif /*WITH_DMALLOC*/
|
||||
|
||||
/**
|
||||
* im_freqflt:
|
||||
* @in: input image
|
||||
* @mask: mask image
|
||||
* @out: output image
|
||||
*
|
||||
* Filter an image in Fourier space.
|
||||
*
|
||||
* @in is transformed to Fourier space, multipled with the mask image, then
|
||||
* transformed back to real space. If @in is already a complex image, just
|
||||
* multiply then inverse transform.
|
||||
*
|
||||
* See also: im_invfftr(), im_create_fmask().
|
||||
*
|
||||
* Returns: 0 on success, -1 on error.
|
||||
*/
|
||||
int
|
||||
im_freqflt( IMAGE *in, IMAGE *mask, IMAGE *out )
|
||||
{
|
||||
|
@ -1,11 +1,4 @@
|
||||
/* @(#) Does a forward fft on an input image descriptor
|
||||
* @(#) using the function fft_sp. (float fft)
|
||||
* @(#) Input can be any complex or no-complex; output is complex (two floats)
|
||||
* @(#)
|
||||
* @(#) Usage:
|
||||
* @(#) int im_fwfft(in, out)
|
||||
* @(#) IMAGE *in, *out;
|
||||
* @(#)
|
||||
/* im_fwfft
|
||||
*
|
||||
* Copyright: 1990, N. Dessipris.
|
||||
*
|
||||
@ -34,6 +27,9 @@
|
||||
* non-square images, including odd widths and heights
|
||||
* 3/11/04
|
||||
* - added fftw3 support
|
||||
* 7/2/10
|
||||
* - cleanups
|
||||
* - gtkdoc
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -575,54 +571,52 @@ fwfft1( IMAGE *dummy, IMAGE *in, IMAGE *out )
|
||||
int
|
||||
im__fftproc( IMAGE *dummy, IMAGE *in, IMAGE *out, im__fftproc_fn fn )
|
||||
{
|
||||
if( im_pincheck( in ) || im_outcheck( out ) )
|
||||
return( -1 );
|
||||
|
||||
if( in->Bands == 1 ) {
|
||||
if( fn( dummy, in, out ) )
|
||||
IMAGE **bands;
|
||||
IMAGE **fft;
|
||||
int b;
|
||||
|
||||
if( in->Bands == 1 )
|
||||
return( fn( dummy, in, out ) );
|
||||
|
||||
if( !(bands = IM_ARRAY( dummy, in->Bands, IMAGE * )) ||
|
||||
!(fft = IM_ARRAY( dummy, in->Bands, IMAGE * )) ||
|
||||
im_open_local_array( dummy, bands, in->Bands, "bands", "p" ) ||
|
||||
im_open_local_array( dummy, fft, in->Bands, "fft", "p" ) )
|
||||
return( -1 );
|
||||
|
||||
for( b = 0; b < in->Bands; b++ )
|
||||
if( im_extract_band( in, bands[b], b ) ||
|
||||
fn( dummy, bands[b], fft[b] ) )
|
||||
return( -1 );
|
||||
}
|
||||
else {
|
||||
IMAGE *acc;
|
||||
int b;
|
||||
|
||||
for( acc = NULL, b = 0; b < in->Bands; b++ ) {
|
||||
IMAGE *t1 = im_open_local( dummy,
|
||||
"fwfftn:1", "p" );
|
||||
IMAGE *t2 = im_open_local( dummy,
|
||||
"fwfftn:2", "p" );
|
||||
|
||||
if( !t1 || !t2 ||
|
||||
im_extract_band( in, t1, b ) ||
|
||||
fn( dummy, t1, t2 ) )
|
||||
return( -1 );
|
||||
|
||||
if( !acc )
|
||||
acc = t2;
|
||||
else {
|
||||
IMAGE *t3 = im_open_local( dummy,
|
||||
"fwfftn:3", "p" );
|
||||
|
||||
if( !t3 || im_bandjoin( acc, t2, t3 ) )
|
||||
return( -1 );
|
||||
|
||||
acc = t3;
|
||||
}
|
||||
}
|
||||
|
||||
if( im_copy( acc, out ) )
|
||||
return( -1 );
|
||||
}
|
||||
if( im_gbandjoin( fft, out, in->Bands ) )
|
||||
return( -1 );
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
/**
|
||||
* im_fwfft:
|
||||
* @in: input image
|
||||
* @out: output image
|
||||
*
|
||||
* Transform an image to Fourier space.
|
||||
*
|
||||
* VIPS uses the fftw3 or fftw2 Fourier transform libraries if possible. If
|
||||
* they were not available when VIPS was built, it falls back to it's own
|
||||
* FFT functions which are slow and only work for square images whose sides
|
||||
* are a power of two.
|
||||
*
|
||||
* See also: im_invfft(), im_disp_ps().
|
||||
*
|
||||
* Returns: 0 on success, -1 on error.
|
||||
*/
|
||||
int
|
||||
im_fwfft( IMAGE *in, IMAGE *out )
|
||||
{
|
||||
IMAGE *dummy = im_open( "im_fwfft:1", "p" );
|
||||
IMAGE *dummy;
|
||||
|
||||
if( !dummy )
|
||||
if( !(dummy = im_open( "im_fwfft:1", "p" )) )
|
||||
return( -1 );
|
||||
if( im__fftproc( dummy, in, out, fwfft1 ) ) {
|
||||
im_close( dummy );
|
||||
|
@ -1,11 +1,4 @@
|
||||
/* @(#) Does a inverse fft on an input image descriptor
|
||||
* @(#) using the function fft_sp.
|
||||
* @(#) Input complex (2 floats) output complex (2 floats)
|
||||
* @(#)
|
||||
* @(#) Usage:
|
||||
* @(#) int im_invfft(in, out)
|
||||
* @(#) IMAGE *in, *out;
|
||||
* @(#)
|
||||
/* im_invfft
|
||||
*
|
||||
* Copyright: 1990, N. Dessipris.
|
||||
*
|
||||
@ -26,6 +19,8 @@
|
||||
* - oops, fix for segv on wider than high fftw transforms
|
||||
* 3/11/04
|
||||
* - added fftw3 support
|
||||
* 7/2/10
|
||||
* - gtkdoc
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -263,6 +258,24 @@ invfft1( IMAGE *dummy, IMAGE *in, IMAGE *out )
|
||||
#endif /*HAVE_FFTW3*/
|
||||
#endif /*HAVE_FFTW*/
|
||||
|
||||
|
||||
/**
|
||||
* im_invfft:
|
||||
* @in: input image
|
||||
* @out: output image
|
||||
*
|
||||
* Transform an image from Fourier space to real space. The result is complex.
|
||||
* If you are OK with a real result, use im_invfftr() instead, it's quicker.
|
||||
*
|
||||
* VIPS uses the fftw3 or fftw2 Fourier transform libraries if possible. If
|
||||
* they were not available when VIPS was built, it falls back to it's own
|
||||
* FFT functions which are slow and only work for square images whose sides
|
||||
* are a power of two.
|
||||
*
|
||||
* See also: im_invfftr(), im_fwfft(), im_disp_ps().
|
||||
*
|
||||
* Returns: 0 on success, -1 on error.
|
||||
*/
|
||||
int
|
||||
im_invfft( IMAGE *in, IMAGE *out )
|
||||
{
|
||||
|
@ -1,10 +1,4 @@
|
||||
/* @(#) Does a inverse fft on an input image descriptor
|
||||
* @(#) Input complex (2 floats) output real
|
||||
* @(#)
|
||||
* @(#) Usage:
|
||||
* @(#) int im_invfftr(in, out)
|
||||
* @(#) IMAGE *in, *out;
|
||||
* @(#)
|
||||
/* im_invfftr
|
||||
*
|
||||
* Modified on :
|
||||
* 27/2/03 JC
|
||||
@ -13,6 +7,8 @@
|
||||
* - oops, fix for segv on wider than high fftw transforms
|
||||
* 3/11/04
|
||||
* - added fftw3 support
|
||||
* 7/2/10
|
||||
* - gtkdoc
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -310,6 +306,23 @@ invfft1( IMAGE *dummy, IMAGE *in, IMAGE *out )
|
||||
#endif /*HAVE_FFTW3*/
|
||||
#endif /*HAVE_FFTW*/
|
||||
|
||||
/**
|
||||
* im_invfftr:
|
||||
* @in: input image
|
||||
* @out: output image
|
||||
*
|
||||
* Transform an image from Fourier space to real space, giving a real result.
|
||||
* This is faster than im_invfft(), which gives a complex result.
|
||||
*
|
||||
* VIPS uses the fftw3 or fftw2 Fourier transform libraries if possible. If
|
||||
* they were not available when VIPS was built, it falls back to it's own
|
||||
* FFT functions which are slow and only work for square images whose sides
|
||||
* are a power of two.
|
||||
*
|
||||
* See also: im_invfft(), im_fwfft(), im_disp_ps().
|
||||
*
|
||||
* Returns: 0 on success, -1 on error.
|
||||
*/
|
||||
int
|
||||
im_invfftr( IMAGE *in, IMAGE *out )
|
||||
{
|
||||
|
@ -4,6 +4,9 @@
|
||||
*
|
||||
* Author: Tom Vajzovic
|
||||
* Written on: 2008-01-16
|
||||
* 7/2/10
|
||||
* - cleanups
|
||||
* - gtkdoc
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -44,20 +47,14 @@
|
||||
#endif /*WITH_DMALLOC*/
|
||||
|
||||
int im_phasecor_fft( IMAGE *in1, IMAGE *in2, IMAGE *out ){
|
||||
#define FUNCTION_NAME "im_fft_phasecor"
|
||||
IMAGE *temp1= im_open_local( out, FUNCTION_NAME ": temp1", "t" );
|
||||
IMAGE *temp2= im_open_local( out, FUNCTION_NAME ": temp2", "t" );
|
||||
IMAGE *temp3= im_open_local( out, FUNCTION_NAME ": temp3", "t" );
|
||||
IMAGE *t[3];
|
||||
|
||||
if( ! temp1 || ! temp2 || ! temp3 )
|
||||
if( im_open_local_array( out, t, 3, "im_phasecor_fft", "p" ) ||
|
||||
im_fwfft( in1, t[0] ) ||
|
||||
im_fwfft( in2, t[1] ) ||
|
||||
im_cross_phase( t[0], t[1], t[2] ) ||
|
||||
im_invfftr( t[2], out ) )
|
||||
return -1;
|
||||
|
||||
return im_incheck( in1 )
|
||||
|| im_incheck( in2 )
|
||||
|| im_outcheck( out )
|
||||
|| im_fwfft( in1, temp1 )
|
||||
|| im_fwfft( in2, temp2 )
|
||||
|| im_cross_phase( temp1, temp2, temp3 )
|
||||
|| im_invfftr( temp3, out );
|
||||
#undef FUNCTION_NAME
|
||||
return 0;
|
||||
}
|
||||
|
@ -13,7 +13,6 @@ pkginclude_HEADERS = \
|
||||
dispatch.h \
|
||||
disp.h \
|
||||
error.h \
|
||||
fmask.h \
|
||||
format.h \
|
||||
inplace.h \
|
||||
generate.h \
|
||||
|
@ -280,6 +280,31 @@ typedef enum {
|
||||
gboolean im_isnative( im_arch_type arch );
|
||||
int im_copy_from( IMAGE *in, IMAGE *out, im_arch_type architecture );
|
||||
|
||||
#define MASK_IDEAL_HIGHPASS VIPS_MASK_IDEAL_HIGHPASS
|
||||
#define MASK_IDEAL_LOWPASS VIPS_MASK_IDEAL_LOWPASS
|
||||
#define MASK_BUTTERWORTH_HIGHPASS VIPS_MASK_BUTTERWORTH_HIGHPASS
|
||||
#define MASK_BUTTERWORTH_LOWPASS VIPS_MASK_BUTTERWORTH_LOWPASS
|
||||
#define MASK_GAUSS_HIGHPASS VIPS_MASK_GAUSS_HIGHPASS
|
||||
#define MASK_GAUSS_LOWPASS VIPS_MASK_GAUSS_LOWPASS
|
||||
|
||||
#define MASK_IDEAL_RINGPASS VIPS_MASK_IDEAL_RINGPASS
|
||||
#define MASK_IDEAL_RINGREJECT VIPS_MASK_IDEAL_RINGREJECT
|
||||
#define MASK_BUTTERWORTH_RINGPASS VIPS_MASK_BUTTERWORTH_RINGPASS
|
||||
#define MASK_BUTTERWORTH_RINGREJECT VIPS_MASK_BUTTERWORTH_RINGREJECT
|
||||
#define MASK_GAUSS_RINGPASS VIPS_MASK_GAUSS_RINGPASS
|
||||
#define MASK_GAUSS_RINGREJECT VIPS_MASK_GAUSS_RINGREJECT
|
||||
|
||||
#define MASK_IDEAL_BANDPASS VIPS_MASK_IDEAL_BANDPASS
|
||||
#define MASK_IDEAL_BANDREJECT VIPS_MASK_IDEAL_BANDREJECT
|
||||
#define MASK_BUTTERWORTH_BANDPASS VIPS_MASK_BUTTERWORTH_BANDPASS
|
||||
#define MASK_BUTTERWORTH_BANDREJECT VIPS_MASK_BUTTERWORTH_BANDREJECT
|
||||
#define MASK_GAUSS_BANDPASS VIPS_MASK_GAUSS_BANDPASS
|
||||
#define MASK_GAUSS_BANDREJECT VIPS_MASK_GAUSS_BANDREJECT
|
||||
|
||||
#define MASK_FRACTAL_FLT VIPS_MASK_FRACTAL_FLT
|
||||
|
||||
#define MaskType VipsMaskType
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /*__cplusplus*/
|
||||
|
@ -1,86 +0,0 @@
|
||||
/* @(#) Typical filter function
|
||||
* va_list is filter parameters
|
||||
* lowpass highpass filters
|
||||
* flag = 0 -> idealhpf, parameters: frequency cutoff
|
||||
* flag = 1 -> ideallpf, parameters: frequency cutoff
|
||||
* flag = 2 -> buthpf, parameters: order, frequency cutoff, amplitude cutoff
|
||||
* flag = 3 -> butlpf, parameters: order, frequency cutoff, amplitude cutoff
|
||||
* flag = 4 -> gaussianlpf, parameters: frequency cutoff, amplitude cutoff
|
||||
* flag = 5 -> gaussianhpf, parameters: frequency cutoff, amplitude cutoff
|
||||
* ring pass ring reject filters
|
||||
* flag = 6 -> idealrpf, parameters: frequency cutoff, width
|
||||
* flag = 7 -> idealrrf, parameters: frequency cutoff, width
|
||||
* flag = 8 -> butrpf, parameters: order, freq cutoff, width, ampl cutoff
|
||||
* flag = 9 -> butrrf, parameters: order, freq cutoff, width, ampl cutoff
|
||||
* flag = 10 -> gaussianrpf, parameters: frequency cutoff, width, ampl cutoff
|
||||
* flag = 11 -> gaussianrrf, parameters: frequency cutoff, width, ampl cutoff
|
||||
* bandpass bandreject filters
|
||||
* flag = 12 -> idealbpf, parameters: center frequency, 2*radius
|
||||
* flag = 13 -> idealbrf, parameters: centre frequency, 2*radius
|
||||
* flag = 14 -> butbpf, parameters: order, frequency, 2*radius, ampl cutoff
|
||||
* flag = 15 -> butbrf, parameters: order, frequency, 2*radius, ampl cutoff
|
||||
* flag = 16 -> gaussianbpf, parameters: frequency cutoff, width, ampl cutoff
|
||||
* flag = 17 -> gaussianbrf, parameters: frequency cutoff, width, ampl cutoff
|
||||
* fractal filters (for filtering gaussian noises only)
|
||||
* flag = 18 -> fractal, parameters: fractal dimension
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
This file is part of VIPS.
|
||||
|
||||
VIPS is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
||||
|
||||
*/
|
||||
|
||||
#ifndef IM_FMASK_H
|
||||
#define IM_FMASK_H
|
||||
|
||||
typedef enum mask_type {
|
||||
MASK_IDEAL_HIGHPASS = 0,
|
||||
MASK_IDEAL_LOWPASS = 1,
|
||||
MASK_BUTTERWORTH_HIGHPASS = 2,
|
||||
MASK_BUTTERWORTH_LOWPASS = 3,
|
||||
MASK_GAUSS_HIGHPASS = 4,
|
||||
MASK_GAUSS_LOWPASS = 5,
|
||||
|
||||
MASK_IDEAL_RINGPASS = 6,
|
||||
MASK_IDEAL_RINGREJECT = 7,
|
||||
MASK_BUTTERWORTH_RINGPASS = 8,
|
||||
MASK_BUTTERWORTH_RINGREJECT = 9,
|
||||
MASK_GAUSS_RINGPASS = 10,
|
||||
MASK_GAUSS_RINGREJECT = 11,
|
||||
|
||||
MASK_IDEAL_BANDPASS = 12,
|
||||
MASK_IDEAL_BANDREJECT = 13,
|
||||
MASK_BUTTERWORTH_BANDPASS = 14,
|
||||
MASK_BUTTERWORTH_BANDREJECT = 15,
|
||||
MASK_GAUSS_BANDPASS = 16,
|
||||
MASK_GAUSS_BANDREJECT = 17,
|
||||
|
||||
MASK_FRACTAL_FLT = 18
|
||||
} MaskType;
|
||||
|
||||
int im_flt_image_freq( IMAGE *in, IMAGE *out, MaskType flag, ... );
|
||||
int im_create_fmask( IMAGE *out, int xsize, int ysize, MaskType flag, ... );
|
||||
int im__fmaskcir( IMAGE *out, MaskType flag, va_list ap );
|
||||
|
||||
#endif /*IM_FMASK_H*/
|
@ -37,15 +37,44 @@
|
||||
extern "C" {
|
||||
#endif /*__cplusplus*/
|
||||
|
||||
int im_fractsurf( IMAGE *out, int size, double frd );
|
||||
int im_freqflt( IMAGE *in, IMAGE *mask, IMAGE *out );
|
||||
int im_disp_ps( IMAGE *in, IMAGE *out );
|
||||
int im_rotquad( IMAGE *in, IMAGE *out );
|
||||
typedef enum {
|
||||
VIPS_MASK_IDEAL_HIGHPASS = 0,
|
||||
VIPS_MASK_IDEAL_LOWPASS = 1,
|
||||
VIPS_MASK_BUTTERWORTH_HIGHPASS = 2,
|
||||
VIPS_MASK_BUTTERWORTH_LOWPASS = 3,
|
||||
VIPS_MASK_GAUSS_HIGHPASS = 4,
|
||||
VIPS_MASK_GAUSS_LOWPASS = 5,
|
||||
|
||||
VIPS_MASK_IDEAL_RINGPASS = 6,
|
||||
VIPS_MASK_IDEAL_RINGREJECT = 7,
|
||||
VIPS_MASK_BUTTERWORTH_RINGPASS = 8,
|
||||
VIPS_MASK_BUTTERWORTH_RINGREJECT = 9,
|
||||
VIPS_MASK_GAUSS_RINGPASS = 10,
|
||||
VIPS_MASK_GAUSS_RINGREJECT = 11,
|
||||
|
||||
VIPS_MASK_IDEAL_BANDPASS = 12,
|
||||
VIPS_MASK_IDEAL_BANDREJECT = 13,
|
||||
VIPS_MASK_BUTTERWORTH_BANDPASS = 14,
|
||||
VIPS_MASK_BUTTERWORTH_BANDREJECT = 15,
|
||||
VIPS_MASK_GAUSS_BANDPASS = 16,
|
||||
VIPS_MASK_GAUSS_BANDREJECT = 17,
|
||||
|
||||
VIPS_MASK_FRACTAL_FLT = 18
|
||||
} VipsMaskType;
|
||||
|
||||
int im_fwfft( IMAGE *in, IMAGE *out );
|
||||
int im_invfft( IMAGE *in, IMAGE *out );
|
||||
int im_invfftr( IMAGE *in, IMAGE *out );
|
||||
|
||||
int im_freqflt( IMAGE *in, IMAGE *mask, IMAGE *out );
|
||||
int im_disp_ps( IMAGE *in, IMAGE *out );
|
||||
int im_rotquad( IMAGE *in, IMAGE *out );
|
||||
int im_phasecor_fft( IMAGE *in1, IMAGE *in2, IMAGE *out );
|
||||
|
||||
int im_flt_image_freq( IMAGE *in, IMAGE *out, VipsMaskType flag, ... );
|
||||
int im_create_fmask( IMAGE *out, int xsize, int ysize, VipsMaskType flag, ... );
|
||||
int im_fractsurf( IMAGE *out, int size, double frd );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /*__cplusplus*/
|
||||
|
@ -267,6 +267,8 @@ int im_invmat( double **, int );
|
||||
int im_conv_f_raw( IMAGE *in, IMAGE *out, DOUBLEMASK *mask );
|
||||
int im_convsep_f_raw( IMAGE *in, IMAGE *out, DOUBLEMASK *mask );
|
||||
|
||||
int im__fmaskcir( IMAGE *out, VipsMaskType flag, va_list ap );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /*__cplusplus*/
|
||||
|
Loading…
Reference in New Issue
Block a user