Я не думаю, что наименьший квадрат даст правильное решение здесь.Наименьший квадрат гарантирует, что сумма квадратов ошибок для всех точек станет минимальной.Это не гарантирует, что линия должна лежать на точках.Может случиться так, что точки имеют высокую дисперсию, и вы получите прямую середину, не касающуюся ни одной точки.
То, как я вижу проблему, может быть решено более простым способом
Найдите линию
Найдите все уклоны и перехват для каждой пары на плоскости.Линия, созданная таким образом, используя наклон и точку пересечения, может иметь количество точек в этом.Вы можете сохранить каждое такое уравнение линии вместе с точками, которые лежат на них, а затем найти линию, на которой находится максимальное количество точек.Может быть использовать хеш-таблицу, хранящую уравнение и лежащие на нем точки, чтобы найти максимальную линию.
Вероятно, это будет O (n ^ 3), так как вы создаете линию и проверяете для каждой точки,который находится на линии или нет ..
Преобразование Хафа
Эффективным способом, вероятно, является использование Преобразование Хафа .Это выполняется за линейное время.
Каждая 2-мерная точка отображается на кривую в пространстве грубых параметров ... мы дискретизируем пространство грубых параметров на MxN, если у нас есть K точек, затем перечисление всех точек занимает время O (KN)мы находим максимум в пространстве параметров (это можно сделать в кратчайшие сроки при перечислении), поэтому в целом он может быть линейным, хотя я не совсем уверен в этом.
RANSAC
Я также нашел один хороший ресурс о RANSAC Алгоритме, который похож на выполнение аналогичной работы.Может быть, это может помочь /