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

У меня проблема с поиском «координат на изогнутой поверхности», когда я ее фотографирую. Представьте себе бочку или изогнутую поверхность, на поверхности которой есть n точек, и нам нужно определить их расположение. Когда поверхность фотографируется «спереди» и повернута примерно на 30 градусов, относительное положение точек будет выглядеть иначе.

Если бы это была плоская пластина, я бы подумал нормализовать длины и найти относительную координату каждой точки. Поскольку это плоская пластина, каждая нормированная координата будет давать одно и то же число независимо от угла поворота. Но когда он находится на изогнутой поверхности, эта нормализация не помогает найти координаты. Существует ли методология, которой нужно следовать, чтобы найти координаты при вращении объекта?

Изображение примера проблемы можно увидеть здесь: введите здесь описание изображения

Можно увидеть вид сверху другого примера рисунка: введите здесь описание изображения


comment
Вы знаете математику поверхности? Есть ли у вас какие-либо данные (например, окончательный цвет), которые идентифицируют пиксель поверхности, связанный с его положением перед проецированием?   -  person Ripi2    schedule 10.05.2019
comment
Прежде всего, как вы проецируете точки с поверхности на экран камеры? Вы используете ортогональную проекцию на плоскость экрана? Или вы используете стандартную точечно-экранную проекцию (проецирование путем рисования линий между фиксированной точкой за экраном и точками в 3D и просмотр пересечения линий с плоскостью экрана)? Во-вторых, является ли ваша поверхность цилиндрической в ​​том смысле, что это всегда одна и та же кривая, когда вы разрезаете ее, скажем, горизонтальной плоскостью, и эта кривая в основном перемещается вертикально, охватывая поверхность?   -  person Futurologist    schedule 11.05.2019
comment
Во-вторых, вы всегда вращаете камеру вокруг фиксированной оси, движущейся вертикально? По крайней мере, так это выглядит на ваших фотографиях. А у вас есть координаты точек на экране для каждого снимка камеры? В частности, можем ли мы предположить, что вы очень хорошо знаете параметры камеры, такие как расстояние между точкой, с которой вы смотрите на трехмерный мир, и экраном (если применимо) и где находится ортогональная проекция этой точки на экран. (обычно он должен быть в начале 2D-системы координат экрана). Вы знаете уравнение поверхности?   -  person Futurologist    schedule 12.05.2019
comment
Здравствуйте, спасибо за ваши ответы. К сожалению, это будет применяться к реальным объектам для измерения, а это значит, что у меня не будет уравнения поверхности. Я думаю о том, чтобы снимать достаточно далеко, чтобы получить почти ортогональные проекционные изображения и избавиться от эффекта перспективы. А при неподвижной камере объект вращается вокруг своей оси.   -  person dacets    schedule 13.05.2019


Ответы (2)


Похоже, вы находитесь в следующей ситуации: у вас есть фиксированная вертикальная линия с именем axis, которая является вертикальной осью вращения, вокруг которой вы вращаете поверхность. Кроме того, у вас есть плоскость S, представляющая собой экран вашей камеры. Экранная плоскость S также вертикальна, что эквивалентно тому факту, что она параллельна вращению axis. Затем вектор нормали N плоскости экрана S указывает на axis.

Вводим фиксированную систему координат (она называется камерой-системой, мы видим мир с точки зрения камеры и она неподвижна, потому что ваша камера неподвижна) следующим образом: выбираем неподвижную точку O на screen-plane S и нарисуйте ось O ---> y на S как уникальную линию на S, параллельную axis и проходящую через O. Ось O ---> x является уникальной линией, перпендикулярной оси O ---> y и, следовательно, горизонтальной. Вектор нормали N выровнен с осью O ---> z, которая также является горизонтальной, начиная с камеры и проходя через axis, пересекая последнюю ортогонально.

