MATLAB“下标索引必须是真正的正整数或逻辑”

Posted

技术标签:

【中文标题】MATLAB“下标索引必须是真正的正整数或逻辑”【英文标题】:MATLAB "Subscript indices must either be real positive integers or logicals" 【发布时间】:2016-06-12 00:55:30 【问题描述】:

在计算机视觉系统工具箱的 MATLAB 示例页面中,有一段代码用于在杂乱场景中使用点特征匹配进行对象检测。我在我的系统上运行相同的代码,但是它给出了错误“下标索引必须是真正的正整数或逻辑”,其中代码试图匹配两个图像之间的相似性。

I1 = rgb2gray(imread('kitchen.jpg'));
I2 = rgb2gray(imread('loops.jpg'));
points1 = detectSURFFeatures(I1);
points2 = detectSURFFeatures(I2);
[features1, valid_points1] = extractFeatures(I1, points1);
[features2, valid_points2] = extractFeatures(I2, points2);
indexPairs = matchFeatures(features1, features2);
matchedPoints1 = valid_points1(indexPairs(:, 1), :);    //ERROR
matchedPoints2 = valid_points2(indexPairs(:, 2), :);
figure; showMatchedFeatures(I1, I2, matchedPoints1, matchedPoints2);

我是 MATLAB 新手,只是想理解这些概念,但我陷入了困境。任何帮助表示赞赏。谢谢。

【问题讨论】:

我认为这意味着下标索引不是正整数或逻辑。所以我会检查indexPairs(:,1) 是否是一个正整数或逻辑数组或其他数组。 indexPairs 是一个由 0 和正数组成的数组,只要它设法找到两个图像之间的匹配项。 那么它是一个逻辑数组(仅限 1 和 0)还是数字(1 和您要索引到的数组的最大大小之间的所有整数)? 它是一个由 0 和与索引位置相关的数字组成的数组,因此是正整数。 这就是您收到错误的原因。索引可以是逻辑 OR 整数,而不是两者。 【参考方案1】:

我用示例图像尝试了您的代码(稍作改动),它工作正常:

//open the image
I = rgb2gray(imread('img_0236.jpg'));

//extract the left stereo image
I1 = I(:,1:800);
//extract the right stereo image
I2 = I(:,801:1600);

points1 = detectSURFFeatures(I1);
points2 = detectSURFFeatures(I2);
[features1, valid_points1] = extractFeatures(I1, points1);
[features2, valid_points2] = extractFeatures(I2, points2);
indexPairs = matchFeatures(features1, features2);
matchedPoints1 = valid_points1(indexPairs(:, 1));    
matchedPoints2 = valid_points2(indexPairs(:, 2));
figure; showMatchedFeatures(I1, I2, matchedPoints1, matchedPoints2);

我从http://www.stereomaker.net/java/spva/img_0236.jpg下载了示例图片

【讨论】:

您使用的图片(kitchen.jpgloops.jpg)尺寸是否相同?您可以使用size() 功能检查它们 图像尺寸不同。我使用函数 imresize() 调整了更大的图像大小并再次尝试。不幸的是,同样的错误。 我使用了来自:stereomaker.net/java/spva/img_0236.jpg 的示例立体图像,并运行了您的代码并进行了一些细微的更改,它就可以工作了。我将编辑答案以向您展示我所做的。你可以试试看它是否有效? 它仍然无法正常工作。我下载了图像并运行了代码。同样的错误。同一行。我正在开发带有所有必需工具箱的 2015a 版本。我是否缺少一些基本的安装文件?

以上是关于MATLAB“下标索引必须是真正的正整数或逻辑”的主要内容,如果未能解决你的问题,请参考以下文章

用matlab绘制正六边形,求代码~~

电磁基于matlab求解瞬变电磁TEM层状介质正演含Matlab源码 2164期

matlabplot纵坐标要为正整数吗

PID优化基于matlab simulink正余弦算法PID优化设计含Matlab源码 2233期

Matlab错误:下标索引必须是实数正整数或逻辑数

matlab怎么用for语句求阶乘