对极几何基本概念及其MATLAB实现

来源:互联网 发布:淘宝拍卖车交多少税 编辑:程序博客网 时间:2024/04/30 08:36

       对极几何基本概念及其MATLAB实现
1.对极几何基本概念

2.基础矩阵

3.基础矩阵估计方法

4.基础矩阵的MATLAB程序如下:

(1)点对采集程序:

clearclc% 画出的对极线不是很精确% 注意:点采集的时候要尽可能的分开,不然绘制的对极线差距很大A=imread('你的图片1');B=imread('你的图片2');     % 两个都是各自文件夹的第一个图片figure(1);imshow(A);% 下面是鼠标选点 并返回鼠标对应坐标值[location1.x,location1.y]= ginput(8) ;figure(2);imshow(B);[location2.x,location2.y]= ginput(8) ;location{1,1}=location1;location{1,2}=location2;save location.mat location;   % 保存你的点对

(2)利用八点发的对极线程序如下:

function main()clearload location;     % 读入你的点对数据location1=location{1,1};location2=location{1,2};F=Draw_Epipolar_Line(location1,location2)    %输出得到的基础矩阵A2=imread('你刚才的图片1');B2=imread('你刚才的图片2'); h=size(B2,1);                                                         %image1的行数w=size(B2,2);                                                         %image1的列数npoints=5000;figure(1);imshow(A2);[loc1x,loc1y]=ginput(1);    % 选一个点Aclose(gcf);figure(2);imshow(B2);[loc2x,loc2y]=ginput(1);    % 选一个点Bclose(gcf);m1=[loc1x,loc1y,1];m2=[loc2x,loc2y,1];% 对极线表达式Ax+By+C=0中的A,B,C系数存放在l矩阵中l2=F*m1';                   % 计算点A在B所在图片中的对极线l1=F'*m2';                  % 计算点B在A所在图片中的对极线% 开始绘制对极线xx1 = linspace(1,w,npoints); % 产生1行,npoints列 数值为1的行向量cc1=ones(1,npoints);  % 求取纵坐标yy2yy1=(-l1(1)*xx1-l1(3)*cc1)/l1(2); xx2 = linspace(1,w,npoints); % 产生1行,npoints列 数值为1的行向量cc2=ones(1,npoints);  % 求取纵坐标yy2yy2=(-l2(1)*xx2-l2(3)*cc2)/l2(2);  figure(3);imshow(A2);yyy1=yy1(yy1>0&yy1<h);xxx1=xx1(yy1>0&yy1<h);hold on;plot(xxx1,yyy1,'r.','MarkerSize',10);   % 绘制B在A中的对极线hold on;plot(loc1x,loc1y,'g*','MarkerSize',20); % 绘制刚才选的点hold on;plot(location1.x,location1.y,'r*','MarkerSize',20);hold offfigure(4);imshow(B2);yyy2=yy2(yy2>0&yy2<h);xxx2=xx2(yy2>0&yy2<h);hold on;plot(xxx2,yyy2,'r.','MarkerSize',10);%,'MarkerSize',100hold on;plot(loc2x,loc2y,'g*','MarkerSize',20);hold on;plot(location2.x,location2.y,'r*','MarkerSize',20);hold offfunction F=Draw_Epipolar_Line(location1,location2)% location1和location2是你的之前采集的点对数据% 八点法计算对极线基础矩阵% 画出的对极线不是很精确% 下面得到矩阵AAAA=[];for i=1:8    aa=[ location2.x(i)*location1.x(i) , location2.x(i)*location1.y(i) , ...         location2.x(i) , location2.y(i)*location1.x(i) , ...         location2.y(i)*location1.y(i) , location2.y(i) , location1.x(i) ,...         location1.y(i) ,1  ];      AAA=cat(1,AAA,aa);end[~,~,V]=svd(AAA);TEMP=V(:,9);F=reshape(TEMP,3,3);                 % 得到基础矩阵FF=F';% 对于对极线  可设其为l=ax+by+c,上面的F*m得到的l是一个3*1的向量% ,其中的元素一次表示a b c,这个可以参照 吴昊 硕士论文《基础矩阵估% 计方法研究》中的13页

以上原理主要摘自我师姐硕士论文。委屈原理及程序上传完毕,如有错误,还请指正。吐舌头





原创粉丝点击