У меня проблема:Сортировка 2d точек в матрице
Изображение дано, и я выполняю обнаружение blob. Как предел, скажем, у меня максимум 16 капли, и из каждого блоба я вычисляю центроид (положение x, y). Если никакие искажения не происходят, эти центроиды расположены в эквидистантной сетке 4x4, но они могут быть сильно искажены. Предполагается, что они сохраняют более или менее форму сетки, но они могут быть сильно искажены.
Мне нужно отсортировать капли, чтобы я знал, какой из них ближайший слева, справа, вверх и вниз. Поэтому лучше всего написать эти капли в матрицу.
Если этого недостаточно, может случиться, что я обнаружил менее 16, а затем мне также нужно отсортировать их в матрице.
Кто-нибудь знает, как это можно было бы эффективно решить в Matlab?
Спасибо.
[обновление 1:]
Я загрузил изображение и красные цифры числа, которые мой алгоритм обнаружения блоб присваивают каждый блоб.
Полученная матрица должна выглядеть следующим образом с этими числами:
1 2 4 3
6 5 7 8
9 10 11 12
13 16 14 15
например Я начинаю с сгустком 11 и ближайший правый номер 12 и так далее
[обновление 2:]
Опубликованным решение выглядит довольно хорошо. На самом деле это может случиться, что одно из внешних пятен отсутствует или может быть два ... Я знаю, что это делает все намного сложнее, и я просто хочу получить представление, если это стоит потратить время.
Эти проблемы возникают, если вы анализируете волновой фронт с датчиком волнового фронта shack-hartmann и хотите увеличить динамический диапазон :-) Пункты могут быть действительно искажены, так что разделительные линии больше не ортогональны.
Возможно, кто-то знает хорошую литературу для алгоритмов классификации.
Лучшим решением будет одно, которое может быть реализовано на FPGA без особых усилий, но на данном этапе это не так важно.
(я не оригинальный Аскер) интересно - но как надежный это от искажений? – bdecaf
@bdecaf Я добавил несколько примеров для поворота и наклонных сеток. – Justin