<致力于专业的图像质量与色彩科技知识分享交流平台>
图像质量及色彩科技知识分享平台  > 所属分类  >  镜头畸变(Lens Distortion)   
[2] 评论[0] 编辑

使用imatest软件帮助校正畸变

目录

使用imatest软件帮助校正畸变编辑本段

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

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

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

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

使用Imatest帮助校正畸变使用Imatest帮助校正畸变


径向几何失真

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

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

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

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

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

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

Imatest中的畸变系数

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

我们作如下定义:

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

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

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

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

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

Imatest畸变分析结果Imatest畸变分析结果

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

基于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畸变分析结果SFRplus畸变分析结果

inverseCoeffs = [0.2259 0 1 0];

% distortion coefficients reported by SFRPlus

im_d = double(imread('sfrplus_distortion.jpg'));
width = size(im_d, 2);
height = size(im_d, 1);
channels = size(im_d, 3);


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


xs = ((1:width) - (width+1)/2);
ys = ((1:height) - (height+1)/2);
[X, Y] = meshgrid(xs,ys);


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

[THETA, RHO_d] = cart2pol(X, Y);

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

RHO_d = RHO_d/normFactor*scaleFactor;


(3)

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

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

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

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

forwardCoeffs = invert_distortion_poly(inverseCoeffs);
RHO_u = polyval(forwardCoeffs, RHO_d);
% Convert back to cartesian coordinates so get the (x,y) distorted sample points in image space
[X_d, Y_d] = pol2cart(THETA, RHO_u*normFactor);

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

% Re-sample the image at the corrected points using the interp2 function. Apply to each color
% channel independently, since interp2 only works on 2-d data (hence the name).

im_u = zeros(height,width,channels);

% pre-allocate space in memory

for c = 1:channels

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

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

end

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

SFRplus畸变校正后SFRplus畸变校正后

 

 

 

 

 

 

 

 

实拍校正图例

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

拍摄的原图拍摄的原图

畸变校正后的图片畸变校正后的图片



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

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


附件列表


2

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。

如果您认为本词条还有待完善,请 编辑

上一篇 使用Imatest软件分析ColorShading    下一篇 EMVA1288欧洲工业视觉标准

标签

同义词

暂无同义词