Каков наиболее эффективный способ определить, являются ли два отрезка частью одного и того же отрезка в пределах допуска?

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

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

Скажем, у меня есть отрезкиf(fx0, fy0)и (fx1, fy1)иg(gx0, gy0)и(gx1, gy1)

Они исходят от чего-то вроде детектора границ алгоритма компьютерного зрения -, и в некоторых случаях две линии в основном одинаковы,но считаются двумя отдельными линиями из-за допусков пикселей.

Есть несколько сценариев

  • fи gимеют одни и те же конечные точки, например:f = (0,0), (10,10) g = (0,0), (10,10)
  • fи gимеют примерно одинаковые конечные точки и примерно одинаковую длину, например:f = (0,0.01), (9.95,10) g = (0,0), (10,10)
  • fявляется подмножеством g, что означает, что его конечные точки попадают в сегмент gи имеют тот же наклон, что и сегмент g. Подумайте о грубо нарисованной линии, по которой перо двигалось вперед и назад, чтобы сделать ее толще. например:f = (4.00, 4.02), (9.01, 9.02) g = (0,0), (10,10)

Следующее будет не считаться одним и тем же:

  • fи gимеют разность наклонов за пределами определенногоtolerance
  • fи gмогут иметь одинаковый наклон, но разделены расстоянием за пределами tolerance, т. е. параллельными линиями
  • fи gнаходятся в одной плоскости и на одном склоне, но совершенно не пересекаются... т.е. набор сегментов внутри пунктирной линии.

Самый простой способ узнать, одинаковы ли они, это еслиgx1 - fx1 <= tolerance(повторить для трех других точек ), но в некоторых случаях линия fможет быть короче линииg(опять же, из-за различий в пикселях и/или плохого сканирования фотографий ).

Так что лучше преобразовать два сегмента в полярные координаты и сравнить углы? В этом случае два ро будут в пределах допуска. Но тогда вы должны убедиться, что два сегмента линии имеют одно и то же «направление», которое тривиально вычислить в декартовых или полярных координатах.

Так что это легко понять, но мне просто интересно, есть ли более чистый способ, основанный на линейной алгебре, которую я давно забыл?

6
задан Abid Rahman K 11 July 2012 в 11:06
поделиться