下标索引必须是实数正整数或逻辑错误+代码

时间:2013-02-20 16:28:27

标签: matlab

我想知道是否有人可以向我解释这个错误的含义。并且,如果可能的话,如何解决它?     ???下标索引必须是实数正整数或逻辑。

Error in ==> interp2>linear at 344
F =  ( arg3(ndx).*(onemt) + arg3(ndx+1).*t ).*(1-s) + ...

Error in ==> interp2 at 220
zi = linear(ExtrapVal,x,y,z,xi,yi);

Error in ==> snake at 71
ssx = gamma*xs - kappa*interp2(fx,xs,ys);

这是我的完整代码:

image = imread('image.jpg');

%parameters
alpha = 0.001;
beta = 0.4;
kappa=0.0001;
gamma = 100;
N = 100; 
wl = 10;
we = 10;
wt = 10;
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:700
    for j= 1:900
    % eterm as deined in Kass et al Snakes paper
    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

eext = (double(wl.*eline) + double(we.*eedge -wt) .* eterm); %eext as a weighted sum of eline, eedge and eterm

[fx, fy] = gradient(eext); %computing the gradient

xs=1:900;
xs=xs';
ys=repmat(242,1,900);
ys=ys'

[m n] = size(xs);
[mm nn] = size(fx);

%populating the penta diagonal matrix
A = zeros(m,m);
b = [(2*alpha + 6 *beta) -(alpha + 4*beta) beta];
brow = zeros(1,m);
brow(1,1:3) = brow(1,1:3) + b;
brow(1,m-1:m) = brow(1,m-1:m) + [beta -(alpha + 4*beta)]; % populating a template row
 for i=1:m
   A(i,:) = brow;
    brow = circshift(brow',1)'; % Template row being rotated to egenrate different rows in       pentadiagonal matrix
 end

 [L U] = lu(A + gamma .* eye(m,m));
 Ainv = inv(U) * inv(L); % Computing Ainv using LU factorization

 %moving the snake in each iteration
for i=1:N;

ssx = gamma * xs - kappa * interp2(fx,xs,ys); %This is where I receive the error
ssy = gamma * ys - kappa * interp2(fy,xs,ys);

%calculating the new position of snake
xs = Ainv * ssx;
ys = Ainv * ssy;


%Displaying the snake in its new position
 %     imshow(image,[]); 
 %     hold on;  
       plot([xs; xs(1)], [ys; ys(1)], 'r-');
 %     hold off;
 %     pause(0.001)    
        end;

2 个答案:

答案 0 :(得分:0)

听起来你正试图访问数组的位置0或非整数(0.1),Matlab数组从位置1开始。

>> a=[1,2,3];
>> a(0)
??? Subscript indices must either be real positive integers or logicals.
>> a(1)

ans =

     1

答案 1 :(得分:0)

您似乎向interp2提供了向量 xs,而不是矩阵 xs

另请注意,最好not to use i and j as variables in Matlab