图像去畸变
对一张桶形失真的图片进行去畸变
畸变模型有两种:
- 径向畸变:由镜头形状导致

- 切向畸变:透镜与成像平面未严格平行
去畸变代码
int main(int argc, char **argv) {
// 畸变参数
double k1 = -0.28340811, k2 = 0.07395907, p1 = 0.00019359, p2 = 1.76187114e-05;
// 相机内参
double fx = 458.654, fy = 457.296, cx = 367.215, cy = 248.375;
cv::Mat image = cv::imread(image_file,0); // 图像是灰度图,CV_8UC1
int rows = image.rows, cols = image.cols;
cv::Mat image_undistort = cv::Mat(rows, cols, CV_8UC1); // 去畸变以后的图
double x,y,r,xd,yd;
// 计算去畸变后图像的内容
for (int v = 0; v < rows; v++)
for (int u = 0; u < cols; u++) {
double u_distorted = 0, v_distorted = 0;
//利用内参将像素点转化为实际点
x = (u-cx)/fx;
y = (v-cy)/fy;
//计算出该实际点距离原点半径
r = sqrt(pow(x,2)+pow(x,2));
//根据畸变变换公式求原始图像的坐标
xd = x*(1 + k1*pow(r,2) + k2*pow(r,4)) + 2*p1*x*y + p2*(pow(r,2) + 2*pow(x,2));
yd = y*(1 + k1*pow(r,2) + k2*pow(r,4)) + p1*(pow(r,2)+2*pow(y,2)) + 2*p2*x*y;
//利用内参公式将纠正后的原始坐标转换为像素坐标
u_distorted = fx*xd + cx;
v_distorted = fy*yd + cy;

本文深入探讨了视觉SLAM中的关键概念,包括图像去畸变、双目视差的应用以及矩阵微分。介绍了如何对桶形失真的图像进行去畸变,并解析了径向和切向畸变模型。此外,讲解了如何利用双目模型生成点云。文章还探讨了高斯牛顿法在曲线拟合实验中的应用,解释了其优缺点,并提供了相关代码参考。
最低0.47元/天 解锁文章
642





