移动平台、线激光扫描、物体三维重建

本文装置基于一维运动平台-传送带,可以实现单视角线激光扫描三维重建,也可实现多视角多线激光扫描三维重建。内容包括:标定工作(相机标定、光平面标定、扫描方向标定、多相机全局标定)、激光中心线提取工作、图像和点云处理工作等等。
主函数代码如下, 涉及各部分的代码在均在工程中自定义实现:

clc
clear
close all
%数据载入区———————————————
A255440 = load('A255440.mat');
R255440 = load('R255440.mat');
T255440 = load('T255440.mat');
laserPlane255440 = load('laserPlane255440.mat');
x255440 = load('x.mat');
y255440 = load('y.mat');
z255440 = load('z.mat');
%
A = A255440.A;
R = R255440.R;
T = T255440.T;
a = laserPlane255440.a;
b = laserPlane255440.b;
c = laserPlane255440.c;
d = laserPlane255440.d;
x =x255440.x; 
y =y255440.y; 
z =z255440.z; 
%生成点云数据———————————————
Files = dir(fullfile('../img2/','*.bmp'));
picture_num = length(Files);
% WCS = [];%所有点世界坐标
WCS = zeros(100000,3);
Points = zeros(100000,3);
points_num = 0;
for frame_index = 1 : 291
    fprintf('Processing %d th image...\n',frame_index);
    pictures = {Files.name};
    framename = pictures{frame_index};
    frame = imread(framename);
    laserPixel = findLaserCenter(frame,1,1451,400,1200,0);
    %调用findLaserCenter函数提取中心线
    for pixel_index = 1 : length(laserPixel)
        [Xw, Yw, Zw] = pcs2wcs(laserPixel(pixel_index, 1), laserPixel(pixel_index,2), A,R(:,:,7), T(:,:,7), a, b, c, d);
        %调用pcs2wcs函数,将像素坐标转化为世界坐标系坐标
        Xw = Xw + x * (picture_num - frame_index);%物体运动方向是向上的,所以Yw是有变化的。
        Yw = Yw + y * (picture_num - frame_index);
        Zw = Zw + z * (picture_num - frame_index);
        %最后一根扫描线是Yw,第一根扫描线在最终的三维模型中是最上面的一根激光线,所以要在Yw的基础上加上其余扫描线间的间隔。
        WCS(pixel_index,:) = [Xw,Yw,Zw];
        %得到三维点云数据
    end
    Points(points_num + 1 : points_num + length(laserPixel),:) = WCS(1 : length(laserPixel),:);
    points_num = points_num + length(laserPixel);
end
save('..\3D_point255440.txt', 'Points', '-ascii');%保存在lightpoint_a1.txt文本文档中
fprintf('   Processing Complete! Saved as ‘3D_point255440.txt‘ \n');%命令行窗口打印这段文字

加qq:936874728与作者交流
结果如下:
移动平台、线激光扫描、物体三维重建_第1张图片部分视角拼接工作:
移动平台、线激光扫描、物体三维重建_第2张图片

你可能感兴趣的:(三维成像,matlab,三维重建,移动平台,线激光扫描)