MATLAB索引超出界限错误

时间:2013-02-20 15:44:57

标签: matlab

我编写了以下代码片段,但是我收到了一个索引超出范围的错误。我不确定如何解决这个问题。有谁知道我怎么解决它。提前谢谢!

image = imread('image_3.jpg');

%parameters
N = 100; 
smth = rgb2gray(image);

% Calculating size of image
[row col] = size(image);

eline = smth; %eline is simply the image intensities

[grady,gradx] = gradient(double(smth));

eedge = -1 * sqrt ((gradx .* gradx + grady .* grady)); %eedge is measured by gradient in the image

m1 = [-1 1];
m2 = [-1;1];
m3 = [1 -2 1];
m4 = [1;-2;1];
m5 = [1 -1;-1 1];

cx = conv2(smth,m1,'same');
cy = conv2(smth,m2,'same');
cxx = conv2(smth,m3,'same');
cyy = conv2(smth,m4,'same');
cxy = conv2(smth,m5,'same');

for i = 1:row
for j= 1:col-1

    eterm(i,j) = (cyy(i,j)*cx(i,j)*cx(i,j) -2 *cxy(i,j)*cx(i,j)*cy(i,j) + cxx(i,j)*cy(i,j)*cy(i,j))/((1+cx(i,j)*cx(i,j) + cy(i,j)*cy(i,j))^1.5);
end
end

??? Attempted to access cyy(1,901); index out of bounds because
size(cyy)=[700,900].

Error in ==> snake at 31
    eterm(i,j) = (cyy(i,(j-1)+1)*cx(i,j)*cx(i,j) -2
    *cxy(i,j)*cx(i,j)*cy(i,j) +
    cxx(i,j)*cy(i,j)*cy(i,j))/((1+cx(i,j)*cx(i,j) +
    cy(i,j)*cy(i,j))^1.5);

1 个答案:

答案 0 :(得分:1)

将计算图像大小的行更改为:

  

[row col] = size(smth);

图像是rgb,因此(我推测)700乘900乘以3.因为输入有三个维度而你只需要两个输出,所以它将最后两个维度相乘,得到col = 2700。