Нахождение круга в предметах, соприкасающихся друг с другомC#

Место общения программистов C#
Ответить
Anonymous
 Нахождение круга в предметах, соприкасающихся друг с другом

Сообщение Anonymous »

Я работаю над приложением для измерения радиуса круга. Цилиндр помещен на 2 опорных куска пластика. Когда я приближаю изображение, опорные детали становятся частью цилиндра. Я пытался использовать обнаружение контуров и использовать минимальные окружающие круги, чтобы найти самый большой и второй по величине объект, но внешний круг всегда неверен из-за поддерживающих объектов. Я использую C# и emgucv. Морфологические операции не сработают, поскольку повредят края круга и измерения будут неверными. Как правильно обнаружить и измерить круг? Любое решение на Python и OpenCV также подойдет.
Вот код:

Код: Выделить всё

 VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
CvInvoke.FindContours(binaryimg, contours, null, RetrType.Tree,
ChainApproxMethod.ChainApproxNone);
VectorOfPoint largestContour = null;
VectorOfPoint secondLargestContour = null;
double maxArea = 0;
double secondMaxArea = 0;

if (contours.Size < 2)
{
Console.WriteLine("Not enough contours found to detect both OD and ID.");

}

for (int i = 0; i < contours.Size; i++)
{
using (VectorOfPoint contour = contours[i])

{
double area = CvInvoke.ContourArea(contour);

if (area > maxArea)
{
secondMaxArea = maxArea;
secondLargestContour = largestContour;
maxArea = area;
largestContour = contour;
}
else if (area > secondMaxArea)
{
secondMaxArea = area;
secondLargestContour = contour;
}
}
}

if (largestContour != null && secondLargestContour !=null)
{
CircleF outerCircle = CvInvoke.MinEnclosingCircle(largestContour);
CircleF innerCircle = CvInvoke.MinEnclosingCircle(secondLargestContour);
}
Вот что я получаю:
[img]https://i.sstatic. net/otMelBA4.png[/img]

Вот исходное изображение:
[img]https://i.sstatic. net/8eQiu1TK.jpg[/img]


Подробнее здесь: https://stackoverflow.com/questions/789 ... each-other
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»