2012-07-24 117 views
1

有人可以解釋爲什麼我在我的代碼中得到以下錯誤?它涉及將雙精度傳遞給Z,但我沒有看到參數a和b是如何加倍的。matlab:???未定義的函數或方法輸入參數的類型'雙'

clear all; 
im = imread('smallblob.png'); 
im = im(:,:,1); 
w = size(im,1); 
h = size(im,2); 
[dx,dy] = gradient(double(im)); 
lambda = 1; 
Ox = -1.^lambda.*(-dx); 
Oy = -1.^lambda.*(dy); 
magO = sqrt(Ox.^2 + Oy.^2); 

Ix = dx; 
Iy = dy; 
magI = sqrt(Ix.^2 + Iy.^2); 

N=w+1; 
yp(1:N)=-0.5*w:1:0.5*w; 
xp(1:N)=-0.5*h:1:0.5*h; 
Y(1:w,1:h)=0; 
X(1:w,1:h)=0; 
for i=1:w 
    Y(i,:)=yp(i); 
end 
for i=1:h 
    X(:,i)=xp(i); 
end 


for a=1:h 
    for b=1:w 
     for i=1:N-1 
      Rx(i)=-0.5*(Ix(i)+Ix(i+1)); 
      Ry(i)=-0.5*(Iy(i)+Iy(i+1)); 
      Rz(i)=Z(a,b);     %HERE IS THE ERROR 
      dlx(i)=Ix(i+1)-Ix(i); 
      dly(i)=Iy(i+1)-Iy(i); 
     end 
     Rx(N)=-0.5*(Ix(N)+Ix(1)); 
     Ry(N)=-0.5*(Iy(N)+Iy(1)); 
     Rz(N)=Z(a,b); 
     dlx(N)=-Ix(N)+Ix(1); 
     dly(N)=-Ix(N)+Ix(1); 

     for i=1:N 
      Xcross(i)=dly(i).*Rz(i); 
      Ycross(i)=-dlx(i).*Rz(i); 
      Zcross(i)=(dlx(i).*Ry(i))-(dly(i).*Rx(i)); 
      R(i)=sqrt(Rx(i).^2+Ry(i).^2+Rz(i).^2); 
     end 

     Bx1=(magI*magO./((R.^3))).*Xcross; 
     By1=(magI*magO./((R.^3))).*Ycross; 
     Bz1=(magI*magO./((R.^3))).*Zcross; 

     BX(a,b)=0; 
     BY(a,b)=0; 
     BZ(a,b)=0; 

     for i=1:N 
      BX(a,b)=BX(a,b)+Bx1(i); 
      BY(a,b)=BY(a,b)+By1(i); 
      BZ(a,b)=BZ(a,b)+Bz1(i); 
     end 
    end 
end 



??? Undefined function or method 'Z' for input arguments of type 'double'. 

Error in ==> MAC4 at 34 
Rz(i)=Z(a,b); 

非常感謝!

回答

7

您試圖在定義之前訪問變量Z。在訪問其內容之前,您需要指定一個值爲Z

+0

謝謝指出我愚蠢的錯誤。 – brucezepplin 2012-07-24 21:17:17

相關問題