stuff
This commit is contained in:
parent
f0bbbbaf77
commit
b2fc33313e
2
TODO
2
TODO
@ -1,4 +1,4 @@
|
|||||||
- revising im_remainder()
|
- make im__math and common up code between the trig/log funcs
|
||||||
|
|
||||||
|
|
||||||
- 1-bit PNG read is broken?
|
- 1-bit PNG read is broken?
|
||||||
|
@ -17,6 +17,9 @@
|
|||||||
* - tiny speed up
|
* - tiny speed up
|
||||||
* 8/12/06
|
* 8/12/06
|
||||||
* - add liboil support
|
* - add liboil support
|
||||||
|
* 28/8/09
|
||||||
|
* - gtkdoc
|
||||||
|
* - tiny polish
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -251,9 +251,9 @@ static int bandfmt_add[10] = {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* im_add:
|
* im_add:
|
||||||
* @in1: input image 1
|
* @in1: input #IMAGE 1
|
||||||
* @in2: input image 2
|
* @in2: input #IMAGE 2
|
||||||
* @out: output image
|
* @out: output #IMAGE
|
||||||
*
|
*
|
||||||
* This operation calculates @in1 + @in2 and writes the result to @out.
|
* This operation calculates @in1 + @in2 and writes the result to @out.
|
||||||
* The images must be the same size. They may have any format.
|
* The images must be the same size. They may have any format.
|
||||||
|
@ -1,14 +1,10 @@
|
|||||||
/* @(#) ceil() an image ... no promotion, so output type == input type
|
/* im_ceil.c
|
||||||
* @(#)
|
|
||||||
* @(#) int
|
|
||||||
* @(#) im_ceil( in, out )
|
|
||||||
* @(#) IMAGE *in, *out;
|
|
||||||
* @(#)
|
|
||||||
* @(#) Returns 0 on success and -1 on error
|
|
||||||
* @(#)
|
|
||||||
*
|
*
|
||||||
* 20/6/02 JC
|
* 20/6/02 JC
|
||||||
* - adapted from im_abs()
|
* - adapted from im_abs()
|
||||||
|
* 29/8/09
|
||||||
|
* - gtkdoc
|
||||||
|
* - tiny cleanups
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -45,7 +41,6 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#include <vips/vips.h>
|
#include <vips/vips.h>
|
||||||
|
|
||||||
@ -53,8 +48,7 @@
|
|||||||
#include <dmalloc.h>
|
#include <dmalloc.h>
|
||||||
#endif /*WITH_DMALLOC*/
|
#endif /*WITH_DMALLOC*/
|
||||||
|
|
||||||
#define ceil_loop(TYPE)\
|
#define LOOP( TYPE ) { \
|
||||||
{\
|
|
||||||
TYPE *p = (TYPE *) in; \
|
TYPE *p = (TYPE *) in; \
|
||||||
TYPE *q = (TYPE *) out; \
|
TYPE *q = (TYPE *) out; \
|
||||||
\
|
\
|
||||||
@ -67,21 +61,41 @@
|
|||||||
static void
|
static void
|
||||||
ceil_gen( PEL *in, PEL *out, int width, IMAGE *im )
|
ceil_gen( PEL *in, PEL *out, int width, IMAGE *im )
|
||||||
{
|
{
|
||||||
|
/* Complex just doubles the size.
|
||||||
|
*/
|
||||||
|
const int sz = width * im->Bands * (im_iscomplex( im ) ? 2 : 1);
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
int sz = width * im->Bands;
|
|
||||||
|
|
||||||
switch( im->BandFmt ) {
|
switch( im->BandFmt ) {
|
||||||
case IM_BANDFMT_FLOAT: ceil_loop(float); break;
|
case IM_BANDFMT_COMPLEX:
|
||||||
case IM_BANDFMT_DOUBLE: ceil_loop(double); break;
|
case IM_BANDFMT_FLOAT:
|
||||||
case IM_BANDFMT_COMPLEX: sz *= 2; ceil_loop(float); break;
|
LOOP( float );
|
||||||
case IM_BANDFMT_DPCOMPLEX: sz *= 2; ceil_loop(double); break;
|
break;
|
||||||
|
|
||||||
|
case IM_BANDFMT_DOUBLE:
|
||||||
|
case IM_BANDFMT_DPCOMPLEX:
|
||||||
|
LOOP( double );
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
assert( 0 );
|
g_assert( 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ceil of image.
|
/**
|
||||||
|
* im_ceil:
|
||||||
|
* @in: input #IMAGE
|
||||||
|
* @out: output #IMAGE
|
||||||
|
*
|
||||||
|
* For each pixel, find the smallest integral value not less than.
|
||||||
|
* Copy for integer types, call <function>ceil(3)</function> for float and
|
||||||
|
* complex types.
|
||||||
|
* Output type == input type.
|
||||||
|
*
|
||||||
|
* See also: im_floor(), im_rint(), im_clip2fmt()
|
||||||
|
*
|
||||||
|
* Returns: 0 on success, -1 on error
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
im_ceil( IMAGE *in, IMAGE *out )
|
im_ceil( IMAGE *in, IMAGE *out )
|
||||||
|
@ -1,16 +1,4 @@
|
|||||||
/* @(#) Multiplies two complex images. complex output is normalised to 1
|
/* im_cmulnorm.c
|
||||||
* @(#) Inputs can be complex double or complex float
|
|
||||||
* @(#) Result (double complex or float complex) depends on inputs
|
|
||||||
* @(#) Function im_cmulnorm() assumes that the both input files
|
|
||||||
* @(#) are either memory mapped or in a buffer.
|
|
||||||
* @(#) Images must have the same no of bands and must be complex
|
|
||||||
* @(#) No check for overflow is carried out.
|
|
||||||
* @(#)
|
|
||||||
* @(#) int im_cmulnorm(in1, in2, out)
|
|
||||||
* @(#) IMAGE *in1, *in2, *out;
|
|
||||||
* @(#)
|
|
||||||
* @(#) Returns 0 on success and -1 on error
|
|
||||||
* @(#)
|
|
||||||
*
|
*
|
||||||
* Copyright: 1990, N. Dessipris.
|
* Copyright: 1990, N. Dessipris.
|
||||||
*
|
*
|
||||||
@ -21,6 +9,9 @@
|
|||||||
* - thrown away and redone in terms of im_multiply()
|
* - thrown away and redone in terms of im_multiply()
|
||||||
* 9/7/02 JC
|
* 9/7/02 JC
|
||||||
* - im_sign() broken out, done in terms of that
|
* - im_sign() broken out, done in terms of that
|
||||||
|
* 28/8/09
|
||||||
|
* - gtkdoc
|
||||||
|
* - tiny polish
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -63,12 +54,31 @@
|
|||||||
#include <dmalloc.h>
|
#include <dmalloc.h>
|
||||||
#endif /*WITH_DMALLOC*/
|
#endif /*WITH_DMALLOC*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* im_cmulnorm
|
||||||
|
* @in1: input #IMAGE 1
|
||||||
|
* @in2: input #IMAGE 2
|
||||||
|
* @out: output #IMAGE
|
||||||
|
*
|
||||||
|
* im_cmulnorm() multiplies two complex images. The complex output is
|
||||||
|
* normalised to 1 by dividing both the real and the imaginary part of each
|
||||||
|
* pel with the norm. This is useful for phase correlation.
|
||||||
|
*
|
||||||
|
* This operation used to be important, but now simply calls im_multiply()
|
||||||
|
* then im_sign().
|
||||||
|
*
|
||||||
|
* See also: im_multiply(), im_sign().
|
||||||
|
*
|
||||||
|
* Returns: 0 on success, -1 on error
|
||||||
|
*/
|
||||||
int
|
int
|
||||||
im_cmulnorm( IMAGE *in1, IMAGE *in2, IMAGE *out )
|
im_cmulnorm( IMAGE *in1, IMAGE *in2, IMAGE *out )
|
||||||
{
|
{
|
||||||
IMAGE *t1 = im_open_local( out, "im_cmulnorm:1", "p" );
|
IMAGE *t1;
|
||||||
|
|
||||||
if( !t1 || im_multiply( in1, in2, t1 ) || im_sign( t1, out ) )
|
if( !(t1 = im_open_local( out, "im_cmulnorm:1", "p" )) ||
|
||||||
|
im_multiply( in1, in2, t1 ) ||
|
||||||
|
im_sign( t1, out ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
|
@ -1,12 +1,4 @@
|
|||||||
/* @(#) Find cos of any non-complex image. Output is always float for integer
|
/* im_costra
|
||||||
* @(#) input and double for double input. All angles in degrees.
|
|
||||||
* @(#)
|
|
||||||
* @(#) int
|
|
||||||
* @(#) im_costra( in, out )
|
|
||||||
* @(#) IMAGE *in, *out;
|
|
||||||
* @(#)
|
|
||||||
* @(#) Returns 0 on success and -1 on error
|
|
||||||
* @(#)
|
|
||||||
*
|
*
|
||||||
* Copyright: 1990, N. Dessipris, based on im_powtra()
|
* Copyright: 1990, N. Dessipris, based on im_powtra()
|
||||||
* Author: Nicos Dessipris
|
* Author: Nicos Dessipris
|
||||||
@ -23,6 +15,9 @@
|
|||||||
* - adapted for im_wrapone()
|
* - adapted for im_wrapone()
|
||||||
* 26/1/96 JC
|
* 26/1/96 JC
|
||||||
* - im_acostra() added
|
* - im_acostra() added
|
||||||
|
* 30/8/09
|
||||||
|
* - gtkdoc
|
||||||
|
* - tiny cleanups
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -83,8 +78,9 @@
|
|||||||
static void
|
static void
|
||||||
costra_gen( PEL *in, PEL *out, int width, IMAGE *im )
|
costra_gen( PEL *in, PEL *out, int width, IMAGE *im )
|
||||||
{
|
{
|
||||||
|
const int sz = width * im->Bands;
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
int sz = width * im->Bands;
|
|
||||||
|
|
||||||
/* Switch for all input types.
|
/* Switch for all input types.
|
||||||
*/
|
*/
|
||||||
@ -99,11 +95,22 @@ costra_gen( PEL *in, PEL *out, int width, IMAGE *im )
|
|||||||
case IM_BANDFMT_DOUBLE: loop( double, double ); break;
|
case IM_BANDFMT_DOUBLE: loop( double, double ); break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
assert( 0 );
|
g_assert( 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cos transform.
|
/**
|
||||||
|
* im_costra
|
||||||
|
* @in: input #IMAGE
|
||||||
|
* @out: output #IMAGE
|
||||||
|
*
|
||||||
|
* For each pixel, call <function>cos(3)</function> (cosine). Angles are
|
||||||
|
* expressed in degrees. The output type is float, unless the input is
|
||||||
|
* double, in which case the output is double. Non-complex images only.
|
||||||
|
*
|
||||||
|
* See also: im_acostra(), im_sintra(), im_tantra().
|
||||||
|
*
|
||||||
|
* Returns: 0 on success, -1 on error
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
im_costra( IMAGE *in, IMAGE *out )
|
im_costra( IMAGE *in, IMAGE *out )
|
||||||
@ -117,23 +124,9 @@ im_costra( IMAGE *in, IMAGE *out )
|
|||||||
*/
|
*/
|
||||||
if( im_cp_desc( out, in ) )
|
if( im_cp_desc( out, in ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
switch( in->BandFmt ) {
|
if( im_isint( in ) ) {
|
||||||
case IM_BANDFMT_UCHAR:
|
|
||||||
case IM_BANDFMT_CHAR:
|
|
||||||
case IM_BANDFMT_USHORT:
|
|
||||||
case IM_BANDFMT_SHORT:
|
|
||||||
case IM_BANDFMT_UINT:
|
|
||||||
case IM_BANDFMT_INT:
|
|
||||||
out->Bbits = IM_BBITS_FLOAT;
|
out->Bbits = IM_BBITS_FLOAT;
|
||||||
out->BandFmt = IM_BANDFMT_FLOAT;
|
out->BandFmt = IM_BANDFMT_FLOAT;
|
||||||
break;
|
|
||||||
|
|
||||||
case IM_BANDFMT_FLOAT:
|
|
||||||
case IM_BANDFMT_DOUBLE:
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
assert( 0 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generate!
|
/* Generate!
|
||||||
@ -159,8 +152,9 @@ im_costra( IMAGE *in, IMAGE *out )
|
|||||||
static void
|
static void
|
||||||
acostra_gen( PEL *in, PEL *out, int width, IMAGE *im )
|
acostra_gen( PEL *in, PEL *out, int width, IMAGE *im )
|
||||||
{
|
{
|
||||||
|
const int sz = width * im->Bands;
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
int sz = width * im->Bands;
|
|
||||||
|
|
||||||
/* Switch for all input types.
|
/* Switch for all input types.
|
||||||
*/
|
*/
|
||||||
@ -179,7 +173,20 @@ acostra_gen( PEL *in, PEL *out, int width, IMAGE *im )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Acos transform.
|
|
||||||
|
/**
|
||||||
|
* im_acostra
|
||||||
|
* @in: input #IMAGE
|
||||||
|
* @out: output #IMAGE
|
||||||
|
*
|
||||||
|
* For each pixel, call <function>acos(3)</function> (arc or inverse cosine).
|
||||||
|
* Angles are expressed in
|
||||||
|
* degrees. The output type is float, unless the input is double, in which
|
||||||
|
* case the output is double. Non-complex images only.
|
||||||
|
*
|
||||||
|
* See also: im_costra(), im_asintra(), im_atantra().
|
||||||
|
*
|
||||||
|
* Returns: 0 on success, -1 on error
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
im_acostra( IMAGE *in, IMAGE *out )
|
im_acostra( IMAGE *in, IMAGE *out )
|
||||||
@ -193,23 +200,9 @@ im_acostra( IMAGE *in, IMAGE *out )
|
|||||||
*/
|
*/
|
||||||
if( im_cp_desc( out, in ) )
|
if( im_cp_desc( out, in ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
switch( in->BandFmt ) {
|
if( im_isint( in ) ) {
|
||||||
case IM_BANDFMT_UCHAR:
|
|
||||||
case IM_BANDFMT_CHAR:
|
|
||||||
case IM_BANDFMT_USHORT:
|
|
||||||
case IM_BANDFMT_SHORT:
|
|
||||||
case IM_BANDFMT_UINT:
|
|
||||||
case IM_BANDFMT_INT:
|
|
||||||
out->Bbits = IM_BBITS_FLOAT;
|
out->Bbits = IM_BBITS_FLOAT;
|
||||||
out->BandFmt = IM_BANDFMT_FLOAT;
|
out->BandFmt = IM_BANDFMT_FLOAT;
|
||||||
break;
|
|
||||||
|
|
||||||
case IM_BANDFMT_FLOAT:
|
|
||||||
case IM_BANDFMT_DOUBLE:
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
assert( 0 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generate!
|
/* Generate!
|
||||||
|
Loading…
Reference in New Issue
Block a user