У меня есть 2 набора данных, полученных от kinect 1- глубина изображения размером 480 * 640 (uint16) из сцены 2- цветное изображение с таким же размер (480 * 640 * 3 одиночный) из той же сцены Вопрос в том, как объединить эти данные для создания цветных 3D-облаков точек с PLY-форматом в Matlab. Мне нужно сказать, что, к сожалению, у меня больше нет доступа к kinect, и я должен использовать только эти данные.Как создать 3D-облако точек из изображения глубины и цветного изображения, полученного у Matlab
ответ
Я никогда не пытался сделать это в MATLAB, но я думаю, что это то, что вы ищете:
http://es.mathworks.com/help/vision/ref/pcfromkinect.html
Инструмент находится внутри Computer Vision System Toolbox ™.
Хороший вопрос. Вы должны использовать этот учебник от Burrus - в основном вам нужно использовать информацию о глубине, чтобы преобразовать центрифуги цвета/глубины в 3-мерное измерение. Имейте в виду, что потоки глубины и цвета Kinect v1 слегка несовместимы, поэтому учитывайте это также.
В учебнике можно найти здесь: http://nicolas.burrus.name/index.php/Research/KinectCalibration Вы можете также использовать произведение этого автора: Khoshelham, К., & Elberink, SO (2012) - Точность и разрешение данных глубины Kinect для применения внутри помещений отображения
Код в MATLAB должен быть примерно таким:
% All formulas and values from:
% Khoshelham, K., & Elberink, S. O. (2012).
% Accuracy and resolution of Kinect depth data for indoor mapping applications.
% Sensors (Basel, Switzerland), 12(2), 1437–54. doi:10.3390/s120201437
load('janFrameThousand.mat')
pc=zeros([size(D) 3]);
W=size(D,2);
H=size(D,1);
f=5.453;
for indWidth = 1:W
for indHeight= 1:H
% copy z value
pc(indHeight,indWidth,3)=D(indHeight,indWidth);
% calc x value
pc(indHeight,indWidth,1)=-(pc(indHeight,indWidth,3)/f)*...
((indWidth-W/2)*0.0093+0.063);
% calc y value
pc(indHeight,indWidth,2)=-(pc(indHeight,indWidth,3)/f)*...
((indHeight-H/2)*0.0093+0.039);
end
end
X=pc(:,:,1);
% X=X(:);
Y=pc(:,:,2);
% Y=Y(:);
Z=-pc(:,:,3);
Z(Z==0)=NaN;
Surface=surf(X,Y,Z,'edgecolor','none','facecolor','interp');
lighting gouraud
camlight
% colormap(repmat(winter,20,1))
axis image
axis vis3d
xlabel('X axis')
ylabel('Y axis')
zlabel('Z axis')
После прочтения статьи я все еще озадачен, поэтому я сумку несколько вопросов о вас. Почему вы взяли f = 5.453? Это ваши собственные значения калибровки? 0,063 и 0,039 являются дельта x и y? что представляет собой 0,0093? – havakok
из того, что я помню из этого, они связаны с внутренними параметрами Kinect v1. – 16per9
Не будет работать без устройства kinect. – havakok