Encuentra círculos superpuestos / complejos con OpenCV

Quiero calcular el radio de los círculos rojos (figura 2). Tengo problemas para encontrar estos círculos con HoughCircles de OpenCV. Como puedes ver en la fig. 2 Solo puedo encontrar los pequeños círculos en el centro que se muestran en negro usando HoughCircles.

original Figura 2.

Como conozco el centro de los círculos rojos (que son los mismos que los rojos), ¿hay alguna manera de calcular simplemente el radio de los círculos rojos?

¿También es posible tener una forma genérica de calcular el radio de los círculos en una imagen más compleja como esta:

Editar: Aquí la parte interesante de mi código después de obtener la figura 2:

threshold(maskedImage, maskedImage, thresh, 255, THRESH_BINARY_INV | THRESH_OTSU);
    std::vector<Vec3f> circles;
// Canny(maskedImage, maskedImage, thresh, thresh * 2, 3);

HoughCircles(maskedImage, circles, CV_HOUGH_GRADIENT, 1, src_gray.rows / 4, cannyThreshold, accumulatorThreshold, 0, 0);

Mat display = src_display.clone();
for (size_t i = 0; i < circles.size(); i++)
{
    Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
    int radius = cvRound(circles[i][2]);
    // circle center
    circle(display, center, 3, Scalar(0, 255, 0), -1, 8, 0);
    // circle outline
    circle(display, center, radius, Scalar(0, 0, 255), 3, 8, 0);
}

He intentado usar play con cannyThreshold y el acumulador sin resultados. Las imágenes reales son 5 veces más grandes. aquíun enlace por ejemplo 1 después del umbral.

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta