IPSDK 4.1
IPSDK : Image Processing Software Development Kit
Computation of accumulator matrix for Hough circles detection
imagehoughCircles2dImg (inGxImg,inGyImg,radiusRange)

Detailed Description

computes the accumulator matrix used by the Hough circles detector ("gradient" method)

This algorithm computes, from the 2 gradient images (respectively along x and y axis) of the same grey levels 2d image, the accumulator matrix used to detect circles in an image, using Hough algorithm ("gradient" method).

See Hough circles detection for more information.

Below is an example of image returned by the algorithm on gradient images computed from an image of coins. We can see that positions of high local maxima in accumulation matrix correspond to positions of centers of circles in the original image:

houghCircles2dImg.png

Example of Python code :

Example imports

import PyIPSDK
import PyIPSDK.IPSDKIPLFeatureDetection as fd
import PyIPSDK.IPSDKIPLFiltering as filter

Code Example

# opening of input image
inImg = PyIPSDK.loadTiffImageFile(inputImgPath)
# associated gradient images computation
gxImg, gyImg = filter.gaussianGradient2dImg(inImg, 1.0)
# radius range detection definition
radiusRange = PyIPSDK.createHoughCirclesRadiusRange(15, 20)
# hough circle detection computation
outImg = fd.houghCircles2dImg(gxImg, gyImg, radiusRange)

Example of C++ code :

Example informations

Header file

#include <IPSDKIPL/IPSDKIPLFeatureDetection/Processor/HoughCircles2dImg/HoughCircles2dImg.h>

Code Example

#include <IPSDKImageFile/Tiff/TiffImageFileUtils.h>
#include <IPSDKIPL/IPSDKIPLFeatureDetection/Processor/HoughCircles2dImg/HoughCircles2dImg.h>
// function returning the accumulation image used by Hough circle detector
// ("gradient" method) applied on an input image loaded from a given file to
// detect circles of radii belonging to a given range
ImagePtr
computeHoughCircles2dImage(
const std::string& inImgFilePath,
ipUInt64 nMinRadius,
ipUInt64 nMaxRadius)
{
// load input image from file specified by the user
ipsdk::image::ImagePtr pInImg =
// compute gradient images, in x and y
GradientXYImg gxyImg =
gaussianGradient2dImg(pInImg, 1.0f, 1.0f, createGaussianCoverage(0.997f, 2));
ImagePtr pInGxImg = gxyImg._pXGradImg;
ImagePtr pInGyImg = gxyImg._pYGradImg;
// apply Hough circles detection on gradient images
ImagePtr pAccumulationImg =
ipsdk::imaproc::fd::houghCircles2dImg(
pInGxImg,
pInGyImg,
// return the accumulation image
return pAccumulationImg;
}