2012-06-05 74 views
0

我正在读取图像并将其存储到2d矩阵中。做一些关于它的计算如下所示后:matlab - 从矩阵中获取矢量(颤抖图)

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

我的问题是,我该如何访问这些向量(箭头) quiverplot?我需要稍后在交叉产品中使用这些向量。谢谢。

+2

代码中的Ox和Oy是*这些向量(分别是x和y分量)。 '颤抖'不是在计算它们,它只是绘制它们。 – tmpearce

+0

感谢您的回复。如果我尝试交叉(Ox,Oy),那么我得到一个错误,因为交叉期望矢量,但在这里我提供矩阵。那么我如何从Ox和Oy中检索这些载体,以便它们适合在交叉产品中使用? – brucezepplin

+0

另外,如果我做交叉(0x(1,1),Oy(1,1)我得到以下错误: ???错误使用==>交叉在37 A和B必须至少有一个维度长度为3. – 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) 

(注意,我刚刚制作了一套新的通过添加一个...来获得交叉产品的对象...您可以使用自己的)