背景
在做激光点云方面任务时,总会遇到点云数据的解析清洗等相关的工作。对于激光点云通常为10HZ,而摄像头采集视频为30HZ,也就是说,点云与图像不能每一帧都能刚好对齐。
因此,引出我们今天的主题,如何去做到点云与图像的帧对齐?
- 通过硬件时钟对齐,触发式同时采集点云跟图像。
- 通过后处理,进行软同步。
python代码实现
这里给出一个解决方案,通过代码进行软同步,可以做到近似对齐。思想很简单,主要是根据每一帧点云的时间戳去找到最接近的图像时间戳。
class FileMatch:
def __init__(self, dir_path):
file_dir = glob.glob(dir_path + "/*")
self.filepath = []
for f in file_dir:
if f.endswith(".bag"):
pass
else:
self.filepath.append(f)
def match(self):
for i in self.filepath:
pcd_file = os.listdir(i + '/pcd')
img_file = os.listdir(i + "/jpg")
# print(img_file)
for pcd in pcd_file:
print(i, pcd)
pcd_prefix = os.path.splitext(pcd)[0]
dict = {k:eval(pcd_prefix) - eval(os.path.splitext(k)[0]) for k in img_file}
value = 0
img_key, diff_val = min(dict.items(), key=lambda x: abs(value - x[1]))
print(img_key, diff_val, pcd)
src_img = os.path.join(i ,"jpg", img_key)
new_img_path = i+"/img_new"
if not os.path.exists(new_img_path):
os.makedirs(new_img_path)
new_img = os.path.join(new_img_path, pcd_prefix + '.jpg')
# print(src_img)
# print(new_img)
shutil.copyfile(src_img, new_img)