2012-06-05 2 views
0

나는 이미지를 읽고 그것을 2 차원 행렬에 저장하고있다. 여기에 그림과 같이 몇 가지 계산을 수행 한 후 :matlab - 행렬에서 벡터를 얻는다 (quiverplot)

im = rgb2gray(imread('ellipse.png')); 
im = im(:,:,1); 
w = size(im,1);     
h = size(im,2);        
[dx,dy] = gradient(double(im));     
[x y] = meshgrid(1:h,1:w);      
a = zeros(temp); 
lambda = 1; 
Ox =-1.^lambda.* -x; 
Oy =-1.^lambda.* y; 
hold on         
quiver(x,y,Ox,Oy) 

나는 quiverplot에서 다음 이미지를 얻을 :로부터

https://docs.google.com/file/d/0B0iDswLYaZ0zR2lUQ2NkZnd1QXM/edit?pli=1

내 질문은, 어떻게 그 벡터 (화살표)에 액세스 할됩니다 떨림 무늬? 나중에 교차 제품에서 벡터를 사용해야합니다. 감사.

+2

코드에서'Ox'와'Oy'는 각각 벡터 (x와 y 구성 요소)입니다. '떨림'은 그것들을 계산하지 않고 단지 그것들을 계획하고 있습니다. – tmpearce

+0

답장을 보내 주셔서 감사합니다. 십자가 (Ox, Oy)를 시도하면 오류가 발생합니다. 왜냐하면 십자가가 벡터를 기대하기 때문입니다. 그러나 여기에서는 행렬을 제공하고 있습니다. 그래서 어떻게 교차 상품에서 사용하기에 적합하도록 Ox과 Oy에서 벡터를 검색합니까? – brucezepplin

+0

만약 내가 교차 (Ox (1,1), Oy (1,1))하면 다음과 같은 오류가 발생합니다 : 37 =에서 ==> 십자가를 사용하는 오류 A와 B는 적어도 하나의 차원 – brucezepplin

답변

0

는 쉬운 방법은 큰 NxMx3 블록으로 행렬 스택이 같은 반대 십자가를 호출 할 것이다 :

myVectors = cat(3, Ox, Oy, zeros(size(Ox))); 
someOtherVectors = myVectors+1; 
result = cross(myVectors,someOtherVectors); 

또이 같은 자신의 간 기능을 작성하는 것입니다 :

function result = cross2d(Ax, Ay, Bx, By) 
     result = Ax.*By - Ay.*Bx; 
end 

Mx = Ox + 1; 
My = Oy + 1; 

result2 = cross2d(Ox, Oy, Mx, My) 

(난 그냥 새로운 세트를 만든 것을 참고 :

그리고 코드에서 다음과 같이 호출 하나를 추가하여 십자가를 잡는 벡터 ...

관련 문제