Imatest的测试卡和软件可以帮助用户测量和分析成像系统的特性和参数。很多时候,这些测试结果被用来作为图像质量的度量,或者预测你拍摄图像质量的极限水平。

有一些Imatest给出的测试结果,是可以用于图像校正的。可直接用来纠正测量出的误差。不必购买新的硬件,无需主观判断,有时候问题的解决方法可以是一个数学模型和简单的计算。一旦你测量了Imatest的这些参数,你可以纠正他们,从而最大限度地减少(或完全去除)它们造成的影响。这通常是通过一个专用的图像信号处理芯片(ISP)完成的,从原始传感器数据RAW转换成一幅合适的图片。

在Imatest中,我们非正式地称之为“闭环”,它完成了从测试相机到校正相机的循环(某种形式的调整)。

今天,我们要谈谈如何从Imatest中提取径向畸变的测量数据,并用它们来校正相机的畸变(无需购买新的镜头)。

使用Imatest帮助校正畸变

径向几何失真

几何失真,用来的描述图像的扭曲形状,与相机真正遵循一个简单的针孔相机模型成像情况进行对比。(因此,我们不是在这里谈论透视失真)。最明显的效果是,场景中的直线弯曲成图像中的曲线。

几何失真并不总是件坏事——有时也会为艺术效果选择曲线镜头,或使用广角镜头时忽略畸变,因为这就是欣赏者期望看到的情况。然而,用户的研究表明,大多数观众对每天看到的图片的畸变程度,主观接受度是有限的。

特征化(和校正)几何失真是许多应用场景所需要的,比如在三维空间中定位一个点,对于计算机视觉或交多张图像拼接在一起的VR应用等等,都需要精确的校正。

这种几何失真几乎总是由于镜头的设计和结构带来的,它通常被建模为(1)纯径向和(2)径向对称。

纯径向畸变意味着无论在像场中的哪一个点,唯一决定畸变的因素是,它离图像的中心有多远。(为了简单起见,我们在此假定图像的中心是系统的光学中心,尽管这通常是需要提前测量的。)假设几何失真是径向的,可以减少问题的复杂性。因为无需考虑二维图像的两个维度(x和y表示在每个像素的位置),我们只需要确定一个维度(半径方向的位移)。

通过使用SFRPlus,Checkboard,或Dot Pattern模块,Imatest可以从一幅拍摄过的测试卡图片来测量相机系统的径向失真。

Imatest中的畸变系数

Imatest可以返回两种不同类型径向畸变的描述。这两种畸变都是用多项式近似的失真函数描述的,但这两个多项式代表不同的东西。在许多情况下,它们在功能上是相同的,并且可以从一种形式转换为另一种形式。(为简单起见,我们忽略了这里Imatest提供和标注的tan/arctan 逼近值)

我们作如下定义:

*rd是一个点的畸变半径,也就是它到图像中心的距离*ru是一个点未畸变的半径,在未畸变的图像中它到图像中心的距离

* 函数rd=f(ru)被称为正向变换因为它采用了一个未畸变的半径值,并把它转     化为一个畸变的半径。也就是说,它适用于镜头发生畸变的点。

*函数ru=f−1(rd)被称为反向变换,是为了与正向变换进行对比,它校正了镜  头的畸变值

* P(⋅)表示一个多项式函数

SFRplus和Checkboard模块会返回描述纠正畸变的反向变换后的畸变系数,ru=f-1(rd),下方为Rescharts模块的分析结果:

Imatest畸变分析结果

Dot Pattern模块返回一个不同参数的径向畸变的多项式的系数,称为局部几何失真(LGD),或有时也称为光学畸变。以下是基于ISO 17850和CPIQ标准给出的测试结果。

基于CPIQ的畸变分析结果

LGD被定义为相对于真实误差的径向误差,为百分比(即乘以100):

LGD=100*(rd-ru)/ru

通过将LGD考虑为一个相对畸变图像半径的多项式函数,P(rd),我们可以重新安排这个方程式的两边产生更有用的方程,有理多项式的畸变校正反向变换形式。因此,点状图结果可以向SFRplus/Checkboard那样用同样的方法(虽然我们会用规则的多项式拟合近似代码示例直接取代有理多项)。

ru=rd/(P(rd)/100+1)=f-1(rd)

通过再采样畸变校正

图像传感器的像素阵列基本上是一个规则间隔的网格光照取样。然而,光落在上面的模式已经被镜头扭曲了,因此当传感器定期地对光进行采样时,这些光在进入镜头之前就不是有效的光照样本了。我们的补救方案可以描述如下:

我们创建一个新的无失真,规则间隔的网格(一个新的像素阵列)。在每一个“虚拟传感器”像素的位置,我们重新从所观察到的图像采样图像数据,在该图像中的这个位置,传感器像素已经进行了失真预测。因此,畸变图像被用网格重新采样,它经历了相同的畸变,但采样结果会再次有规律的展现间隔-有效地消除失真。说明如下:

