Найти шаблон объекта в массиве в C # - PullRequest
4 голосов
/ 27 ноября 2010

Я ищу эффективный способ найти шаблон объекта в массиве. Вот проблема, которую я должен решить. Я пишу осязаемое интерфейсное приложение, которое собирает данные с веб-камеры, преобразует их в черно-белое изображение, из которого я создаю массив. Созданный массив выглядит примерно так:

1111111111111111111111111111
1111110001111111111000111111
1111100000111111110000011111
1111100000111111110000011111
1111110001111111111000111111
1111111111111111111111111111

Где нули представляют черный цвет на изображении. У меня около 32 (4 ряда по 8 окружностей в каждом) кругов, и мне нужно найти эффективный способ найти их координаты. Мне не нужна вся форма, только набор координат для каждого круга.

Спасибо за помощь.

С уважением, Теодор Стоянов

Ответы [ 3 ]

1 голос
/ 28 ноября 2010

Выберите произвольный 0 и выполните заливку из него. Усредните координаты всех 0, которые вы найдете, чтобы получить центр круга. Сотрите 0, которые вы залили и повторите.

1 голос
/ 27 ноября 2010

Три варианта, которые я вижу сразу (Tuple используется для представления координат в вашей матрице):

  1. Вы можете использовать BitArray для В каждой точке матрицы бит устанавливается, если у координаты есть O, стоимость будет O (длина строки x длина столбца) для хранения. Извлечение - O (1), если вы знаете координаты, которые хотите проверить в противном случае, O (n), если вы просто хотите найти все O *

  2. Вы можете использовать List<Tuple<int,int>> хранить только координаты для каждый O в матрице, стоимость будет O (m) для хранения, m - количество O. Извлечение также O (м)

  3. В качестве альтернативы варианту 2 вы можете используйте Dictionary<Tuple<int, int>, bool>, что позволяет получить O (1) время, если вы знаете координаты вы хочу проверить.

0 голосов
/ 27 ноября 2010

Там действительно нет простого способа сделать это, но лучшее, что вы можете сделать, это возиться с Искусственными нейронными сетями . Они позволяют вводить данные и получать выходные данные по множеству различных входных данных. Если вы правильно построите сеть, она будет самонастраивать свои веса на протяжении многих итераций.

Извините, но я сомневаюсь, что вы получите точное решение, изложенное для вас в коде. Хотя я не использовал ни одну из этих библиотек или ресурсов, быстрый взгляд на них заставляет их выглядеть довольно прилично:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...