【问题标题】:Matlab :index exceeds matrix dimensionMatlab:索引超出矩阵维度
【发布时间】:2014-04-10 06:35:22
【问题描述】:

这是我的 matlab 代码的一部分:

    indexPairs = matchFeatures(featuresA, featuresB, 'Metric', 'SSD');
    numMatchedPoints = cast(size(indexPairs, 2), 'int32');
    pointsA = pointsA(:, indexPairs(1, :));
    pointsB = pointsB(:, indexPairs(2, :));

错误:

Index exceeds matrix dimensions.

Error in all_three (line 81)
pointsA = pointsA(:, indexPairs(1, :));

你能帮我解决一下吗?

【问题讨论】:

  • 第 3 行之前的 size(pointsA) 是什么? max(indexPairs(1,:)) 是什么? size(indexPairs) 是什么?
  • @Dan 对,抱歉,已编辑。现在再来点咖啡。

标签: matlab matlab-cvst


【解决方案1】:

很清楚是什么导致了错误。 indexPairs(1, :) 的最大值大于size(pointsA,2)。这会引发超出范围的错误,因为indexPairs 尝试访问矩阵之外的值。这可能是由代码中的索引错误引起的。要解决它,您需要进入调试模式并找出代码中发生这种情况的位置。

【讨论】:

    【解决方案2】:

    来自matchfeatures 文档:

    indexPairs = matchFeatures(features1,features2) 返回一个 P-by-2 矩阵,indexPairs,包含 P 对索引。

    features1features2是这样描述的:

    特征集,指定为 M1×N 矩阵,其中 N 是 每个特征向量或 binaryFeatures 对象。此对象为二进制 描述符是使用快速视网膜关键点 (FREAK) 生成的 描述符。

    尝试从这里更改最后两行:

    pointsA = pointsA(:, indexPairs(1, :));
    pointsB = pointsB(:, indexPairs(2, :));
    

    ...到这个:

    pointsA = pointsA(indexPairs(:, 1), :);
    pointsB = pointsB(indexPairs(:, 2), :);
    

    另外,numMatchedPoints 计算不正确,因为size(indexPairs, 2)(列数)将始终为 2。将其更改为此(行数):

    numMatchedPoints = cast(size(indexPairs, 1), 'int32');
    

    【讨论】:

      【解决方案3】:

      您很可能从detect****Features() 函数之一获得pointsApointsB,对吗?那么pointsApointsB就是cornerPoints等“点对象”之一。试试这个:

       pointsA = pointsA(indexPairs(1, :));
       pointsB = pointsB(indexPairs(2, :));
      

      另外,拉斐尔是正确的:

      numMatchedPoints = cast(size(indexPairs, 1), 'int32');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-25
        • 1970-01-01
        相关资源
        最近更新 更多