2013-02-20 4 views
0

Я написал следующий фрагмент кода, однако, я получаю индекс за пределами ошибки. Я не уверен, как это исправить. Кто-нибудь знает, как я могу это решить. Заранее спасибо!MATLAB index out of bounds error

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); 
+0

Перед тем, как вложенные петли проверяют значение 'col-1' – slayton

+0

Значение col-1 равно 2699 –

+0

Размер cyy однако равен 700 на 900 –

ответ

1

Изменить линия, где вы рассчитать размер изображения для:

[строки Col] = размер()-л;

изображение RGB и так (я полагаю) 700 на 900 на 3. Поскольку вход имеет три измерения, и вы задаете только два выхода, он умножает последние два измерения вместе, давая цв = 2700 .