Нахождение высоты точки на чашке с помощью OpenCV - PullRequest
0 голосов
/ 12 января 2020

Предположим, что я хочу найти трехмерную позицию чашки с ее вращением, с вводом изображения, подобным этому (эту чашку можно вращать, чтобы указывать в любом направлении): enter image description here

Учитывая, что у меня есть набор двухмерных точек, задающих верхний и нижний кружок, как показано на следующем рисунке. (Предположим, что эти точки даны человеком, который рисует линии вокруг чашки, поэтому он не будет очень точным. Для восстановления хорошего приближения может потребоваться подгонка по эллипсу или SolvePnP. И нижний круг не является полным кругом, это просто часть круга. Иногда верхняя часть также закрывается, поэтому мы не можем полагать, что будет полный круг) enter image description here

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

Я хочу найти полные 2 круга, как показано на следующем рисунке (думаю, мне нужно найти положение чашки и направление ее вверх, прежде чем я смогу проецировать полные круги):

enter image description here

Допустим, моя конечная цель - найти ближайшую двухмерную верхнюю точку и ближайшую двухмерную нижнюю точку, учитывая двухмерную точку сбоку чашки, как показано ниже. изображение:

enter image description here

Точка также может быть внутри чашки, например: enter image description here

Давайте определим distance(a, b) как функцию, которая находит евклидово расстояние от точки a и точки b в пиксельных единицах.

Исходя из этого, я смогу вычислить distance(side point, bottom point) / distance(top point, bottom point), который будет шкалой число от 0 до 1, если я умножу это число на физическую высоту чашки, измеренную линейкой, то я буду знать, насколько высока точка от дна чашки в метрических единицах c.

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

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

1 Ответ

0 голосов
/ 13 января 2020

Учитывая проблемы с точностью, я не думаю, что стоит проводить трехмерную реконструкцию конуса.

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

x²/a² + (y - h)²/b² = 1

, который может быть решен методом наименьших квадратов.

Обратите внимание, что было бы полезно попросить пользователя указать на конечные точки прямых ребер внизу, а также самая нижняя точка вместо всей кривой.

Решение для ближайших верхних и нижних точек является чисто двумерной проблемой (проведите линию через заданную точку и пересечение сторон, и найти точки пересечения с эллипсом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...