基本矩阵

时间:2016-10-27 12:39:56

标签: matlab matrix geometry

我的目标是在右图中绘制对应于基本矩阵中左图像中的点的图。

我读了两张图片

imgG = imread('ImgLeft.BMP');
imgD = imread('ImgRight.BMP');

%normilized matrix
N=[2/320    0       -1;
   0        2/240   -1;
   0        0        1];

循环读取9个点以创建基本矩阵

   for i=1:n
imshow(imgG); 
[xg(i),yg(i)] = ginput(1);
xg(i) = xg(i)/norm([xg(i),yg(i)]);
yg(i) = yg(i)/norm([xg(i),yg(i)]);
imshow(imgD);
[xd(i),yd(i)] = ginput(1);
xd(i) = xd(i)/norm([xd(i),yd(i)]);
yd(i) = yd(i)/norm([xd(i),yd(i)]);
end

 for j=1:n
A(j,1:9) = [xg(j)*xd(j),yg(j)*xd(j),xd(j),xg(j)*yd(j),yg(j)*yd(j),yd(j),xg(j),yg(j), 1];
end

求解方程A * F = 0 I juste使用SVD

[U,D,V] = svd(A);
F= reshape(V(:,9),3,3);
[U1,D1,V1] = svd(F);
D1(3,3) = 0; 
F = U1*D1*transpose(V1);
F = N.' * F * N;

对于剩下的代码,我试图绘制一个选择点的极线,但是极线没有穿过另一个图像中的对应点(见下图) 看图像:http://s11.postimg.org/mk51x9u5f/image.png

    imshow(imgG);
[px,py] = ginput(1);
a= F(1,1)*px+F(1,2)*py+F(1,3);
b= F(2,1)*px+F(2,2)*py+F(2,3);
c= F(3,1)*px+F(3,2)*py+F(3,3);


a= a/norm([a,b,c]);
b=b/norm([a,b,c]);
c=c/norm([a,b,c]);

y1 = (-a-c)/b
y2 = (-a*320-c)/b

figure;
imshow(imgD);
hold on;
line([1,320],[y1,y2],'Color','g','LineWidth',2)
hold off;

0 个答案:

没有答案