stuff
This commit is contained in:
parent
ae2ef9c04e
commit
936a89bf3e
@ -1,6 +1,10 @@
|
|||||||
/* @(#) Pass VIPS images through CImg
|
/* Pass VIPS images through CImg
|
||||||
*
|
*
|
||||||
* JC, 15/10/07
|
* JC, 15/10/07
|
||||||
|
* 29/4/10
|
||||||
|
* - oop, should be smalltile, probably
|
||||||
|
* - tiny cleanups
|
||||||
|
* - gtkdoc
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -189,6 +193,29 @@ typedef int (*generate_fn)( REGION *out, REGION **in,
|
|||||||
IMAGE **im, Greyc *greyc );
|
IMAGE **im, Greyc *greyc );
|
||||||
|
|
||||||
// as a plain C function
|
// as a plain C function
|
||||||
|
/**
|
||||||
|
* im_greyc_mask:
|
||||||
|
* @in: input image
|
||||||
|
* @out: output image
|
||||||
|
* @mask: input mask
|
||||||
|
* @iterations: number of iterations to perform (eg. 1)
|
||||||
|
* @amplitude: scaling factor (eg. 40)
|
||||||
|
* @sharpness: degree of sharpening to apply (eg. 0.9)
|
||||||
|
* @anisotropy: how much to blur along lines (eg. 0.15)
|
||||||
|
* @alpha: blur by this much before calculating geometry (eg. 0.6)
|
||||||
|
* @sigma: blur geometry by this much (eg. 1.1)
|
||||||
|
* @dl: spatial integration step (eg. 0.8)
|
||||||
|
* @da: angular integration step (eg. 30)
|
||||||
|
* @gauss_prec: precision (eg. 2)
|
||||||
|
* @interpolation: interpolation (eg. 0 for nearest-neighbour)
|
||||||
|
*
|
||||||
|
* This operation calls the blur_anisotropic() method of the CImag image
|
||||||
|
* processing library. It is handy for denoising images and for upscaling.
|
||||||
|
*
|
||||||
|
* See also: im_conv().
|
||||||
|
*
|
||||||
|
* Returns: 0 on success, -1 on error
|
||||||
|
*/
|
||||||
int
|
int
|
||||||
im_greyc_mask( IMAGE *in, IMAGE *out, IMAGE *mask,
|
im_greyc_mask( IMAGE *in, IMAGE *out, IMAGE *mask,
|
||||||
int iterations,
|
int iterations,
|
||||||
@ -200,37 +227,24 @@ im_greyc_mask( IMAGE *in, IMAGE *out, IMAGE *mask,
|
|||||||
IMAGE **arry;
|
IMAGE **arry;
|
||||||
Greyc *greyc;
|
Greyc *greyc;
|
||||||
|
|
||||||
if( im_piocheck( in, out ) )
|
if( im_piocheck( in, out ) ||
|
||||||
|
im_check_uncoded( "im_greyc_mask", in ) ||
|
||||||
|
im_check_u8or16orf( "im_greyc_mask", in ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
if( in->Coding != IM_CODING_NONE ) {
|
|
||||||
im_error( "GREYCstoration", "%s", _( "uncoded only" ) );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
if( mask ) {
|
if( mask ) {
|
||||||
if( mask->Coding != IM_CODING_NONE ) {
|
if( im_pincheck( mask ) ||
|
||||||
im_error( "GREYCstoration", "%s", _( "uncoded only" ) );
|
im_check_uncoded( "im_greyc_mask", mask ) ||
|
||||||
|
im_check_size_same( "im_greyc_mask", in, mask ) ||
|
||||||
|
im_check_format( "im_greyc_mask",
|
||||||
|
mask, IM_BANDFMT_UCHAR ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
|
||||||
if( mask->Xsize != in->Xsize ||
|
|
||||||
mask->Ysize != in->Ysize ) {
|
|
||||||
im_error( "GREYCstoration",
|
|
||||||
"%s", _( "mask size does not match input" ) );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
if( mask->BandFmt != IM_BANDFMT_UCHAR ) {
|
|
||||||
im_error( "GREYCstoration",
|
|
||||||
"%s", _( "mask must be uchar" ) );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
im_cp_desc( out, in );
|
if( im_cp_desc( out, in ) ||
|
||||||
if( im_demand_hint( out, IM_FATSTRIP, in, NULL ) )
|
!(arry = im_allocate_input_array( out, in, mask, NULL )) ||
|
||||||
return( -1 );
|
!(greyc = IM_NEW( out, Greyc )) ||
|
||||||
if( !(arry = im_allocate_input_array( out, in, mask, NULL )) )
|
im_demand_hint( out, IM_SMALLTILE, in, NULL ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
if( !(greyc = IM_NEW( out, Greyc )) )
|
|
||||||
return( -1 );
|
|
||||||
greyc->in = in;
|
greyc->in = in;
|
||||||
greyc->out = out;
|
greyc->out = out;
|
||||||
greyc->mask = mask;
|
greyc->mask = mask;
|
||||||
@ -278,10 +292,7 @@ im_greyc_mask( IMAGE *in, IMAGE *out, IMAGE *mask,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
im_error( "GREYCstoration",
|
g_assert( 0 );
|
||||||
"%s", _( "unsupported type: "
|
|
||||||
"uchar, ushort and float only" ) );
|
|
||||||
return( -1 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
|
@ -62,6 +62,7 @@ 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_8or16( const char *domain, IMAGE *im );
|
||||||
|
int im_check_u8or16orf( 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 );
|
||||||
|
@ -920,6 +920,33 @@ im_check_u8or16( const char *domain, IMAGE *im )
|
|||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* im_check_u8or16orf:
|
||||||
|
* @domain: the originating domain for the error message
|
||||||
|
* @im: image to check
|
||||||
|
*
|
||||||
|
* Check that the image is 8 or 16-bit unsigned integer, or float.
|
||||||
|
* Otherwise set an error message and return non-zero.
|
||||||
|
*
|
||||||
|
* See also: im_error().
|
||||||
|
*
|
||||||
|
* Returns: 0 if OK, -1 otherwise.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
im_check_u8or16orf( const char *domain, IMAGE *im )
|
||||||
|
{
|
||||||
|
if( im->BandFmt != IM_BANDFMT_UCHAR &&
|
||||||
|
im->BandFmt != IM_BANDFMT_USHORT &&
|
||||||
|
im->BandFmt != IM_BANDFMT_FLOAT ) {
|
||||||
|
im_error( domain, "%s",
|
||||||
|
_( "image must be 8- or 16-bit unsigned integer, "
|
||||||
|
"or float" ) );
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* im_check_size_same:
|
* im_check_size_same:
|
||||||
* @domain: the originating domain for the error message
|
* @domain: the originating domain for the error message
|
||||||
|
Loading…
Reference in New Issue
Block a user