热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

http:blog.csdn.netzkl99999articledetails48371877相机去畸变,以及双目平行校正----极线校正(一

http://blog.csdn.net/zkl99999/article/details/48371877


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


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


分类: 相机标定 647人阅读 评论(0) 收藏 举报

相机标定畸变校正

   

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

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

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

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

内参矩阵:

 畸变系数:


 则各参数如下:

 

 去畸变的操作步骤如下:

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

 

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

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

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



插值算法如下:



1[x+1]-x;2[y+1]-y;3I1([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 plaincopy
  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<&#61;W2 && yyyy>1 && yyyy<&#61;H2)  
  14.             h&#61;yyyy;  
  15.             w&#61;xxxx;     I22(y,x)&#61;(floor(w&#43;1)-w)*(floor(h&#43;1)-h)*I2(floor(h),floor(w))&#43;(floor(w&#43;1)-w)*(h-floor(h))*I2(floor(h&#43;1),floor(w))&#43;(w-floor(w))*(floor(h&#43;1)-h)*I2(floor(h),floor(w&#43;1))&#43;(w-floor(w))*(h-floor(h))*I2(floor(h&#43;1),floor(w&#43;1));  
  16.         end  



去畸变之后的图片&#xff1a;






推荐阅读
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • Android开发技巧:使用IconFont减少应用体积
    本文介绍如何在Android应用中使用IconFont来显示图标,从而有效减少应用的体积。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • 基于Web的Kafka管理工具Kafkamanager首次访问Web界面的详细配置指南(附图解)
    首次访问Kafkamanager Web界面时,需要对Kafka集群进行配置。这一过程相对简单,用户只需依次点击【Cluster】>【Add Cluster】,按照提示完成相关设置即可。本文将通过图文并茂的方式,详细介绍每一步的配置步骤,帮助用户快速上手Kafkamanager。 ... [详细]
  • XAMPP 遇到 404 错误:无法找到请求的对象
    在使用 XAMPP 时遇到 404 错误,表示请求的对象未找到。通过详细分析发现,该问题可能由以下原因引起:1. `httpd-vhosts.conf` 文件中的配置路径错误;2. `public` 目录下缺少 `.htaccess` 文件。建议检查并修正这些配置,以确保服务器能够正确识别和访问所需的文件路径。 ... [详细]
  • 本文对SQL Server系统进行了基本概述,并深入解析了其核心功能。SQL Server不仅提供了强大的数据存储和管理能力,还支持复杂的查询操作和事务处理。通过MyEclipse、SQL Server和Tomcat的集成开发环境,可以高效地构建银行转账系统。在实现过程中,需要确保表单参数与后台代码中的属性值一致,同时在Servlet中处理用户登录验证,以确保系统的安全性和可靠性。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文详细探讨了Oracle数据库中Number和Float数据类型的特性和使用方法。通过对比分析,解释了Number类型在精度和范围上的优势,以及Float类型在处理科学计算时的灵活性。文章还介绍了Number数据类型的语法结构及其在实际应用中的最佳实践,帮助读者更好地理解和选择合适的数据类型以满足不同的业务需求。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
author-avatar
一个具有骨感的女人0
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有