'**SUMMARY**
Perform the Hough Circle transform to extract _perfect_ circles from the image
canny - the upper bound on a canny edge detector used to find circle edges.
**PARAMETERS**
* *thresh* - the threshold at which to count a circle. Small parts of a circle get
added to the accumulator array used internally to the array. This value is the
minimum threshold. Lower thresholds give more circles, higher thresholds give fewer circles.
.. ::Warning:
If this threshold is too high, and no circles are found the underlying OpenCV
routine fails and causes a segfault.
* *distance* - the minimum distance between each successive circle in pixels. 10 is a good
starting value.
**RETURNS**
A feature set of Circle objects.
**EXAMPLE**
>>> img = Image("lenna")
>>> circs = img.findCircles()
>>> for c in circs:
>>>    print c'

def findCircle(self, canny=100, thresh=350, distance=(-1)):

    storage = cv.CreateMat(self.width, 1, cv.CV_32FC3)
    if (distance < 0):
        distance = (1 + (max(self.width, self.height) / 50))
    cv.HoughCircles(self._getGrayscaleBitmap(), storage, cv.CV_HOUGH_GRADIENT, 2, distance, canny, thresh)
    if (storage.rows == 0):
        return None
    circs = np.asarray(storage)
    sz = circs.shape
    circleFS = FeatureSet()
    for i in range(sz[0]):
        circleFS.append(Circle(self, int(circs[i][0][0]), int(circs[i][0][1]), int(circs[i][0][2])))
    return circleFS
