-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_fun.m
98 lines (79 loc) · 3.19 KB
/
test_fun.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
clear all; close all; clc;
data_path = 'E:\kitti\tracking\training\';
save_path='E:\data\kitti_tracking\training\save_path\';
gridSize = 0.1;%
mergeSize = 0.015;%
for seq_idx=0:0% 20
c_save_dir=fullfile(save_path,sprintf('%04d/',seq_idx));%['F:\jiediaosi\code\kitti\frames\tracking\','labels\']; % 新标签
if ~exist(c_save_dir,'dir')
mkdir(c_save_dir);
end
lidar_dir = fullfile(data_path, sprintf('velodyne/%04d', seq_idx));
%label_dir = fullfile(data_path, 'label_02/');
calib_dir = fullfile(data_path, 'calib/');
img_dir=fullfile(data_path, sprintf('image_02/%04d', seq_idx));
%tracklets = readLabels(label_dir, seq_idx);
%P = readCalibration(calib_dir,seq_idx,2);
%sprintf('%04d.txt', seq_idx)
st=Fun_open_calib(sprintf('%04d.txt', seq_idx),calib_dir);
nimages = length(dir(fullfile(lidar_dir, '*.bin')));
%fst_frame = 0; nt_frames = nimages-1;%
fst_frame = 2; nt_frames = nimages-1;% for icp 叠加,从第二帧开始,用上一帧叠加当前帧
%bias=20;%纵横向偏移,将所有坐标系转为正
%boundary parameters
st.x_min= -20;%-20;%left-right
st.x_max= 80;%60;% kitti 到80米还有障碍物,是否有必要
st.y_min=-20;%front-back
st.y_max=20;
st.z_min=-2.5;
st.z_max=0.8;
interp_method='linear';%nearest linear natural
%first frame
fd_l = fopen(sprintf('%s/%06d.bin',lidar_dir,fst_frame-2),'rb');% 上一帧
velo_l=fread(fd_l,[4 inf],'single')';
fclose(fd_l);
%velo_l=distanceFilter(velo_l,st);
velo_l=pointCloud(velo_l(:,1:3),'Intensity',velo_l(:,4));
fixed = pcdownsample(velo_l, 'gridAverage', gridSize);%初始的
fd_c = fopen(sprintf('%s/%06d.bin',lidar_dir,fst_frame-1),'rb');% 上一帧
velo_c=fread(fd_c,[4 inf],'single')';
fclose(fd_c);
%velo_c=distanceFilter(velo_c,st);
velo_c=pointCloud(velo_c(:,1:3),'Intensity',velo_c(:,4));
moving = pcdownsample(velo_c, 'gridAverage', gridSize);%后面每帧去更新
gridSize = 0.1;
tform = pcregistericp(moving, fixed, 'Metric','pointToPlane','Extrapolate', true);
ptCloudAligned = pctransform(velo_c,tform);% 旋转
ptCloudScene = pcmerge(velo_l, ptCloudAligned, mergeSize);
accumTform = tform;
for frame = fst_frame: 1: nt_frames
%frame
fd_c = fopen(sprintf('%s/%06d.bin',lidar_dir,frame),'rb');% 当前帧
if fd_c < 1
fprintf('No LIDAR files !!!\n');
continue;
%keyboard
else
velo_c = fread(fd_c,[4 inf],'single')';% 读取雷达数据,存为n*4的矩阵
fclose(fd_c);
end
%img = imread(sprintf('%s/%06d.png',img_dir,frame));
%前向投影,按视野过滤
%velo_c=distanceFilter(velo_c,st);
velo_c=pointCloud(velo_c(:,1:3),'Intensity',velo_c(:,4));
moving = pcdownsample(velo_c, 'gridAverage', gridSize);
fixed=moving;
tform = pcregistericp(moving, fixed, 'Metric','pointToPlane','Extrapolate', true);
accumTform = affine3d(tform.T * accumTform.T);
ptCloudAligned = pctransform(velo_c, accumTform);
% Update the world scene.
ptCloudScene = pcmerge(ptCloudScene, ptCloudAligned, mergeSize);
pcshow(ptCloudScene);
%velo_c=velo_preprocess(velo_c,st,size(img));
%velo_l=velo_preprocess(velo_l,st,size(img));
%velo=lidar_merge(velo_c,velo_l);
%up_im=Fun_upsample(velo_c,img,st,interp_method);%上采样+稠密化
%imshow(ImaRange);
%imwrite(up_im,sprintf('%s%06d.png',c_save_dir,frame));%保存表示深度信息的灰度图
end
end