Итак, у меня есть задание: использовать модификацию алгоритма Крускала для разделения изображения на регионы и определить, какие из них являются кругами и печатать их радиусы.Как проверить, является ли регион кругом?
Поиск регионов относительно прост, я сделал это. Однако найти круги сложнее. Моя идея - найти все граничные точки региона, найти среднюю точку - возможный центр этого круга - и вычислить расстояния между каждой граничной точкой и «центром». Тогда, если они не сильно отличаются друг от друга, это действительно круг.
Прежде всего, это даже жизнеспособно? Во-вторых, этот метод также распознает очень тонкие кольца в виде кругов, и я не хочу этого. Как это исправить?
UPD: Как эффективно найти граничные точки? Последний слой BFS? Точки с менее чем 6 соседями (мне кажется, что-то вроде bruteforce)?
Вы также можете проверить, соответствует ли количество точек окружности '2 * Pi * r', где' r' - радиус в пикселях (половина размера ограничительной рамки) ... нет необходимости проверять расстояние для всех точек. . То же самое касается области ... Также взгляните на http://stackoverflow.com/a/37858301/2521214 – Spektre
Ограничивающий прямоугольник абсолютно не устойчив, например, тонкая линия, обнаруженная в регионе, сделает ограничительную рамку намного больше и приведет к сбою обнаружения круга. – galinette