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