我的目标是在右图中绘制对应于基本矩阵中左图像中的点的图。
我读了两张图片
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;