这是我的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, :));
你能帮我解决一下吗?
答案 0 :(得分:1)
很清楚导致错误的原因。 indexPairs(1, :)
的最大值比size(pointsA,2)
的值大。由于indexPairs
尝试访问矩阵外的值,因此会引发超出范围的错误。这可能是由代码中的索引错误引起的。要解决此问题,您需要进入调试模式并找出代码中发生这种情况的位置。
答案 1 :(得分:1)
来自matchfeatures文档:
indexPairs = matchFeatures(features1,features2)返回P-by-2 matrix,indexPairs,包含P对索引。
features1
和features2
的描述如下:
特征集,指定为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
函数中获得pointsB
和detect****Features()
,对吗?然后pointsA
和pointsB
是"点对象之一"例如cornerPoints
。试试这个:
pointsA = pointsA(indexPairs(1, :));
pointsB = pointsB(indexPairs(2, :));
此外,拉斐尔是正确的:
numMatchedPoints = cast(size(indexPairs, 1), 'int32');