% %
% %
% %
-% H o u g h T r a n s f o r m I m a g e %
+% H o u g h L i n e s I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% HoughTransformImage() detects lines in an image.
+% HoughLinesImage() identifies lines in an image.
%
-% The format of the HoughTransformImage method is:
+% The format of the HoughLinesImage method is:
%
-% Image *HoughTransformImage(const Image *image,const size_t width,
+% Image *HoughLinesImage(const Image *image,const size_t width,
% const size_t height,const size_t threshold,ExceptionInfo *exception)
%
% A description of each parameter follows:
% o exception: return any errors or warnings in this structure.
%
*/
-MagickExport Image *HoughTransformImage(const Image *image,const size_t width,
+MagickExport Image *HoughLinesImage(const Image *image,const size_t width,
const size_t height,const size_t threshold,ExceptionInfo *exception)
{
return((Image *) NULL);
extern MagickExport Image
*CannyEdgeImage(const Image *,const double,const double,const double,
const double,ExceptionInfo *),
- *HoughTransformImage(const Image *,const size_t,const size_t,const size_t,
+ *HoughLinesImage(const Image *,const size_t,const size_t,const size_t,
ExceptionInfo *);
#if defined(__cplusplus) || defined(c_plusplus)
if ((LocaleCompare("help",option+1) == 0) ||
(LocaleCompare("-help",option+1) == 0))
return(ConvertUsage());
+ if (LocaleCompare("hough-lines",option+1) == 0)
+ {
+ if (*option == '+')
+ break;
+ i++;
+ if (i == (ssize_t) (argc-1))
+ ThrowConvertException(OptionError,"MissingArgument",option);
+ if (IsGeometry(argv[i]) == MagickFalse)
+ ThrowConvertInvalidArgumentException(option,argv[i]);
+ break;
+ }
ThrowConvertException(OptionError,"UnrecognizedOption",option)
}
case 'i':
(void) SetImageArtifact(*image,option+1,argv[i+1]);
break;
}
+ if (LocaleCompare("hough-lines",option+1) == 0)
+ {
+ /*
+ Detect edges in the image.
+ */
+ (void) SyncImageSettings(mogrify_info,*image,exception);
+ flags=ParseGeometry(argv[i+1],&geometry_info);
+ if ((flags & SigmaValue) == 0)
+ geometry_info.sigma=geometry_info.rho;
+ mogrify_image=HoughLinesImage(*image,(size_t) geometry_info.rho,
+ (size_t) geometry_info.sigma,(size_t) geometry_info.xi,exception);
+ break;
+ }
break;
}
case 'i':
{ "CannyEdge", { {"geometry", StringReference},
{"radius", RealReference}, {"sigma", RealReference},
{"lower-percent", RealReference}, {"upper-percent", RealReference} } },
+ { "HoughLines", { {"geometry", StringReference},
+ {"width", IntegerReference}, {"height", IntegerReference},
+ {"threshold", IntegerReference} } },
};
static SplayTreeInfo
GrayscaleImage = 276
CannyEdge = 278
CannyEdgeImage = 279
+ HoughLines = 280
+ HoughLinesImage = 281
MogrifyRegion = 666
PPCODE:
{
(void) SetImageChannelMask(image,channel_mask);
break;
}
+ case 139: /* HoughLines */
+ {
+ if (attribute_flag[0] != 0)
+ {
+ flags=ParseGeometry(argument_list[0].string_reference,
+ &geometry_info);
+ if ((flags & SigmaValue) == 0)
+ geometry_info.sigma=geometry_info.rho;
+ }
+ if (attribute_flag[1] != 0)
+ geometry_info.rho=(double) argument_list[1].integer_reference;
+ if (attribute_flag[2] != 0)
+ geometry_info.sigma=(double) argument_list[2].integer_reference;
+ if (attribute_flag[3] != 0)
+ geometry_info.xi=(double) argument_list[3].integer_reference;
+ image=HoughLinesImage(image,(size_t) geometry_info.rho,(size_t)
+ geometry_info.sigma,(size_t) geometry_info.xi,exception);
+ break;
+ }
}
if (next != (Image *) NULL)
(void) CatchImageException(next);
{ "CannyEdge", { {"geometry", StringReference},
{"radius", RealReference}, {"sigma", RealReference},
{"lower-percent", RealReference}, {"upper-percent", RealReference} } },
+ { "HoughLines", { {"geometry", StringReference},
+ {"width", IntegerReference}, {"height", IntegerReference},
+ {"threshold", IntegerReference} } },
};
static SplayTreeInfo
GrayscaleImage = 276
CannyEdge = 278
CannyEdgeImage = 279
+ HoughLines = 280
+ HoughLinesImage = 281
MogrifyRegion = 666
PPCODE:
{
(void) SetImageChannelMask(image,channel_mask);
break;
}
+ case 139: /* HoughLines */
+ {
+ if (attribute_flag[0] != 0)
+ {
+ flags=ParseGeometry(argument_list[0].string_reference,
+ &geometry_info);
+ if ((flags & SigmaValue) == 0)
+ geometry_info.sigma=geometry_info.rho;
+ }
+ if (attribute_flag[1] != 0)
+ geometry_info.rho=(double) argument_list[1].integer_reference;
+ if (attribute_flag[2] != 0)
+ geometry_info.sigma=(double) argument_list[2].integer_reference;
+ if (attribute_flag[3] != 0)
+ geometry_info.xi=(double) argument_list[3].integer_reference;
+ image=HoughLinesImage(image,(size_t) geometry_info.rho,(size_t)
+ geometry_info.sigma,(size_t) geometry_info.xi,exception);
+ break;
+ }
}
if (next != (Image *) NULL)
(void) CatchImageException(next);