Предположим, что я хочу найти трехмерную позицию чашки с ее вращением, с вводом изображения, подобным этому (эту чашку можно вращать, чтобы указывать в любом направлении): ![enter image description here](https://i.stack.imgur.com/grXNq.png)
Учитывая, что у меня есть набор двухмерных точек, задающих верхний и нижний кружок, как показано на следующем рисунке. (Предположим, что эти точки даны человеком, который рисует линии вокруг чашки, поэтому он не будет очень точным. Для восстановления хорошего приближения может потребоваться подгонка по эллипсу или SolvePnP. И нижний круг не является полным кругом, это просто часть круга. Иногда верхняя часть также закрывается, поэтому мы не можем полагать, что будет полный круг) ![enter image description here](https://i.stack.imgur.com/CHflg.png)
Я также знаю физический радиус верхний и нижний круг, а также расстояние между ними с помощью линейки, чтобы измерить их заранее.
Я хочу найти полные 2 круга, как показано на следующем рисунке (думаю, мне нужно найти положение чашки и направление ее вверх, прежде чем я смогу проецировать полные круги):
![enter image description here](https://i.stack.imgur.com/fiZSj.png)
Допустим, моя конечная цель - найти ближайшую двухмерную верхнюю точку и ближайшую двухмерную нижнюю точку, учитывая двухмерную точку сбоку чашки, как показано ниже. изображение:
![enter image description here](https://i.stack.imgur.com/W3kGL.png)
Точка также может быть внутри чашки, например: ![enter image description here](https://i.stack.imgur.com/scUf4.png)
Давайте определим distance(a, b)
как функцию, которая находит евклидово расстояние от точки a
и точки b
в пиксельных единицах.
Исходя из этого, я смогу вычислить distance(side point, bottom point) / distance(top point, bottom point)
, который будет шкалой число от 0 до 1, если я умножу это число на физическую высоту чашки, измеренную линейкой, то я буду знать, насколько высока точка от дна чашки в метрических единицах c.
Какой метод я могу использовать, чтобы найти соответствующие верхнюю и нижнюю точки заданной точки сбоку, чтобы я наконец смог определить высоту точки от дна чашки?
Я думаю об использовании PnP для решения этой проблемы, но мои точки не имеют правильных идентификаторов связан с ними. И я не хочу знать точное вращение чашки, я хочу знать только направление вверх чашки. Я также думаю, что подгонка эллипса может несколько помочь, но, возможно, это не самое лучшее, потому что круг не завершен. Если у вас есть какие-либо предложения, скажите, пожалуйста, как получить высоту точки от нижней части чашки .