Это действительно проблема статистического вывода в сочетании с уменьшением шума. Это метод, который я собираюсь опробовать в ближайшее время. Я предполагаю, что вы пытаетесь получить равномерно расположенную двумерную сетку, но аналогичный метод может работать с равномерно распределенной сеткой 3 или более измерений.
Сначала перечислите все различия и обратите внимание, что (dx, dy) и (-dx, -dy) обозначают одно и то же смещение, поэтому существует отношение эквивалентности. Сгруппируйте те различия, которые находятся в пределах заранее заданного порога (эпсилон) друг друга. Эпсилон должен быть достаточно большим, чтобы фиксировать ошибки измерения из-за случайного шума или отсутствия разрешения изображения, но достаточно маленьким, чтобы случайно не объединить кластеры.
Сортировка кластеров по их среднему размеру (dr = root (dx ^ 2 + dy ^ 2)).
Если исходная сетка действительно регулярно располагалась и генерировалась двумя независимыми базисными векторами, то два наименьших линейно независимых кластера будут указывать на это. Наименьший кластер - это центр с центром в (0, 0). Следующий наименьший кластер (dx0, dy0) имеет первый базисный вектор до знака +/- (-dx0, -dy0) обозначает то же смещение, напомним.
Следующие наименьшие кластеры могут линейно зависеть от этого (вплоть до порогового значения эпсилон) в силу кратности (dx0, dy0). Найдите наименьший кластер, который НЕ кратен (dx0, dy0). Назовите это (dx1, dy1).
Теперь у вас достаточно пометить оригинальные векторы. Сгруппируйте вектор, увеличив лексикографический порядок (x, y)> (x ', y'), если x> x 'или x = x' и y> y '. Возьмите наименьшее (x0, y0) и присвойте ему целое число (0, 0). Возьмите все остальные (x, y) и найдите разложение (x, y) = (x0, y0) + M0 (x, y) (dx0, dy0) + M1 (x, y) (dx1, dy1) и присвойте это целые числа (m0 (x, y), m1 (x, y)) = (round (M0), round (M1)).
Теперь подгоняем целые числа наименьших квадратов к векторам уравнений (x, y) = (ux, uy) m0 (x, y) (u0x, u0y) + m1 (x, y) (u1x , u1y)
найти (ux, uy), (u0x, u0y) и (u1x, u1y). Это идентифицирует сетку.
Проверьте это совпадение, чтобы определить, все ли точки находятся в пределах заданного порога этого соответствия (возможно, для этой цели используется один и тот же порог эпсилон).
1-D версия этой же процедуры должна также работать в одном измерении на спектрографе, чтобы идентифицировать основную частоту в голосовом отпечатке. Только в этом случае предполагаемое значение для ux (которое заменяет (ux, uy)) равно 0, и нужно только найти соответствие однородному уравнению x = m0 (x) u0x.