MagickCore 7.1.0
Convert, Edit, Or Compose Bitmap Images
segment.c File Reference
Include dependency graph for segment.c:

Go to the source code of this file.

Data Structures

struct  _ExtentPacket
 
struct  _Cluster
 
struct  _IntervalTree
 
struct  _ZeroCrossing
 

Macros

#define MaxDimension   3
 
#define DeltaTau   0.5f
 
#define WeightingExponent   2.5
 
#define SegmentPower(ratio)   pow(ratio,(double) (1.0/(weighting_exponent-1.0)));
 
#define Tau   5.2f
 
#define SegmentImageTag   "Segment/Image"
 
#define ThrowClassifyException(severity, tag, label)
 

Typedefs

typedef struct _ExtentPacket ExtentPacket
 
typedef struct _Cluster Cluster
 
typedef struct _IntervalTree IntervalTree
 
typedef struct _ZeroCrossing ZeroCrossing
 

Functions

static double OptimalTau (const ssize_t *, const double, const double, const double, const double, short *)
 
static ssize_t DefineRegion (const short *, ExtentPacket *)
 
static void FreeNodes (IntervalTree *)
 
static void InitializeHistogram (const Image *, ssize_t **, ExceptionInfo *)
 
static void ScaleSpace (const ssize_t *, const double, double *)
 
static void ZeroCrossHistogram (double *, const double, short *)
 
static MagickBooleanType Classify (Image *image, short **extrema, const double cluster_threshold, const double weighting_exponent, const MagickBooleanType verbose, ExceptionInfo *exception)
 
static void ConsolidateCrossings (ZeroCrossing *zero_crossing, const size_t number_crossings)
 
static void DerivativeHistogram (const double *histogram, double *derivative)
 
MagickExport MagickBooleanType GetImageDynamicThreshold (const Image *image, const double cluster_threshold, const double smooth_threshold, PixelInfo *pixel, ExceptionInfo *exception)
 
static void InitializeList (IntervalTree **list, ssize_t *number_nodes, IntervalTree *node)
 
static void MeanStability (IntervalTree *node)
 
static void Stability (IntervalTree *node)
 
static IntervalTreeInitializeIntervalTree (const ZeroCrossing *zero_crossing, const size_t number_crossings)
 
static void ActiveNodes (IntervalTree **list, ssize_t *number_nodes, IntervalTree *node)
 
MagickExport MagickBooleanType SegmentImage (Image *image, const ColorspaceType colorspace, const MagickBooleanType verbose, const double cluster_threshold, const double smooth_threshold, ExceptionInfo *exception)
 

Variables

static const int Blue = 2
 
static const int Green = 1
 
static const int Red = 0
 
static const int SafeMargin = 3
 
static const int TreeLength = 600
 

Macro Definition Documentation

◆ DeltaTau

#define DeltaTau   0.5f

Definition at line 112 of file segment.c.

◆ MaxDimension

#define MaxDimension   3

Definition at line 111 of file segment.c.

◆ SegmentImageTag

#define SegmentImageTag   "Segment/Image"

◆ SegmentPower

#define SegmentPower (   ratio)    pow(ratio,(double) (1.0/(weighting_exponent-1.0)));

Definition at line 118 of file segment.c.

◆ Tau

#define Tau   5.2f

Definition at line 120 of file segment.c.

◆ ThrowClassifyException

#define ThrowClassifyException (   severity,
  tag,
  label 
)
Value:
{\
for (cluster=head; cluster != (Cluster *) NULL; cluster=next_cluster) \
{ \
next_cluster=cluster->next; \
cluster=(Cluster *) RelinquishMagickMemory(cluster); \
} \
if (squares != (double *) NULL) \
{ \
squares-=255; \
free_squares=squares; \
free_squares=(double *) RelinquishMagickMemory(free_squares); \
} \
ThrowBinaryException(severity,tag,label); \
}
MagickExport void * RelinquishMagickMemory(void *memory)
Definition: memory.c:1162

◆ WeightingExponent

#define WeightingExponent   2.5

Definition at line 117 of file segment.c.

Typedef Documentation

◆ Cluster

typedef struct _Cluster Cluster

◆ ExtentPacket

typedef struct _ExtentPacket ExtentPacket

◆ IntervalTree

typedef struct _IntervalTree IntervalTree

◆ ZeroCrossing

typedef struct _ZeroCrossing ZeroCrossing

Function Documentation

◆ ActiveNodes()

static void ActiveNodes ( IntervalTree **  list,
ssize_t *  number_nodes,
IntervalTree node 
)
static

◆ Classify()

◆ ConsolidateCrossings()

static void ConsolidateCrossings ( ZeroCrossing zero_crossing,
const size_t  number_crossings 
)
static

Definition at line 703 of file segment.c.

References _ZeroCrossing::crossings, MagickMax, and MagickMin.

Referenced by OptimalTau().

◆ DefineRegion()

static ssize_t DefineRegion ( const short *  extrema,
ExtentPacket extents 
)
static

◆ DerivativeHistogram()

static void DerivativeHistogram ( const double *  histogram,
double *  derivative 
)
static

Definition at line 876 of file segment.c.

Referenced by OptimalTau().

◆ FreeNodes()

static void FreeNodes ( IntervalTree node)
static

◆ GetImageDynamicThreshold()

◆ InitializeHistogram()

static void InitializeHistogram ( const Image image,
ssize_t **  histogram,
ExceptionInfo exception 
)

◆ InitializeIntervalTree()

◆ InitializeList()

static void InitializeList ( IntervalTree **  list,
ssize_t *  number_nodes,
IntervalTree node 
)
static

Definition at line 1289 of file segment.c.

References _IntervalTree::child, InitializeList(), and _IntervalTree::sibling.

Referenced by InitializeIntervalTree(), and InitializeList().

◆ MeanStability()

static void MeanStability ( IntervalTree node)
static

◆ OptimalTau()

static double OptimalTau ( const ssize_t *  histogram,
const double  max_tau,
const double  min_tau,
const double  delta_tau,
const double  smooth_threshold,
short *  extrema 
)
static

◆ ScaleSpace()

static void ScaleSpace ( const ssize_t *  histogram,
const double  tau,
double *  scale_histogram 
)

◆ SegmentImage()

◆ Stability()

static void Stability ( IntervalTree node)
static

◆ ZeroCrossHistogram()

static void ZeroCrossHistogram ( double *  second_derivative,
const double  smooth_threshold,
short *  crossings 
)

Definition at line 1896 of file segment.c.

Referenced by OptimalTau().

Variable Documentation

◆ Blue

const int Blue = 2
static

Definition at line 183 of file segment.c.

Referenced by Classify(), GetImageDynamicThreshold(), InitializeHistogram(), and SegmentImage().

◆ Green

const int Green = 1
static

Definition at line 184 of file segment.c.

Referenced by Classify(), GetImageDynamicThreshold(), InitializeHistogram(), and SegmentImage().

◆ Red

const int Red = 0
static

Definition at line 185 of file segment.c.

Referenced by Classify(), GetImageDynamicThreshold(), InitializeHistogram(), and SegmentImage().

◆ SafeMargin

const int SafeMargin = 3
static

Definition at line 186 of file segment.c.

Referenced by Classify(), and GetImageDynamicThreshold().

◆ TreeLength

const int TreeLength = 600
static

Definition at line 187 of file segment.c.

Referenced by InitializeIntervalTree(), and OptimalTau().