MATLAB估计未校准的校正非确定性行为
我已经编写了下面的函数来执行图像校正。我只使用标准的MATLAB库函数(和)和我自己的包装函数对MATLAB进行立体声校正。然而,在相同的输入下,每次我都会得到不同的结果。我知道这与使用RANSAC估计基本矩阵有关。然而,整改有时很糟糕,有时还可以。例如,使用相同的输入对我的函数进行了10次不同的运行,两次结果都可以,而8次则给出了此错误的变化:MATLAB估计未校准的校正非确定性行为,matlab,image-processing,computer-vision,matlab-cvst,Matlab,Image Processing,Computer Vision,Matlab Cvst,我已经编写了下面的函数来执行图像校正。我只使用标准的MATLAB库函数(和)和我自己的包装函数对MATLAB进行立体声校正。然而,在相同的输入下,每次我都会得到不同的结果。我知道这与使用RANSAC估计基本矩阵有关。然而,整改有时很糟糕,有时还可以。例如,使用相同的输入对我的函数进行了10次不同的运行,两次结果都可以,而8次则给出了此错误的变化: Warning: An epipole may be located inside of an image. The epipoles are loc
Warning: An epipole may be located inside of an image. The epipoles
are located at [285.8503,76.1656] in I1 and [265.5734,130.3931] in I2,
but the specified imageSize was [320,568]. Severe distortion may
result if T1 or T2 are used to transform these images. See
isEpipoleInImage for more information.
> In coder.internal.warning (line 7)
In cvalgEstimateUncalibratedRectification (line 114)
In estimateUncalibratedRectification (line 107)
In pairwiseTransformation (line 48)
我相信这意味着矫正无法将对极投影到无穷远
这是怎么回事?值得注意的是,我的图像之间有279个假定匹配和32个内部匹配
我的职能:
function [t1, t2] = pairwiseTransformation(img1, img2, features1, features2)
% Identify putative matches
[matches1, matches2] = matchFeaturePoints(rgb2gray(img1), features1, ...
rgb2gray(img2), features2);
% Estimate the fundamental matrix so that matches2' * F * matches1 = 0
% F transforms matches1 to a line that runs through the corresponding
% point in matches1. Therefore, any rotation and translation derived from F
% (and E) will apply to camera 2's relative position, holding camera 1 fixed.
[F, inliers] = estimateFundamentalMatrix(matches1, matches2, 'Method', 'RANSAC', ...
'NumTrials', 2000, 'DistanceThreshold', 1e-4);
% Use the RANSAC inliers to determine the relative position of img2 compared to img1
inlierMatches1 = matches1(inliers, :);
inlierMatches2 = matches2(inliers, :);
[t1, t2] = estimateUncalibratedRectification(F, inlierMatches1, inlierMatches2, ...
size(img1));
r1 = imwarp(img1, projective2d(t1), 'OutputView', imref2d(size(img1)));
r2 = imwarp(img2, projective2d(t2), 'OutputView', imref2d(size(img1)));
figure;
subplot(2,2,1),imshow(img1)
subplot(2,2,2),imshow(img2)
subplot(2,2,3),imshow(r1)
subplot(2,2,4),imshow(r2)
end
这是一个不错的校正(上排是原始图像,下排是校正的):
这是一个彻底失败的努力,给了epipole警告:
32个内部匹配似乎太少了。。。你假定的匹配看起来怎么样 要尝试的一件事是调整
estimateFundamentalMatrix
的参数。我将使用MSAC
而不是RANSAC
,并将距离阈值增加到.1甚至1。同时,您可能希望将置信度
参数增加到99.99。这将迫使RANSAC进行更多的试验,并增加你找到正确解决方案的机会
另一个尝试是从matchFeatures
中获得更多更好的假定匹配。您应该尝试调整feature detector函数的参数以获得更多功能,然后调整matchFeatures
的参数以确保匹配仍然良好。您还可以尝试不同的检测器和描述符。32内部匹配似乎太少。。。你假定的匹配看起来怎么样
要尝试的一件事是调整estimateFundamentalMatrix
的参数。我将使用MSAC
而不是RANSAC
,并将距离阈值增加到.1甚至1。同时,您可能希望将置信度
参数增加到99.99。这将迫使RANSAC进行更多的试验,并增加你找到正确解决方案的机会
另一个尝试是从matchFeatures
中获得更多更好的假定匹配。您应该尝试调整feature detector函数的参数以获得更多功能,然后调整matchFeatures
的参数以确保匹配仍然良好。你也可以尝试不同的检测器和描述符。再看一看,我猜拙劣的努力得到了纠正,只是结果很糟糕。再看一看,我猜拙劣的努力得到了纠正,只是结果很糟糕。