Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB估计未校准的校正非确定性行为_Matlab_Image Processing_Computer Vision_Matlab Cvst - Fatal编程技术网

MATLAB估计未校准的校正非确定性行为

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

我已经编写了下面的函数来执行图像校正。我只使用标准的MATLAB库函数(和)和我自己的包装函数对MATLAB进行立体声校正。然而,在相同的输入下,每次我都会得到不同的结果。我知道这与使用RANSAC估计基本矩阵有关。然而,整改有时很糟糕,有时还可以。例如,使用相同的输入对我的函数进行了10次不同的运行,两次结果都可以,而8次则给出了此错误的变化:

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
的参数以确保匹配仍然良好。你也可以尝试不同的检测器和描述符。

再看一看,我猜拙劣的努力得到了纠正,只是结果很糟糕。再看一看,我猜拙劣的努力得到了纠正,只是结果很糟糕。