nan = sqrt((double)-1.0); /* Special Value : Not A Number */
/* Generate a new empty kernel if needed */
+ kernel=(KernelInfo *) NULL;
switch(type) {
case UndefinedKernel: /* These should not be used here */
case UserDefinedKernel:
return(DestroyKernelInfo(kernel));
/* set a ring of points of 'scale' ( 0.0 for PeaksKernel ) */
- scale = ( type == PeaksKernel) ? 0.0 : args->xi;
+ scale = (long) (( type == PeaksKernel) ? 0.0 : args->xi);
for ( i=0, v= -kernel->y; v <= (long)kernel->y; v++)
for ( u=-kernel->x; u <= (long)kernel->x; u++, i++)
{ long radius=u*u+v*v;
if (limit1 < radius && radius <= limit2)
- kernel->positive_range += kernel->values[i] = scale;
+ kernel->positive_range += kernel->values[i] = (double) scale;
else
kernel->values[i] = nan;
}
- kernel->minimum = kernel->minimum = scale;
+ kernel->minimum = kernel->minimum = (double) scale;
if ( type == PeaksKernel ) {
/* set the central point in the middle */
kernel->values[kernel->x+kernel->y*kernel->width] = 1.0;
result.green = (MagickRealType) p[r].green;
result.blue = (MagickRealType) p[r].blue;
result.opacity = QuantumRange - (MagickRealType) p[r].opacity;
- result.index = 0;
+ result.index = 0.0;
if ( image->colorspace == CMYKColorspace)
result.index = (MagickRealType) p_indexes[r];
*this_kernel; /* current individual kernel to apply */
MorphologyMethod
- primative; /* the current morphology primative being applied */
+ primitive; /* the current morphology primitive being applied */
MagickBooleanType
verbose; /* verbose output of results */
kernel_compose; /* Handling the result of multiple kernels*/
unsigned long
- count, /* count of primative steps applied */
+ count, /* count of primitive steps applied */
loop, /* number of times though kernel list (iterations) */
loop_limit, /* finish looping after this many times */
stage, /* stage number for compound morphology */
- changed, /* number pixels changed by one primative operation */
+ changed, /* number pixels changed by one primitive operation */
loop_changed, /* changes made over loop though of kernels */
total_changed, /* total count of all changes to image */
kernel_number; /* kernel number being applied */
assert(exception != (ExceptionInfo *) NULL);
assert(exception->signature == MagickSignature);
- loop_limit = iterations;
+ loop_limit = (unsigned long) iterations;
if ( iterations < 0 )
loop_limit = image->columns > image->rows ? image->columns : image->rows;
if ( iterations == 0 )
*/
assert(kernel != (KernelInfo *)NULL);
- verbose = ( GetImageArtifact(image,"verbose") != (const char *) NULL );
+ verbose = ( GetImageArtifact(image,"verbose") != (const char *) NULL ) ?
+ MagickTrue : MagickFalse;
/* initialise for cleanup */
- curr_image = (Image *) image; /* result of morpholgy primative */
+ curr_image = (Image *) image; /* result of morpholgy primitive */
work_image = (Image *) NULL; /* secondary working image */
save_image = (Image *) NULL; /* save image for some compound methods */
curr_kernel = (KernelInfo *)kernel; /* allow kernel list to be modified */
kernel_compose = NoCompositeOp; /* iterated over all kernels */
- /* Select initial primative morphology to apply */
+ /* Select initial primitive morphology to apply */
+ primitive = UndefinedMorphology;
switch( method ) {
case CorrelateMorphology:
/* A Correlation is actually a Convolution with a reflected kernel.
RotateKernelInfo(curr_kernel,180);
/* FALL THRU to Convolve */
case ConvolveMorphology:
- primative = ConvolveMorphology;
+ primitive = ConvolveMorphology;
kernel_compose = NoCompositeOp;
break;
case ErodeMorphology: /* just erode */
case EdgeInMorphology: /* erode and image difference */
case TopHatMorphology: /* erode, dilate and image difference */
case SmoothMorphology: /* erode, dilate, dilate, erode */
- primative = ErodeMorphology;
+ primitive = ErodeMorphology;
break;
case ErodeIntensityMorphology:
case OpenIntensityMorphology:
- primative = ErodeIntensityMorphology;
+ primitive = ErodeIntensityMorphology;
break;
case DilateMorphology: /* just dilate */
case EdgeOutMorphology: /* dilate and image difference */
case EdgeMorphology: /* dilate and erode difference */
- primative = DilateMorphology;
+ primitive = DilateMorphology;
break;
case CloseMorphology: /* dilate, then erode */
case BottomHatMorphology: /* dilate and image difference */
if (curr_kernel == (KernelInfo *) NULL)
goto error_cleanup;
RotateKernelInfo(curr_kernel,180);
- primative = DilateMorphology;
+ primitive = DilateMorphology;
break;
case DilateIntensityMorphology:
case CloseIntensityMorphology:
if (curr_kernel == (KernelInfo *) NULL)
goto error_cleanup;
RotateKernelInfo(curr_kernel,180);
- primative = DilateIntensityMorphology;
+ primitive = DilateIntensityMorphology;
break;
case HitAndMissMorphology:
- primative = HitAndMissMorphology;
+ primitive = HitAndMissMorphology;
loop_limit = 1; /* iterate only once */
kernel_compose = LightenCompositeOp; /* Union of Hit-And-Miss */
break;
case ThickenMorphology:
case DistanceMorphology: /* Distance should never use multple kernels */
case UndefinedMorphology:
- primative = method;
+ primitive = method;
break;
}
#endif
/* Initialize compound morphology stages */
- count = 0; /* number of low-level morphology primatives performed */
+ count = 0; /* number of low-level morphology primitives performed */
total_changed = 0; /* total number of pixels changed thoughout */
stage = 1; /* the compound morphology stage number */
#if 1
/* Extra information for debugging compound operations */
- if ( verbose == MagickTrue && primative != method )
+ if ( verbose == MagickTrue && primitive != method )
fprintf(stderr, "Morphology %s: Stage %lu %s%s (%s)\n",
MagickOptionToMnemonic(MagickMorphologyOptions, method), stage,
- MagickOptionToMnemonic(MagickMorphologyOptions, primative),
+ MagickOptionToMnemonic(MagickMorphologyOptions, primitive),
( curr_kernel == kernel) ? "" : "*",
( kernel_compose == NoCompositeOp ) ? "iterate"
: MagickOptionToMnemonic(MagickComposeOptions, kernel_compose) );
}
}
- /* morphological primative curr -> work */
+ /* morphological primitive curr -> work */
count++;
- changed = MorphologyPrimative(curr_image, work_image, primative,
+ changed = MorphologyPrimative(curr_image, work_image, primitive,
channel, this_kernel, bias, exception);
loop_changed += changed;
total_changed += changed;
if ( verbose == MagickTrue )
fprintf(stderr, "Morphology %s:%lu.%lu #%lu => Changed %lu\n",
- MagickOptionToMnemonic(MagickMorphologyOptions, primative),
+ MagickOptionToMnemonic(MagickMorphologyOptions, primitive),
loop, kernel_number, count, changed);
/* prepare next loop */
if ( verbose == MagickTrue && kernel->next != NULL )
fprintf(stderr, "Morphology %s:%lu #%lu ===> Changed %lu Total %lu\n",
- MagickOptionToMnemonic(MagickMorphologyOptions, primative),
+ MagickOptionToMnemonic(MagickMorphologyOptions, primitive),
loop, count, loop_changed, total_changed );
}
}
}
}
- /* morphological primative curr -> work */
+ /* morphological primitive curr -> work */
count++;
- changed = MorphologyPrimative(curr_image,work_image,primative,
+ changed = MorphologyPrimative(curr_image,work_image,primitive,
channel, this_kernel, bias, exception);
loop_changed += changed;
total_changed += changed;
if ( verbose == MagickTrue )
fprintf(stderr, "Morphology %s:%lu.%lu #%lu => Changed %lu\n",
- MagickOptionToMnemonic(MagickMorphologyOptions, primative),
+ MagickOptionToMnemonic(MagickMorphologyOptions, primitive),
loop, kernel_number, count, changed);
/* prepare next loop */
if ( verbose == MagickTrue && kernel->next != NULL && loop_limit > 1 )
fprintf(stderr, "Morphology %s:%lu #%lu ===> Changed %lu Total %lu\n",
- MagickOptionToMnemonic(MagickMorphologyOptions, primative),
+ MagickOptionToMnemonic(MagickMorphologyOptions, primitive),
loop, count, loop_changed, total_changed );
#if 0
}
/* Compound Morphology Operations
- * set next 'primative' iteration, and continue
+ * set next 'primitive' iteration, and continue
* or break when all operations are complete.
*/
stage++; /* what is the next stage number to do */
switch ( stage ) {
/* case 1: initialized above */
case 2: /* open part 2 */
- primative = DilateMorphology;
+ primitive = DilateMorphology;
continue;
case 3: /* close part 1 */
curr_kernel = CloneKernelInfo(kernel);
RotateKernelInfo(curr_kernel,180);
continue;
case 4: /* close part 2 */
- primative = ErodeMorphology;
+ primitive = ErodeMorphology;
continue;
}
break;
case OpenMorphology: /* erode, dilate */
case TopHatMorphology:
- primative = DilateMorphology;
+ primitive = DilateMorphology;
if ( stage <= 2 ) continue;
break;
case OpenIntensityMorphology:
- primative = DilateIntensityMorphology;
+ primitive = DilateIntensityMorphology;
if ( stage <= 2 ) continue;
break;
case CloseMorphology: /* dilate, erode */
case BottomHatMorphology:
- primative = ErodeMorphology;
+ primitive = ErodeMorphology;
if ( stage <= 2 ) continue;
break;
case CloseIntensityMorphology:
- primative = ErodeIntensityMorphology;
+ primitive = ErodeIntensityMorphology;
if ( stage <= 2 ) continue;
break;
case EdgeMorphology: /* dilate and erode difference */
if (stage <= 2) {
save_image = curr_image;
curr_image = (Image *) image;
- primative = ErodeMorphology;
+ primitive = ErodeMorphology;
continue;
}
break;
/* Yes goto's are bad, but in this case it makes cleanup lot more efficient */
error_cleanup:
if ( curr_image != (Image *) NULL && curr_image != image )
- DestroyImage(curr_image);
+ (void) DestroyImage(curr_image);
exit_cleanup:
if ( work_image != (Image *) NULL )
- DestroyImage(work_image);
+ (void) DestroyImage(work_image);
if ( save_image != (Image *) NULL )
- DestroyImage(save_image);
+ (void) DestroyImage(save_image);
return(curr_image);
}
\f
fprintf(stderr, "Kernel ");
if ( kernel->next != (KernelInfo *) NULL )
- fprintf(stderr, " #%ld", c );
+ fprintf(stderr, " #%lu", c );
fprintf(stderr, " \"%s",
MagickOptionToMnemonic(MagickKernelOptions, k->type) );
if ( fabs(k->angle) > MagickEpsilon )
GetMagickPrecision(), k->positive_range,
/*kernel->normalized == MagickTrue ? " (normalized)" : */ "" );
for (i=v=0; v < k->height; v++) {
- fprintf(stderr,"%2ld:",v);
+ fprintf(stderr,"%2lu:",v);
for (u=0; u < k->width; u++, i++)
if ( IsNan(k->values[i]) )
fprintf(stderr," %*s", GetMagickPrecision()+2, "nan");