2012-06-05 2 views
0

Я читаю изображение и сохраняю его в 2d-матрице. после выполнения некоторых вычислений на нем, как показано здесь: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

Мой вопрос, как я могу получить доступ к этим векторам (стрелки) от quiverplot? Мне нужно использовать эти векторы в кросс-продукте позже. Благодарю.

+2

'Ox' и' Oy' в вашем коде * являются * этими векторами (x и y компоненты соответственно). 'quiver' не вычисляет их, а просто замышляет их. – tmpearce

+0

Спасибо за ваш ответ. если я пытаюсь выполнить cross (Ox, Oy), тогда я получаю ошибку, потому что cross ожидает векторов, но здесь я поставляю матрицы. так как я могу получить векторы из Ox и Oy, чтобы они были пригодны для использования в кросс-продукте? – brucezepplin

+0

также, если я делаю крест (Ox (1,1), Oy (1,1) Я получаю следующую ошибку: Ошибка при использовании ==> cross at 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) 

(Обратите внимание, что я только что сделал новый набор векторы, чтобы взять перекрестный продукт, добавив один ... вы бы использовали свой собственный)

Смежные вопросы