【发布时间】:2022-01-14 18:37:39
【问题描述】:
我的目标是根据基本矩阵在右图中绘制对应于左图中的点的边缘线。
我读了两张图片
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 我只是使用 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;
【问题讨论】:
-
...没有工作如何?请更具体,也许发布一些错误消息
-
看图,极线位置不对s11.postimg.org/mk51x9u5f/image.png
-
我不确定基本矩阵计算是否正确