概述
近期在使用Lytro公司的ILLUM相机拍摄近处物体时发现畸变很严重,已经到了肉眼可以看到明显畸变的地步。在接下来的过程中我将向大家展示如何对ILLUM相机进行相机畸变的修正以及所遇到的问题
第一步:按照LFToolbox中描述的那样,在对应的相机序列号下建立一个PlenCalSmallExample的文件夹,然后再PlenCalSmallExample文件夹下建立一个01文件夹(因为后面生成的文件跟01文件夹处于同级关系,不新建文件夹,整个文件夹中会很混乱)。最后建立文件夹格式如下:SampleCamerasB5151500510PlenCalSmallExample 1
第二步拍摄棋盘格图像,我在这一步上吃了很大的亏,所以详细讲讲。按照常理来说,我们打印一张棋盘格纸张后对其进行不同角度的拍摄即可。但这一步中最重要的有以下几个方面,一是获得一个确知长度的棋盘格纸张。第二就是拍摄时不要对相机的焦距等参数进行改变,在拍摄好第一张参数后就按照此参数一直拍下去。第三就是在拍摄时尽量使棋盘格在画幅中占据比较大的位置,这样效果较好一些。
第三步就是按照pdf中讲的那样,运行LFUtilDecodeLytroFolder( 'CamerasB5151500510PlenCalSmallExample');对PlenCalSmallExample文件夹下所有的标定板图像进行解码操作。
第四步运行以下步骤:
CalOptions.ExpectedCheckerSize = [10,8]; %先宽后高
CalOptions.ExpectedCheckerSpacing_m = 1e-3*[12.70, 12.70];
LFUtilCalLensletCam( 'CamerasB5151500510PlenCalSmallExample', CalOptions);
这些选项告诉校准功能,棋盘格间距为12.70×12.70mm,并且有10×6个角。 请注意,此计数不包括边角,因此标准的8×8方形棋盘产生7×7个角。这一步中会获得相应的json文件用于后面的操作。
第五步运行LFUtilProcessCalibrations('CamerasB5151500510PlenCalSmallExample');生成 calibration database文件。
最后一步就是运行矫正程序了DecodeOptions.OptionalTasks = 'Rectify'; LFUtilDecodeLytroFolder('Images/PlenCalSmallExample', ... [], DecodeOptions);
这就是矫正的所有流程。
不过为什么这么简单的一个过程让我做了接近两星期都还没成功呢。主要原因都是来自我说的第二步中,我走了很多弯路注意事项都在第二步中了。然后我下载文献中提到的数据集进行了测试我发现只有dataB可以实现,dataC就很糟糕存在很大的黑区。在我自己实际的参数条件下结果同样糟糕。即使在获得比较准确得方格参数后效果好了很多但整体效果都达不到目标要求。
以下为棋盘格单个格子宽和高取不同参数得情况下得结果:(我使用matlab打印得标定板ppi为72,每个方格得到得宽和高都是12.7mm)
高宽 | 12.68 | 12.69 | 12.70 |
12.69 |
|
从以上结果可以看到不同参属下得到得结果有较大差异,参数选择不当会有很大得黑区。但即使按照打印标准来设置参数,仍然得不到一个可以使用得结果,问题究竟在哪里,我现在也只能怀疑时输入参数不对。
生成标定板得代码如下
clear
clc
n1 = 12*11/24*72;
n2 = 12*9/24*72;
t1=12/24*72;%1英寸=25.4mm,由于n必须是整数,所以这里25.4改为25估算,实际打印效果会稍微大那个1mm左右
t2=12/24*72;
I = zeros(n1,n2);
I = mat2cell(I,t1*ones(1,11),t2*ones(1,9));
for i = 1:11
for j = 1:9
if mod(i+j,2)
I{i,j} = ones(t1,t2);
end
end
end
I = cell2mat(I);
figure;
imshow(I);
imwrite(I,'a.bmp');
最后
以上就是苹果胡萝卜为你收集整理的ILLUM 光场相机矫正的全部内容,希望文章能够帮你解决ILLUM 光场相机矫正所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复