Итак, я пытаюсь настроить конвейер 3d-реконструкции для одновременной локализации и картирования. Я подумал, что сначала я попробую реконструкцию для одного изображения глубины, но только результат кажется несколько искаженным.
Я использую этот популярный метод проецирования, использующий внутренние параметры камеры и изображение глубины (метод можно увидеть в разделе «Отображение пикселей глубины с цветными пикселями»):
http://nicolas.burrus.name/index.php/Research/KinectCalibration
Это мое мнение, написанное для ясности.
def project(u,v,depth):
z = depth
x = (cam.cx - u) / cam.fx * z
y = (cam.cy - v) / cam.fy * z
return [x, y, z]
Теперь я ожидаю получить облако точек, которое несколько точно соответствует реальной трехмерной сцене. Тем не менее, результат искажен, как если бы он сбежал из бутылки джина. Я предполагаю, что этого следовало ожидать, потому что более высокие значения depth
приводят к тому, что точки находятся ближе к центральной точке изображения. Как я могу смягчить этот эффект и получить более точные реконструкции? Требуется ли какой-либо шаг нормализации или масштабирования, о котором я не знаю?
карта глубины: https://imgur.com/RQMw7pc
3d-реконструкция: https://imgur.com/QNqrKdy
(глубина изображения взята из этого руководства http://anabuilder.free.fr/2D3DSculptor/index.html)