Мне нужно определить радиус черного круга / овала этого изображения. Я пытался использовать методы Houghcircles и Canny, но каждый раз он выводит больше кругов. Исходное изображение .
Это круг, который я ожидаю обнаружить. Ожидаемое изображение
public static Mat FindCircle(Mat img)
{
Mat canny = new Mat();
UMat grayscale = new UMat();
UMat pyrdown = new UMat();
double cannyThreshold = 128;
// Grayscaling image
CvInvoke.CvtColor(img, grayscale, ColorConversion.Bgr2Gray);
// remove noise and run edge detection
CvInvoke.PyrDown(grayscale, pyrdown);
CvInvoke.PyrUp(pyrdown, grayscale);
CvInvoke.Imshow("Blur", grayscale);
CvInvoke.Canny(grayscale, canny, cannyThreshold, cannyThreshold*2);
CvInvoke.Imshow("Canny", canny);
Image<Bgr, Byte> output =img.ToImage<Bgr, Byte>();
// find and draw circles
VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
CvInvoke.FindContours(canny, contours, null, RetrType.List, ChainApproxMethod.ChainApproxSimple);
//CvInvoke.Imshow("Contours", contours);
//CvInvoke.DrawContours(result, contours, -1, new MCvScalar(0, 0, 255));
for (int i = 0; i < contours.Size; i++)
{
try
{
Ellipse ellipse = new Ellipse(CvInvoke.FitEllipse(contours[i]));
output.Draw(ellipse, new Bgr(Color.Red), 1);
}
catch(Exception ex)
{
}
}
}