stuff
This commit is contained in:
parent
b0b7dc43e3
commit
81afcea40d
5
TODO
5
TODO
@ -3,6 +3,11 @@
|
|||||||
nip2: im_prepare.c:324: im_prepare_to:
|
nip2: im_prepare.c:324: im_prepare_to:
|
||||||
Assertion `clipped.left == r->left' failed.
|
Assertion `clipped.left == r->left' failed.
|
||||||
|
|
||||||
|
also, im_spcor a rectangular image one pixel smaller with itself and the
|
||||||
|
peak comes at (eg. 134x134) rather than in the centre of the image
|
||||||
|
|
||||||
|
suspicious!
|
||||||
|
|
||||||
- doing im_create_fmask() and friends
|
- doing im_create_fmask() and friends
|
||||||
|
|
||||||
- how about im_invalidate_area()? we currently repaint the whole window on
|
- how about im_invalidate_area()? we currently repaint the whole window on
|
||||||
|
@ -86,26 +86,34 @@ typedef struct {
|
|||||||
double c1; /* sqrt(sumij (ref(i,j)-mean(ref))^2) */
|
double c1; /* sqrt(sumij (ref(i,j)-mean(ref))^2) */
|
||||||
} Spcor;
|
} Spcor;
|
||||||
|
|
||||||
#define LOOP(IN) { \
|
#define LOOP( IN ) { \
|
||||||
IN *a = (IN *) p; \
|
IN *a = (IN *) p; \
|
||||||
IN *b = (IN *) ref->data; \
|
IN *b = (IN *) ref->data; \
|
||||||
int in_lsk = lsk / sizeof( IN ); \
|
int in_lsk = lsk / sizeof( IN ); \
|
||||||
IN *a1, *b1; \
|
IN *a1; \
|
||||||
|
IN *b1; \
|
||||||
\
|
\
|
||||||
/* For each pel in or, loop over ref. First, \
|
/* For each pel in or, loop over ref. First, \
|
||||||
* calculate mean of area in ir corresponding to ref. \
|
* calculate mean of area in ir corresponding to ref. \
|
||||||
*/ \
|
*/ \
|
||||||
for( a1 = a, sum1 = 0, j = 0; j < ref->Ysize; j++, a1 += in_lsk ) \
|
a1 = a; \
|
||||||
|
sum1 = 0; \
|
||||||
|
for( j = 0; j < ref->Ysize; j++ ) { \
|
||||||
for( i = 0; i < ref->Xsize; i++ ) \
|
for( i = 0; i < ref->Xsize; i++ ) \
|
||||||
sum1 += a1[i]; \
|
sum1 += a1[i]; \
|
||||||
imean = (double) sum1 / (ref->Xsize * ref->Ysize); \
|
a1 += in_lsk; \
|
||||||
|
} \
|
||||||
|
imean = sum1 / (ref->Xsize * ref->Ysize); \
|
||||||
\
|
\
|
||||||
/* Loop over ir again, this time calculating \
|
/* Loop over ir again, this time calculating \
|
||||||
* sum-of-squares-of-differences for this window on \
|
* sum-of-squares-of-differences for this window on \
|
||||||
* ir, and also sum-of-products-of-differences from mean. \
|
* ir, and also sum-of-products-of-differences from mean. \
|
||||||
*/ \
|
*/ \
|
||||||
for( a1 = a, b1 = b, sum2 = 0.0, sum3 = 0.0, j = 0; \
|
a1 = a; \
|
||||||
j < ref->Ysize; j++, a1 += in_lsk, b1 += ref->Xsize ) { \
|
b1 = b; \
|
||||||
|
sum2 = 0.0; \
|
||||||
|
sum3 = 0.0; \
|
||||||
|
for( j = 0; j < ref->Ysize; j++ ) { \
|
||||||
for( i = 0; i < ref->Xsize; i++ ) { \
|
for( i = 0; i < ref->Xsize; i++ ) { \
|
||||||
/* Reference pel, and input pel. \
|
/* Reference pel, and input pel. \
|
||||||
*/ \
|
*/ \
|
||||||
@ -122,6 +130,8 @@ typedef struct {
|
|||||||
*/ \
|
*/ \
|
||||||
sum3 += (rp - spcor->rmean) * (ip - imean); \
|
sum3 += (rp - spcor->rmean) * (ip - imean); \
|
||||||
} \
|
} \
|
||||||
|
a1 += in_lsk; \
|
||||||
|
b1 += ref->Xsize; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,8 +147,8 @@ spcor_gen( REGION *or, void *vseq, void *a, void *b )
|
|||||||
Rect *r = &or->valid;
|
Rect *r = &or->valid;
|
||||||
int le = r->left;
|
int le = r->left;
|
||||||
int to = r->top;
|
int to = r->top;
|
||||||
int bo = IM_RECT_BOTTOM(r);
|
int bo = IM_RECT_BOTTOM( r );
|
||||||
int ri = IM_RECT_RIGHT(r);
|
int ri = IM_RECT_RIGHT( r );
|
||||||
|
|
||||||
int x, y, i, j;
|
int x, y, i, j;
|
||||||
int lsk;
|
int lsk;
|
||||||
@ -196,10 +206,10 @@ static Spcor *
|
|||||||
spcor_new( IMAGE *out, IMAGE *ref )
|
spcor_new( IMAGE *out, IMAGE *ref )
|
||||||
{
|
{
|
||||||
Spcor *spcor;
|
Spcor *spcor;
|
||||||
int sz = ref->Xsize * ref->Ysize;
|
size_t sz = ref->Xsize * ref->Ysize;
|
||||||
PEL *p = (PEL *) ref->data;
|
PEL *p = (PEL *) ref->data;
|
||||||
double s;
|
double s;
|
||||||
int i;
|
size_t i;
|
||||||
|
|
||||||
if( !(spcor = IM_NEW( out, Spcor )) )
|
if( !(spcor = IM_NEW( out, Spcor )) )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
@ -212,7 +222,8 @@ spcor_new( IMAGE *out, IMAGE *ref )
|
|||||||
|
|
||||||
/* Find sqrt-of-sum-of-squares-of-differences.
|
/* Find sqrt-of-sum-of-squares-of-differences.
|
||||||
*/
|
*/
|
||||||
for( s = 0.0, i = 0; i < sz; i++ ) {
|
s = 0.0;
|
||||||
|
for( i = 0; i < sz; i++ ) {
|
||||||
double t = (int) p[i] - spcor->rmean;
|
double t = (int) p[i] - spcor->rmean;
|
||||||
s += t * t;
|
s += t * t;
|
||||||
}
|
}
|
||||||
@ -245,18 +256,11 @@ im_spcor_raw( IMAGE *in, IMAGE *ref, IMAGE *out )
|
|||||||
*/
|
*/
|
||||||
if( im_check_uncoded( "im_spcor", in ) ||
|
if( im_check_uncoded( "im_spcor", in ) ||
|
||||||
im_check_mono( "im_spcor", in ) ||
|
im_check_mono( "im_spcor", in ) ||
|
||||||
im_check_uncoded( "im_spcor", ref ) ||
|
im_check_8or16( "im_spcor", in ) ||
|
||||||
im_check_mono( "im_spcor", ref ) ||
|
im_check_coding_same( "im_spcor", in, ref ) ||
|
||||||
|
im_check_bands_same( "im_spcor", in, ref ) ||
|
||||||
im_check_format_same( "im_spcor", in, ref ) )
|
im_check_format_same( "im_spcor", in, ref ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
if( in->BandFmt != IM_BANDFMT_UCHAR &&
|
|
||||||
in->BandFmt != IM_BANDFMT_CHAR &&
|
|
||||||
in->BandFmt != IM_BANDFMT_SHORT &&
|
|
||||||
in->BandFmt != IM_BANDFMT_USHORT ) {
|
|
||||||
im_error( "im_spcor",
|
|
||||||
"%s", _( "input not char/uchar/short/ushort" ) );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Prepare the output image.
|
/* Prepare the output image.
|
||||||
*/
|
*/
|
||||||
|
@ -60,6 +60,7 @@ int im_check_noncomplex( const char *domain, IMAGE *im );
|
|||||||
int im_check_complex( const char *domain, IMAGE *im );
|
int im_check_complex( const char *domain, IMAGE *im );
|
||||||
int im_check_format( const char *domain, IMAGE *im, VipsBandFmt fmt );
|
int im_check_format( const char *domain, IMAGE *im, VipsBandFmt fmt );
|
||||||
int im_check_u8or16( const char *domain, IMAGE *im );
|
int im_check_u8or16( const char *domain, IMAGE *im );
|
||||||
|
int im_check_8or16( const char *domain, IMAGE *im );
|
||||||
int im_check_format_same( const char *domain, IMAGE *im1, IMAGE *im2 );
|
int im_check_format_same( const char *domain, IMAGE *im1, IMAGE *im2 );
|
||||||
int im_check_size_same( const char *domain, IMAGE *im1, IMAGE *im2 );
|
int im_check_size_same( const char *domain, IMAGE *im1, IMAGE *im2 );
|
||||||
int im_check_vector( const char *domain, int n, IMAGE *im );
|
int im_check_vector( const char *domain, int n, IMAGE *im );
|
||||||
|
@ -865,6 +865,35 @@ im_check_uint( const char *domain, IMAGE *im )
|
|||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* im_check_8or16:
|
||||||
|
* @domain: the originating domain for the error message
|
||||||
|
* @im: image to check
|
||||||
|
*
|
||||||
|
* Check that the image is 8 or 16-bit integer, signed or unsigned.
|
||||||
|
* Otherwise set an error message
|
||||||
|
* and return non-zero.
|
||||||
|
*
|
||||||
|
* See also: im_error().
|
||||||
|
*
|
||||||
|
* Returns: 0 if OK, -1 otherwise.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
im_check_8or16( const char *domain, IMAGE *im )
|
||||||
|
{
|
||||||
|
if( im->BandFmt != IM_BANDFMT_UCHAR &&
|
||||||
|
im->BandFmt != IM_BANDFMT_USHORT &&
|
||||||
|
im->BandFmt != IM_BANDFMT_CHAR &&
|
||||||
|
im->BandFmt != IM_BANDFMT_SHORT ) {
|
||||||
|
im_error( domain, "%s",
|
||||||
|
_( "image must be 8- or 16-bit integer, "
|
||||||
|
"signed or unsigned" ) );
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* im_check_u8or16:
|
* im_check_u8or16:
|
||||||
* @domain: the originating domain for the error message
|
* @domain: the originating domain for the error message
|
||||||
|
@ -624,7 +624,6 @@ vips_interpolate_mbicubic_interpolate( VipsInterpolate* restrict interpolate,
|
|||||||
static void
|
static void
|
||||||
vips_interpolate_mbicubic_class_init( VipsInterpolateMbicubicClass *klass )
|
vips_interpolate_mbicubic_class_init( VipsInterpolateMbicubicClass *klass )
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS( klass );
|
|
||||||
VipsObjectClass *object_class = VIPS_OBJECT_CLASS( klass );
|
VipsObjectClass *object_class = VIPS_OBJECT_CLASS( klass );
|
||||||
VipsInterpolateClass *interpolate_class =
|
VipsInterpolateClass *interpolate_class =
|
||||||
VIPS_INTERPOLATE_CLASS( klass );
|
VIPS_INTERPOLATE_CLASS( klass );
|
||||||
|
Loading…
Reference in New Issue
Block a user