Система координат на плоскости экрана, назовем ее системой-экраном, это просто система, полученная как z = 0 (ортогональная проекция трехмерных точек на экран S), т.е. это двумерная система O x y, где O--->x и O--->y оси системы экрана также являются осями системы камеры, определенной выше.

Насколько я понимаю, вы дважды фотографируете поверхность, один раз в одном положении, второй раз после поворота вокруг axis на угол a. Возьмите одну из отмеченных точек P на поверхности перед вращением. Тогда его ортогональная проекция p1 на экран S имеет координаты [x1,y1] в системе screen0. После поворота на угол a поверхности вокруг axis точка P теперь имеет ортогональную проекцию p2 на экран S с новыми координатами [x2,y2] в экранной системе. Я предполагаю, что вы можете определить координаты любой точки на экране относительно системы экрана. Если не ошибаюсь, цель эквивалентна определению координат P до и после поворота в трехмерном пространстве O x y z. Однако, поскольку ваша проекция на экране S ортогональна, вам просто нужно определить z координаты точки P до и после поворота. Отсюда вы можете найти криволинейные координаты P на поверхности, которые могут быть просто координатами экрана, спроецированного на поверхность, поэтому параметризация поверхности может быть, например:

X = x1
Y = y1
Z = z1(x1, y1)    

Предположим также, что вы знаете расстояние l между экраном камеры S и осью вращения axis. Я считаю, что все эти предположения, сделанные до сих пор, очень разумны, поскольку вы можете контролировать настройку камеры (то есть плоскость экрана S вместе с ее системой координат, что довольно естественно) и ось вращения axis. Ситуация как на картинке ниже:

введите здесь описание изображения

Как видите, мы выбрали горизонтальный срез y = y1 и из-за всего расположения систем координат экрана и камеры имеем y = y1 = y2. Обратите внимание, что из-за вращения axis у нас есть dist(P0, axis) = dist(Pa, axis). Следовательно, треугольник P0 Pa axis равнобедренный с углом a при вершине axis. Итак, если вы проведете ось отражательной симметрии этого треугольника через вершину axis, вы получите две копии одного и того же прямоугольного треугольника, в котором у вас есть уравнение

dist(P0, Pa)/(2*dist(axis, P0)) = sin(a/2)

Объедините это последнее уравнение с уравнением

dist(P0, axis) = dist(Pa, axis) 

Если возвести оба уравнения в квадрат и составить из них одну систему, то получится система двух уравнений

dist(P0, Pa)^2 = 4*(dist(axis, P0))^2*(sin(a/2))^2

dist(P0, axis)^2 = dist(Pa, axis)^2 

Если вы посмотрите на три (прямоугольных) трапеции O p1 P0 axis, затем O p2 Pa axis и, наконец, P0 p1 p2 Pa, получите систему двух квадратных уравнений, двумя неизвестными которой являются координаты z z1 и z2. Остальные параметры даны: x1, x2, l, a. Вы должны решить для z1 и z2. Будет четыре пары решений, вы должны выбрать те, которые соответствуют реальной ситуации. Однако точное решение системы может быть затруднено, поэтому вы можете просто использовать метод Ньютона, чтобы найти очень хорошее приближенное решение.

Я написал систему на картинке, вы можете увидеть ее в формулах. Угол a - это ваш theta.

person Futurologist    schedule 15.05.2019

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

Так было бы в геодезической системе координат: (x1, y1, z1) (x1 + расстояние, y1, z1) (x1 + 2*расстояние, y1, z1)

Это применимо только в том случае, если расстояние между координатами постоянно и известно, и вы знаете угол геодезической ...

person Denise P    schedule 10.05.2019
comment
Я думаю, что могу сравнить угол объекта, сравнив их ширину, просто взяв acos(widthx/width1), так как это хорошо работает для плоской пластины. Расположение точек фиксировано, но расстояние между ними может быть расстоянием1 и расстоянием2, которые могут различаться как по оси x, так и по оси y, если смотреть на двухмерную фотографию объекта. - person dacets; 10.05.2019