简介
2018年7月,合作伙伴提出了一个想法——使用光流算法估计相机前后移动。经典的光流算法(Lukas-Kanade算法)适用于相机左右和上下移动,但是在相机前后移动时,虽然各个像素都有移动,但是移动速度是矢量,综合起来,整个相机的移动却接近0。这个是经典的LK光流算法的问题,其根源是速度位矢量,而相机前后移动就像是图片的放大(Zoom in)和缩小(Zoom out),使所有像素的移动速度矢量呈放射状均匀分布在相机视野中。
我想到了一个可能的解决方法——改变坐标系,使像素在新坐标系下的移动速度朝向一致,而极坐标系就是适合使用的一种。因此,本文集中考虑极坐标系下的LK光流算法应用,专门用来计算相机的Zoom in and out情况。
一 光流算法
光流算法是用来检测相机移动的,与SLAM的3D空间定位不同,光流算法是在2D平面下定位。其理论是相机发生平移时,画面会发生移动,并且是整体移动。
二 极坐标变换
1 介绍
针对Zoom in and out问题下的光流算法,首先要做的是极坐标变换。具体而言,照片的像素坐标是使用直角坐标系表示的,但在Zoom in and out问题下,向光流算法输入的像素需要在极坐标系下,而不能是直角坐标系。
2 编程
极坐标系的变换原理很简单