像素坐标系
由相似三角形的定义可得:
这是相对于成像平面的坐标变化,我们实际上所得到的图片还要经历一层成像平面到像素平面的变换,实际上就是相差了一个缩放和原点的平移。
如此我们定义:u为横轴向右与x轴平行,v为纵轴向下与y轴平行。
代入可得
化为矩阵表示形式:
我们把中间的量组成的矩阵称为相机的内参数矩阵(Camera Intrinsics) K。Z代表一张点对于成像平面的垂直距离,所以需要深度图来估计,如RGB-D。
畸变
径向畸变
透镜自身的形状对光线传播的影响所产生的误差。
这类畸变可以用和距中心距离有关的二次及高次多项式函数进行纠正:
切向畸变
是在机械组装过程中,透镜和成像平面不可能完全平行所造成的误差。
- 将三维空间点投影到归一化图像平面。设它的归一化坐标为 (x,y)T(即除以Z后的坐标点,将三维的非齐次的坐标去掉最后一个1,变成二维的齐次坐标)。
- 对归一化平面上的点进行径向畸变和切向畸变纠正
深度
在上述的过程中,不论是内参矩阵对于相机坐标系到像素坐标系的变化,都离不开一个值,就是深度Z。单目相机由于其投影射线上的所以点的投影都是一个点的原因,无法估计深度。
双目相机
d称之为视差。
Opencv
在OpenCV 的彩色图像中,通道的默认顺序是 B,G,R。
- 安装
Opencv(http://opencv.org/downloads.html)
sudo apt install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev libtbb-dev
cd opencv_download_file
sudo mkdir build && cd build
make ..
sudo make install
- example,这里只给出CMakeLists.txt,官网给的代码运行不出来的话,可以参考。
一、图像去畸变
cmake_minimum_required(VERSION 2.8)
project(imageBasics)
find_package(OpenCV REQUIRED)
include_directories($(OpenCV_INCLUDE_DIRS))
add_executable(imageBasics imageBasics.cpp)
target_link_libraries(imageBasics ${OpenCV_LIBS})
add_executable(distord_image distord_image.cpp)
# 链接OpenCV库
target_link_libraries(distord_image ${OpenCV_LIBS})
二、双目相机点云地图的建立
三、RGB-D