Matlab:指数超过矩阵维度

时间:2014-04-10 06:35:22

标签: matlab matlab-cvst

这是我的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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

来自matchfeatures文档:

  

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

features1features2的描述如下:

  

特征集,指定为M1-by-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');

答案 2 :(得分:1)

您很可能从其中一个pointsA函数中获得pointsBdetect****Features(),对吗?然后pointsApointsB是"点对象之一"例如cornerPoints。试试这个:

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

此外,拉斐尔是正确的:

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