每个上层的网格线的交点代表了我们生成的像素位置,在未畸变图像中(像素的在我们的“虚拟传感器”的位置)。显然,我们在此已经减少了“像素”来增加易读性。图像的下部代表畸变图像,当网格被扭曲后,采样网格覆盖在其上。上面的规则间隔的阵列位置将被用从下方畸变图像的不规则采样数据填充,如所示的扭曲的网格交点位置。

为了看的更明显,红色箭头从上面图像的网格交点下降到下面图像中相应的网格交点。这些可对比结束位置的蓝色箭头,表明这是否有像素取样不失真。(很明显,如果像素取样位置没有畸变,即使用了蓝色箭头位置,那么输出图像将规则的从畸变的图像采样,本身也会畸变。)

畸变与未畸变的位置对应

一个例子

下面的示例是如何在MATLAB代码中提供以下示例。您也可以下载代码和例子图像。代码仅仅是一个特别的表现形式,尽管这些概念可以在任何编程语言中被提取和应用。

注意下面的内容,我们使用后缀“_d”和_u”分别确定与之相关的失真和无失真的图像/坐标的变量,使用大写的变量,如RHO,找出相同大小的矩阵作为测试和输出图像(下面,一个属性将被隐式的使用)。

(0)加载一张SFRplus测试卡拍摄图片到Imatest中分析它并确定反变换系数(如图所示,在rescharts交互模块测量)。(或者,把图像加载到点状图模块和从那里取回LGD系数转换为反变换系数,然后按照剩余步骤。)加载到MATLAB中。

SFRplus畸变分析结果

inverseCoeffs = [0.2259 0 1 0];

% distortion coefficients reported by SFRPlus

(1)定义相对于图像中心,每一个在观测(畸变)图像中像素的位置空间坐标。例如,由于这个测试图像是4288×2872像素,左上角的像素坐标为(2143.5,1435.5)。

(2)将这些坐标转换成极坐标形式,这样我们就只操纵径向分量(这里称为RHO)。我们还规范和规模化径向坐标以便未畸变的图像中中心到边角的距离最终将归一化为1。

normFactor = RHO_d(1, 1);

% normalize to corner distance 1 in distorted image

scaleFactor = polyval(inverseCoeffs, 1);

% scale so corner distance will be 1 after distortion correction

(3)

注:作为一个微妙的一点,变量θ和rho_d对实际上定义空间坐标的方式有两种:显性与隐性。他们定义明确的坐标,即在(θ(1,1),Rho(1,1))定义的角和径向坐标在图像左上角的像素。然而,他们也含蓄地定义了一组坐标简单的2-D数组,它有一个自然的顺序和结构。即使我们改变这两个数组(1,1)条目的值,它们仍然在左上角条目每个数组中。点的显式坐标发生了变化,但隐式坐标保持不变

我们现在将测得的畸变应用到径向坐标,使明确的径向距离匹配所观察到的图像中的该点的径向距离。正如上文所指出的,这种所观察到的图像的畸变位置

现在与图像未畸变的隐性阵列位置密切相关。我们使用的是隐式的阵元位置的未畸变图像的真实坐标,和明确的数组值作为图形在畸变图像采点取样。

请注意,我们实际上没有正向变换多项式,我们有通过Imatest得到的反向多项式来返回给图像。这可以通过设置一个新的(逆矩阵的逆)多项式,在invert_distortion_poly m文件提供。

(4)我们现在有无失真图像的x_d,y_d数组的隐式坐标和显式值表示采样点与之所观察到的图像是相关的。我们可以在interp2()函数中直接使用这些(采样查询点)。

im_u = zeros(height,width,channels);

% pre-allocate space in memory

im_u(:,:,c) = interp2(X, Y,

im_d(:,:,c), X_d, Y_d);

好了,现在我们可以看到我们不失真的劳动成果。特别注意顶部和底部的直线。还要注意到,在未畸变图像的边缘有黑色的区域,当然,没有原图像信息被故意填充到这里面。

SFRplus畸变校正后

实拍校正图例

当然,我们现在除了测试失真的场景。我们使用的测试测试图卡和Imatest来表征相机系统本身引起的畸变,我们可以消除图像带来的任何畸变。由于应该是直线型的建筑风格出现一个非常常见的来源明显的失真,我们展示了这张照片,阴天下拍摄的。

拍摄的原图

畸变校正后的图片

请在此处下载示例图像和MATLAB代码:

链接: https://pan.baidu.com/s/1hrCtXZY 密码: qk9u

