Реконструкция неплоского многоугольника в 3D с учетом 2-мерной проекции и известных размеров многоугольника - PullRequest
0 голосов
/ 06 октября 2018

У меня есть неплоский объект с 9 точками с известными размерами в 3D, т.е. известна длина всех сторон.Теперь, учитывая двухмерную проекцию этой формы, я хочу восстановить ее трехмерную модель.Я в основном хочу восстановить форму этого объекта в реальном мире, то есть углы между различными сторонами в 3D.Например, учитывая все размеры каждой части таблицы и двухмерное изображение, я пытаюсь восстановить его трехмерную модель.

enter image description here

До сих пор я читал о гомографии, перспективном преобразовании, прокрусттах и ​​фундаментальной / существенной матрице, но не нашел решения, которое будет применятьсяВот.Я новичок в этом, поэтому, возможно, что-то упустил.Любое направление по этому вопросу будет действительно полезным.

1 Ответ

0 голосов
/ 06 октября 2018

В своем вопросе вы упоминаете, что хотите достичь этого, используя только один вид объекта.В этом случае вам не помогут гомографии или основные / фундаментальные матрицы, потому что для этого необходимы по крайней мере два вида сцены.Если у вас нет каких-либо априоров в форме объектов, которые вы хотите восстановить, ключевой информацией, которую вы пропустите, будет (относительная) глубина, и в этом случае я думаю, что это два возможных решения:

  • Используйте алгоритм обучения.Существует обширная литература по оценке позы объекта 6d с глубокими сетями, см., Например, этот документ .Вам не придется иметь дело с глубиной напрямую, если вы используете их, так как эти сети обучены непрерывно, чтобы оценить позу в SO(3).

  • Добавить много большеизображения и использовать плотный фотометрический конвейер SLAM / SFM, такой как упругий сплав .Однако в этом случае вам потребуется сегментировать полученные модели, поскольку производимая ими оценка относится ко всей среде, что может быть затруднительно в зависимости от сцены.

Однако, как вы упомянули в своем комментарии, можно реконструировать модель в масштабе, если у вас очень сильные априоры в ее геометрии.В случае плоского объекта (кубоид будет просто расширением этого), вы можете использовать этот простой алгоритм (более или менее то, что они делают здесь , есть другие методы, но я нахожу ихнемного сумбурно, по уравнению):

//let's note A,B,C,D the rectangle in 3d that we are after, such that 
//AB is parellel with CD. Let's also note a,b,c,d their respective
//reprojections in the image, i.e. a=KA where K is the calibration matrix, and so on.

1) Compute the common vanishing point of AB and CD. This is just the intersection
   of ab and cd in the image plane. Let's call it v_1.
2) Do the same for the two other edges, i.e bc and da. Let's call this 
   vanishing point v_2.
3) Now, you can compute the vanishing line, which will just be
   crossproduct(v_1, v_2), i.e. the line going through both v_1 and v_2. This gives 
   you the orientation of your plane. Let's write its normal N.
5) All you need to find now is the boundaries of the rectangle. To do
   that, just consider any plane with normal N that doesn't go through
   the camera center. Now find the intersections of K^{-1}a, K^{-1}b,
   K^{-1}c, K^{-1}d with that plane. 

Если вам нужно освежить в памяти точки и линии схода, я предлагаю вам взглянуть на страницы 213 и 216 Книга Хартли-Циссермана .

...