发布
社区首页 >问答首页 >MATLAB estimateUncalibratedRectification非确定性行为

MATLAB estimateUncalibratedRectification非确定性行为
EN

Stack Overflow用户
提问于 2015-12-08 04:39:55
回答 1查看 255关注 0票数 1

我编写了下面的功能来执行图像校正。我只使用标准的MATLAB库函数(estimateUncalibratedRectificationestimateFundamentalMatrix)和我自己的包装函数到MATLAB的matchFeatures来执行立体校正。然而,使用相同的输入,每次都得到不同的结果。我知道这与使用RANSAC估计基本矩阵有关。然而,整风有时是可怕的,也是可以接受的。例如,在输入相同的10种不同的函数运行时,有两种结果是可以的,而8则给出了这个错误的变化:

代码语言:javascript
代码运行次数:0
复制
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 inlierMatches之间的图像。

我的职能:

代码语言:javascript
代码运行次数:0
复制
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

这里有一个很好的纠正(上面的行是原始图像,底部是校正的):

下面是一次完全失败的尝试,给出了Epi极点的警告:

EN

回答 1

Stack Overflow用户

发布于 2015-12-10 21:56:50

32场对决似乎太少了..。你们的火柴看上去怎么样?

需要尝试的一件事是调整estimateFundamentalMatrix的参数。我将使用MSAC而不是RANSAC,并将DistanceThreshold增加到类似于.1甚至1的地方。同时,您可能希望将Confidence参数增加到99.99。这将迫使RANSAC进行更多的试验,并增加您找到正确解决方案的机会。

另一件事是从matchFeatures获得更多和更好的假设匹配。您应该尝试调整您的特征检测器函数的参数以获得更多的特性,然后调整matchFeatures的参数以确保匹配仍然良好。您还可以尝试不同的检测器和描述符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34148125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档