基于matlab的几何失真矫正,使用imatest软件帮助校正畸变相关推荐

  1. 【机械仿真】基于matlab简化几何解法六轴机械臂位置规划【含Matlab源码 2128期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab简化几何解法六轴机械臂位置规划[含Matlab源码 2128期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  2. 基于matlab测量物体直径,基于MATLAB的零件尺寸检测误差分析的软件设计

    ISSN1672-4305 CN12-1352/N 实 验 室 科 学 LABORATORY SCIENCE 第 14 卷 第 4 期 2011 年 8 月 Vol. 14 No. 4 Aug. 20 ...

  3. 基于matlab的传热学虚拟实验开发,基于MATLAB的传热学课程虚拟实验软件的开发

    215教育现代化·2018 年 12 月第 49 期 教育信息技术 基于 MATLAB 的传热学课程虚拟实验软件的开发 周永利,李友荣,石万元,张力元,杨晨,卞煜,王国强,李俊,包键 ( 重庆大学 低 ...

  4. 基于Matlab开发的整车动力系统匹配计算软件,将整车参数及性能需求输入

    基于Matlab开发的整车动力系统匹配计算软件,将整车参数及性能需求输入,直接输出动力系统性能要求 ID:2825618164946150似命@珍惜

  5. 基于MATLAB图像处理的pdf矫正

    我们在日常生活中有时看到的pdf文档是扫描件,那扫描的结果有时很不好 ,歪歪斜斜还有阴影.这样就会影响到我们的阅读心情.例如我前两天找到的一本<矩阵论>的pdf文档就是扫描件,给大家看一下 ...

  6. 图像畸变(几何失真)测试—imatest

     测试准备 7.棋盘格结果读取:青色和红色的线表示校正后的水平和垂直线.青色和红色的箭头示意畸变方向,如图1 8.点状图测试卡结果读取(选取ROI.注意:对于4:3的画幅,应选取不少于20*15点) ...

  7. matlab几何失真校正,摄像头图像失真校正

    基于MATLAB的摄像头 图像失真校正 上学的时候玩智能车摄像头组,从发现图像失真.到下载研究各种文档.再到写程序测试.最后实际运用,整个过程很有意思,特别是逆透视变换值得研究.下面的内容是那时候写的 ...

  8. matlab直径算法,基于MATLAB的纸卷幅宽和直径测量方法与流程

    本发明属于输送设备自动控制领域,具体涉及输送系统中货物在直线移载平台上幅宽检测的测量方法. 背景技术: 目前,在移载平台上测量纸卷幅宽往往有两种方式,第一种方式是运用激光测距仪,通过调整好测距仪的位置 ...

  9. 【飞行器】基于matlab四旋翼无人机几何跟踪控制【含Matlab源码 2270期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[飞行器]基于matlab四旋翼无人机几何跟踪控制[含Matlab源码 2270期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式 ...

最新文章

  1. python include_tag_详解Python的Django框架中inclusion_tag的使用
  2. python课程将主要介绍哪些内容-Python课程详细介绍
  3. 多项式加法 java 链表_多项式加法,用单链表实现。
  4. springMVC解析视图
  5. VI编辑,backspace无法删除解决方法
  6. golang new和make却别
  7. 对微服务监控系统分层和监控架构的理解
  8. mysql修改启动command_MySQL Command Line[mysql命令行常用命令]
  9. 【三支火把】--- 关于BIOSUEFI查阅资料网站总结
  10. 一条拼了40min的hql引发的思考
  11. 【图像去噪】基于matlab GUI均值+中值+高斯低通+多种小波变换图像去噪【含Matlab源码 856期】
  12. 前端基础—HTML制作课程表
  13. ReactNative进阶(五十三):Keystore file ‘..android.keystore‘ not found for signing config ‘debug‘问题解决
  14. NTFS权限和文件详解
  15. 区分苹果开发者的网址(开发者网址和管理您的appid网址)及证书信息
  16. linux输入文件后clustalw,合并提取后的domain序列之后,linux系统中的clustalw不能读出蛋白信息...
  17. matlab差值后求斜率,用三次样条插值求离散点斜率 matlab程序
  18. Gitbook详解(七)-Markdown编辑器推荐
  19. 改掉这些坏习惯让你的学习效率升高
  20. put请求带body

热门文章

  1. #计算机视频处理 使用ffmpeg对视频进行操作、视频分镜
  2. Catia开发之测量(C#)
  3. csgo怎么一直连接服务器失败,CSGO连接到官方服务器失败怎么办?CSGO连接到官方服务器失败解决办法...
  4. 《PBI系列 类目大词 群店 竞争透视 07》花随花心著
  5. 【Pycharm好用功能】
  6. Pico SDK在Unity中如何控制移动
  7. word排版之章节自动化编号
  8. java list 泛型 class_List 添加 Class 泛型
  9. 指针中的战斗机---智能指针!!!
  10. 在centos7.5中解压.tgz