在MATLAB中索引越界错误

时间:2013-11-04 11:22:18

标签: matlab rgb pixel indexoutofboundsexception

我正在尝试获取用户选择的图像像素的RGB值,但是我得到了这个超出范围的错误。这是代码:

x = int16(zeros(10,1));
y = int16(zeros(10,1));

imshow(img);
[x,y] = ginput; 
disp(['x = ' num2str(x)]);
disp(['y= ' num2str(y)]);
r = img(x,y,1);
g = img(x,y,2);
b = img(x,y,3);

这是我得到的错误(当用户选择像素120,131时):

试图访问img(120,131,1); index必须是正整数或逻辑。

要停止出现此错误,我将x和y声明为int16,但错误仍然存​​在。然后我尝试手动放置像素的值,所以我做了这样的事情:

 r = img(229,104,1);

现在的错误是:

试图访问img(229,104,1);索引 边界因为大小(img)= [217,331,3]。

这怎么可能如果像素不是真的超出范围?代码有什么问题?

2 个答案:

答案 0 :(得分:2)

您将X-Y坐标与行列坐标混淆。

ginput重新调整像素的x(=列),y(=行)坐标 访问矩阵img( ?, ?, : )时,您需要提供(= y),( - x)坐标:

>> img( y, x, 1 )

答案 1 :(得分:0)

除了Shai的回答之外,我还想知道对ginput的调用是否不会覆盖int16x声明为y的数据类型?如果我在Octave做类似的事情,我会得到:

>> [x,y]=ginput
x =  79.798
y =  72.042

我建议:

r = img(round(y),round(x),1);
g = img(round(y),round(x),2);
b = img(round(y),round(x),3);