На этот вопрос можно ответить на любом языке программирования, потому что мне нужна помощь с алгоритмами, но я предпочитаю Delphi. У меня есть задача обнаруживать и подсчитывать несколько форм (от 1 до N - в основном круглые или Elipse) случайных изображений, вычислять их середину и возвращать их как координаты изображения. Середина каждой формы может иметь заливку (но это не имеет значения). Фигуры находятся на расстоянии не менее 1 пикселя друг от друга. Ни одна из форм не будет сливаться с другой или уголком изображения. Фон изображения всегда имеет один и тот же цвет фона, что на самом деле не имеет значения, потому что границы / рамки фигур всегда имеют другой цвет по сравнению с фоном. Это упрощает обнаружение форм. Я думал о том, чтобы идти пиксель за пикселем и собирать координаты, а затем рисовать невидимым прямоугольником / квадратом вокруг каждой формы, чтобы вычислить середину. Потом я тоже услышал про scanline, но не думаю, что в этом случае он будет быстрее. Итак, у меня вопрос, как я могу рассчитать:
- Сколько фигур на картинке.
- Как я могу вычислить (более или менее) точную середину из них.
Несколько картинок для визуализации задачи:
Это изображение со случайными формами (в основном тесными кругами). Как вы можете видеть, они отлично расположены друг от друга.
Тогда я мог бы легко нарисовать / вычислить воображаемый прямоугольник / квадрат вокруг каждой формы и вычислить его середину следующим образом:
После того, как у меня есть прямоугольники / квадраты. Я легко могу вычислить середину. Как мне начать?
PS: Я нарисовал несколько кружков в mspaint. Я должен добавить, что все формы ЗАКРЫТЫ, что позволяет без проблем заливать ЛЮБУЮ форму на картинке!
Спасибо за помощь.
ComponentMeasurements[FillingTransform[Closing[Import["http://i.stack.imgur.com/m1pjE.jpg"], DiskMatrix[3]]], {"Centroid", "BoundingBox"}]
, и самый конечный результат - это просто наложение этих результатов на исходное изображение. - person mmgp   schedule 12.01.2013