相机去畸变,以及双目平行校正----极线校正(一)————之单目畸变校正详细过程

2024-01-12 11:38

本文主要是介绍相机去畸变,以及双目平行校正----极线校正(一)————之单目畸变校正详细过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载:http://blog.csdn.net/wangxiaokun671903/article/details/37973365

  通过相机标定的程序获取了两个相机各自的内参矩阵和畸变系数,以及两个相机达到平行时各自的旋转矩阵。OpencvMatlab都给了我们现成的函数,可以利用这些数据进行去畸变或者双目平行校正,因为有需求要将去畸变和平行校正移植到硬件上,那么自己如何利用这些参数和矩阵写去畸变的程序和双目平行校正的程序呢?我本人发现的网上这方面资料较少。在此总结一下。

去畸变的过程就是针对单目相机进行的变换,平行校正就是针对双目相机的操作。

本文针对单目去畸变的方法展开叙述:

和“从世界坐标系到相机坐标系再到图像物理坐标系最后到图像像素坐标系”过程相逆,我们做去畸变时,是已经通过相机标定获取了相机的内参矩阵和畸变系数的,另外,我们已知的就是相机拍摄出来一副图像。

内参矩阵:

 畸变系数:


 则各参数如下:

 

 去畸变的操作步骤如下:

1),将图像的像素坐标系通过内参矩阵转换到相机坐标系:

 

2),在相机坐标系下进行去畸变操作。

3),去畸变操作结束后,将相机坐标系重新转换到图像像素坐标系。

4),并用源图像的像素值对新图像的像素点进行插值。



插值算法如下:



1[x+1]-x2[y+1]-y3I1([x],[y])4y-[y]5I1([x],[y+1])6x-[x]7I1([x+1],[y])8I1([x+1],[y+1])


 I2(u,v)=1*2*3+1*4*5+6*2*7+6*4*8


编程实例:


 

去畸变之前的图像:



[plain]  view plain copy
  1. for x=1:W1   
  2. for y=1:H1    
  3. %图像像素坐标系转换到相机坐标系  
  4.         yy=(y-cy)/fy;   
  5.         xx=(x-cx)/fx;  
  6. %在相机坐标系中做去畸变  
  7.         r=xx^2+yy^2;  
  8.         xxx=xx*(1+k21*r+k22*r^2+k23*r^3)+2*p21*xx*yy+p22*(r+2*xx^2);  
  9.         yyy=yy*(1+k21*r+k22*r^2+k23*r^3)+2*p22*xx*yy+p21*(r+2*yy^2);  
  10.     %去畸变后重新将相机坐标系转换到图像像素坐标系  
  11.         xxxx=xxx*fx2+cx2;  
  12.         yyyy=yyy*fy2+cy2;  
  13.         if (xxxx>1 && xxxx<=W2 && yyyy>1 && yyyy<=H2)  
  14.             h=yyyy;  
  15.             w=xxxx;     I22(y,x)=(floor(w+1)-w)*(floor(h+1)-h)*I2(floor(h),floor(w))+(floor(w+1)-w)*(h-floor(h))*I2(floor(h+1),floor(w))+(w-floor(w))*(floor(h+1)-h)*I2(floor(h),floor(w+1))+(w-floor(w))*(h-floor(h))*I2(floor(h+1),floor(w+1));  
  16.         end  



去畸变之后的图片:




这篇关于相机去畸变,以及双目平行校正----极线校正(一)————之单目畸变校正详细过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/597747

相关文章

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

Nginx服务器部署详细代码实例

《Nginx服务器部署详细代码实例》Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,:本文主要介绍Nginx服务器部署的相关资料,文中通过代码... 目录Nginx 服务器SSL/TLS 配置动态脚本反向代理总结Nginx 服务器Nginx是一个‌高性

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

SQL Server中行转列方法详细讲解

《SQLServer中行转列方法详细讲解》SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集,:本文主要介绍SQLServer中行转列方法的相关资料,需要的朋友可以参考下... 目录前言一、为什么需要行转列二、行转列的基本概念三、使用PIVOT运算符进行行转列1.创建示例数据表并插入数

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里

JAVA SpringBoot集成Jasypt进行加密、解密的详细过程

《JAVASpringBoot集成Jasypt进行加密、解密的详细过程》文章详细介绍了如何在SpringBoot项目中集成Jasypt进行加密和解密,包括Jasypt简介、如何添加依赖、配置加密密钥... 目录Java (SpringBoot) 集成 Jasypt 进行加密、解密 - 详细教程一、Jasyp

Java通过ServerSocket与Socket实现通信过程

《Java通过ServerSocket与Socket实现通信过程》本文介绍了Java中的ServerSocket和Socket类,详细讲解了它们的构造方法和使用场景,并通过一个简单的通信示例展示了如何... 目录1 ServerSocket2 Socket3 服务器端4 客户端5 运行结果6 设置超时总结1

Java 操作 MinIO详细步骤

《Java操作MinIO详细步骤》本文详细介绍了如何使用Java操作MinIO,涵盖了从环境准备、核心API详解到实战场景的全过程,文章从基础的桶和对象操作开始,到大文件分片上传、预签名URL生成... 目录Java 操作 MinIO 全指南:从 API 详解到实战场景引言:为什么选择 MinIO?一、环境

MongoDB搭建过程及单机版部署方法

《MongoDB搭建过程及单机版部署方法》MongoDB是一个灵活、高性能的NoSQL数据库,特别适合快速开发和大规模分布式系统,本文给大家介绍MongoDB搭建过程及单机版部署方法,感兴趣的朋友跟随... 目录前言1️⃣ 核心特点1、文档存储2、无模式(Schema-less)3、高性能4、水平扩展(Sh