deprecate im_zerox(), not very useful

morph now done
This commit is contained in:
John Cupitt 2014-01-17 18:03:46 +00:00
parent cd7fcf5cfe
commit 5983833caa
14 changed files with 66 additions and 43 deletions

View File

@ -38,6 +38,7 @@
- added vips_thread_shutdown(), thanks Lovell
- vips_linear() has a uchar output mode
- redone im_cntlines(), im_rank() as classes
- move im_zerox() to deprecated, it wasm't very useful
9/1/14 started 7.36.6
- fix some clang compiler warnings

View File

@ -8,7 +8,6 @@ libconvolution_la_SOURCES = \
conv.c \
convsep.c \
compass.c \
morph.c \
fastcor.c \
spcor.c \
sharpen.c \

View File

@ -150,7 +150,6 @@ void
vips_convolution_operation_init( void )
{
extern int vips_conv_get_type( void );
extern int vips_morph_get_type( void );
extern int vips_compass_get_type( void );
extern int vips_convsep_get_type( void );
extern int vips_fastcor_get_type( void );
@ -159,7 +158,6 @@ vips_convolution_operation_init( void )
extern int vips_gaussblur_get_type( void );
vips_conv_get_type();
vips_morph_get_type();
vips_compass_get_type();
vips_convsep_get_type();
vips_fastcor_get_type();

View File

@ -9,8 +9,10 @@ libdeprecated_la_SOURCES = \
im_openslide2vips.c \
im_lab_morph.c \
deprecated_dispatch.c \
morph_dispatch.c \
colour_dispatch.c \
convol_dispatch.c \
im_zerox.c \
arith_dispatch.c \
hist_dispatch.c \
im_maxpos_avg.c \

View File

@ -51,22 +51,6 @@ typedef enum {
VIPS_COMBINE_LAST
} VipsCombine;
/**
* VipsOperationMorphology:
* @VIPS_OPERATION_MORPHOLOGY_ERODE: true if all set
* @VIPS_OPERATION_MORPHOLOGY_DILATE: true if one set
*
* More like hit-miss, really.
*
* See also: vips_morph().
*/
typedef enum {
VIPS_OPERATION_MORPHOLOGY_ERODE,
VIPS_OPERATION_MORPHOLOGY_DILATE,
VIPS_OPERATION_MORPHOLOGY_LAST
} VipsOperationMorphology;
int vips_conv( VipsImage *in, VipsImage **out, VipsImage *mask, ... )
__attribute__((sentinel));
int vips_compass( VipsImage *in, VipsImage **out, VipsImage *mask, ... )
@ -74,10 +58,6 @@ int vips_compass( VipsImage *in, VipsImage **out, VipsImage *mask, ... )
int vips_convsep( VipsImage *in, VipsImage **out, VipsImage *mask, ... )
__attribute__((sentinel));
int vips_morph( VipsImage *in, VipsImage **out, VipsImage *mask,
VipsOperationMorphology morph, ... )
__attribute__((sentinel));
int vips_sharpen( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
int vips_gaussblur( VipsImage *in, VipsImage **out, int radius, ... )

View File

@ -78,6 +78,7 @@ GType vips_precision_get_type (void) G_GNUC_CONST;
#define VIPS_TYPE_PRECISION (vips_precision_get_type())
GType vips_combine_get_type (void) G_GNUC_CONST;
#define VIPS_TYPE_COMBINE (vips_combine_get_type())
/* enumerations from "../../../libvips/include/vips/morphology.h" */
GType vips_operation_morphology_get_type (void) G_GNUC_CONST;
#define VIPS_TYPE_OPERATION_MORPHOLOGY (vips_operation_morphology_get_type())
/* enumerations from "../../../libvips/include/vips/object.h" */

View File

@ -38,20 +38,26 @@
extern "C" {
#endif /*__cplusplus*/
int vips_countlines( VipsImage *in, double *nolines,
VipsDirection direction, ... )
__attribute__((sentinel));
typedef enum {
VIPS_OPERATION_MORPHOLOGY_ERODE,
VIPS_OPERATION_MORPHOLOGY_DILATE,
VIPS_OPERATION_MORPHOLOGY_LAST
} VipsOperationMorphology;
int vips_morph( VipsImage *in, VipsImage **out, VipsImage *mask,
VipsOperationMorphology morph, ... )
__attribute__((sentinel));
int vips_rank( VipsImage *in, VipsImage **out,
int width, int height, int index, ... )
__attribute__((sentinel));
int vips_countlines( VipsImage *in, double *nolines,
VipsDirection direction, ... )
__attribute__((sentinel));
int vips_median( VipsImage *in, VipsImage **out, int size, ... )
__attribute__((sentinel));
int im_zerox( VipsImage *in, VipsImage *out, int sign );
int im_label_regions( VipsImage *test, VipsImage *mask, int *segments );
#ifdef __cplusplus

View File

@ -977,6 +977,7 @@ int im_phasecor_fft( VipsImage *in1, VipsImage *in2, VipsImage *out );
int im_cntlines( VipsImage *im, double *nolines, int flag );
int im_rank( VipsImage *in, VipsImage *out, int width, int height, int index );
int im_zerox( VipsImage *in, VipsImage *out, int sign );
#ifdef __cplusplus
}

View File

@ -670,6 +670,7 @@ vips_combine_get_type( void )
return( etype );
}
/* enumerations from "../../libvips/include/vips/morphology.h" */
GType
vips_operation_morphology_get_type( void )
{

View File

@ -4,9 +4,8 @@ libmorphology_la_SOURCES = \
morphology.c \
countlines.c \
rank.c \
hitmiss.c\
im_zerox.c \
morph_dispatch.c \
hitmiss.c \
morph.c \
im_label_regions.c
AM_CPPFLAGS = -I${top_srcdir}/libvips/include @VIPS_CFLAGS@ @VIPS_INCLUDES@

View File

@ -45,25 +45,42 @@
#include <vips/vips.h>
#include "pconvolution.h"
#include "pmorphology.h"
/**
* VipsOperationMorphology:
* @VIPS_OPERATION_MORPHOLOGY_ERODE: true if all set
* @VIPS_OPERATION_MORPHOLOGY_DILATE: true if one set
*
* More like hit-miss, really.
*
* See also: vips_morph().
*/
typedef struct {
VipsConvolution parent_instance;
VipsMorphology parent_instance;
VipsImage *out;
VipsImage *mask;
VipsOperationMorphology morph;
/* @mask cast ready for processing.
*/
VipsImage *M;
} VipsMorph;
typedef VipsConvolutionClass VipsMorphClass;
typedef VipsMorphologyClass VipsMorphClass;
G_DEFINE_TYPE( VipsMorph, vips_morph, VIPS_TYPE_CONVOLUTION );
G_DEFINE_TYPE( VipsMorph, vips_morph, VIPS_TYPE_MORPHOLOGY );
static int
vips_morph_build( VipsObject *object )
{
VipsObjectClass *class = VIPS_OBJECT_GET_CLASS( object );
VipsConvolution *convolution = (VipsConvolution *) object;
VipsMorphology *morphology = (VipsMorphology *) object;
VipsMorph *morph = (VipsMorph *) object;
VipsImage **t = (VipsImage **) vips_object_local_array( object, 2 );
INTMASK *imsk;
@ -72,18 +89,22 @@ vips_morph_build( VipsObject *object )
if( VIPS_OBJECT_CLASS( vips_morph_parent_class )->build( object ) )
return( -1 );
if( !(imsk = im_vips2imask( convolution->M, class->nickname )) ||
!im_local_imask( convolution->out, imsk ) )
if( vips_check_matrix( class->nickname, morph->mask, &t[0] ) )
return( -1 );
morph->M = t[0];
if( !(imsk = im_vips2imask( morph->M, class->nickname )) ||
!im_local_imask( morph->out, imsk ) )
return( -1 );
switch( morph->morph ) {
case VIPS_OPERATION_MORPHOLOGY_DILATE:
if( im_dilate( convolution->in, convolution->out, imsk ) )
if( im_dilate( morphology->in, morph->out, imsk ) )
return( -1 );
break;
case VIPS_OPERATION_MORPHOLOGY_ERODE:
if( im_erode( convolution->in, convolution->out, imsk ) )
if( im_erode( morphology->in, morph->out, imsk ) )
return( -1 );
break;
@ -104,9 +125,21 @@ vips_morph_class_init( VipsMorphClass *class )
gobject_class->get_property = vips_object_get_property;
object_class->nickname = "morph";
object_class->description = _( "convolution operation" );
object_class->description = _( "morphology operation" );
object_class->build = vips_morph_build;
VIPS_ARG_IMAGE( class, "out", 10,
_( "Output" ),
_( "Output image" ),
VIPS_ARGUMENT_REQUIRED_OUTPUT,
G_STRUCT_OFFSET( VipsMorph, out ) );
VIPS_ARG_IMAGE( class, "mask", 20,
_( "Mask" ),
_( "Input matrix image" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsMorph, mask ) );
VIPS_ARG_ENUM( class, "morph", 103,
_( "Morphology" ),
_( "Morphological operation to perform" ),

View File

@ -131,9 +131,11 @@ vips_morphology_init( VipsMorphology *morphology )
void
vips_morphology_operation_init( void )
{
extern int vips_countlines_get_type( void );
extern int vips_morph_get_type( void );
extern int vips_rank_get_type( void );
extern int vips_countlines_get_type( void );
vips_countlines_get_type();
vips_morph_get_type();
vips_rank_get_type();
vips_countlines_get_type();
}