Проблема состоит из двух частей:
- Разделить точки данных на два набора; те, что лежат на левой линии, и те, которые лежат на правой.
- Проведите линию через каждый из двух наборов.
Вторая проблема проста и имеет стандартное решение: выровнять линию, используя линейные наименьшие квадраты.
Способ решения первой проблемы будет зависеть от специфики вашего приложения. Вот один очень простой алгоритм, который будет хорошо работать при условии, что число точек данных, n, не слишком велико: просто сделайте линейные наименьшие квадраты для первых точек i и последних точек n для i от 2 до n-2, и оставьте единицу с наименьшей суммой квадратов невязок.
Если n очень велико и вышеупомянутый подход неэффективен, вам придется взглянуть на дискретные вторые производные, как это предлагается в других опубликованных ответах. Обратите внимание, что в отличие от наименьших квадратов аппроксимации производных чрезвычайно чувствительны даже к небольшому количеству шума.
Как только у вас есть две подходящие линии, вы можете использовать некоторые эвристические методы (т. Е. Уклоны различаются менее чем на некоторое отклонение), чтобы определить, имеется ли у вас однострочный специальный случай.