⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 funmatinmmdpel.m

📁 计算基本矩阵的matlab例程
💻 M
📖 第 1 页 / 共 4 页
字号:
%funmatinmmdpel Iterative Nonlinear Method Minimizing Distances of Points to Epipolar Lines 
%    [F] = funmatinmmdpel(M,Fini,n) 
%
%    M matriu de 4-per-n amb les coordendes de n punts en dues imatges
%      on n 閟 mes gran o igual que 8
%        primera fila: coordenada x de la primera imatge
%        segona fila:  coordenada y de la primera imatge
%        tercera fila: coordenada x de la segona imatge
%        quarta fila:  coordenada y de la segona imatge
%    Fini 	Matriu fonamental inicial
%    n 		numero de iteraci髇s maxima
%
%    F 	matriu fonamental de 3-per-3 amb l'origen de coordenades del m髇 a la segona camera
%
% by X. Armangue
% (c) Mr3D - University of Girona, September 2002
%
function [F]=funmatinmmdpel(M,Fini,n)

if (size(M,1)~=4) | (size(M,2)<8),
   disp('Error: parametres incorrectes')
else
   indexs=[1 2 3; 1 3 2; 2 1 3; 2 3 1; 3 1 2; 3 2 1];
   vmini=0;
   
%   if exist('minpuntslin2.mat','file'),
%      load minpuntslin2.mat FF JJ;
%   else
%		syms x1 y1 x2 y2 a b c d;
%	   FF=[];
%	   JJ=[];
%	   comb=1;
%	   for in1=1:6,
%			j0= indexs(in1,1);
%		   j1= indexs(in1,2);
%		   j2= indexs(in1,3);
%			for in2=1:6,
%				i0= indexs(in2,1);
%		   	i1= indexs(in2,2);
%		      i2= indexs(in2,3);
%        
%	         FF(i0,j0,comb)=(a*x1+b*y1)*x2+(c*x1+d*y1)*y2;
%		      FF(i0,j1,comb)=-a*x2-c*y2;
%		      FF(i0,j2,comb)=-b*x2-d*y2;
%		      FF(i1,j0,comb)=-a*x1-b*y1;
%		      FF(i1,j1,comb)=a;
%		      FF(i1,j2,comb)=b;
%		      FF(i2,j0,comb)=-c*x1-d*y1;
%		      FF(i2,j1,comb)=c;
%		      FF(i2,j2,comb)=d;
%         
%	         for ff=1:3,
%		      	for fc=1:3,
%		            JJ(1,3*(ff-1)+fc,comb)=diff(FF(ff,fc,comb),x1);
%		         end
%		      end
%		      for ff=1:3,
%		         for fc=1:3,
%		            JJ(2,3*(ff-1)+fc,comb)=diff(FF(ff,fc,comb),y1);
%		         end
%		      end
%		      for ff=1:3,
%		         for fc=1:3,
%		            JJ(3,3*(ff-1)+fc,comb)=diff(FF(ff,fc,comb),x2);
%		         end
%		      end
%		      for ff=1:3,
%		         for fc=1:3,
%		            JJ(4,3*(ff-1)+fc,comb)=diff(FF(ff,fc,comb),y2);
%		         end
%		      end
%		      for ff=1:3,
%		         for fc=1:3,
%		            JJ(5,3*(ff-1)+fc,comb)=diff(FF(ff,fc,comb),a);
%		         end
%	   	   end
%		      for ff=1:3,
%		         for fc=1:3,
%		            JJ(6,3*(ff-1)+fc,comb)=diff(FF(ff,fc,comb),b);
%		         end
%		      end
%		      for ff=1:3,
%		         for fc=1:3,
%		            JJ(7,3*(ff-1)+fc,comb)=diff(FF(ff,fc,comb),c);
%		         end
%		      end
%		      for ff=1:3,
%		         for fc=1:3,
%		            JJ(8,3*(ff-1)+fc,comb)=diff(FF(ff,fc,comb),d);
%		         end
%	         end
%		      comb=comb+1;         
%	      end
%   	end
%		save minpuntslin2.mat FF JJ;
%   end
   for ii=1:n;   
	   nor =[];
      Jact=[];   
      comb=1;
	   [vect1,val1]=eig(Fini); 
	   [vect2,val2]=eig(Fini');
	   for in1=1:6,
	      j0= indexs(in1,1);
	      j1= indexs(in1,2);
	      j2= indexs(in1,3);
      
	      if imag(sum(val1(:,1)))==0,
	         vec1=vect1(:,1)./vect1(j0,1);
	      else
	         vec1=vect1(:,3)./vect1(j0,3);
	      end
			x1=vec1(j1);
			y1=vec1(j2);
    
	      for in2=1:6,
		      i0= indexs(in2,1);
	   	   i1= indexs(in2,2);
	      	i2= indexs(in2,3);
	         
		      if imag(sum(val2(:,1)))==0,
	   	      vec2=vect2(:,1)./vect2(i0,1);
	      	else
	         	vec2=vect2(:,3)./vect2(i0,3);
            end           
				x2=vec2(i1);
				y2=vec2(i2);
	         
				a=Fini(i1,j1);
				b=Fini(i1,j2);
				c=Fini(i2,j1);
	         d=Fini(i2,j2);
	         
            switch comb
            case 1,
               Jact=	[ a*x2+c*y2,         0,         0,        -a,         0,         0,        -c,         0,         0;
							  b*x2+d*y2,         0,         0,        -b,         0,         0,        -d,         0,         0;
							  a*x1+b*y1,        -a,        -b,         0,         0,         0,         0,         0,         0;
							  c*x1+d*y1,        -c,        -d,         0,         0,         0,         0,         0,         0;
							      x1*x2,       -x2,         0,       -x1,         1,         0,         0,         0,         0;
							      y1*x2,         0,       -x2,       -y1,         0,         1,         0,         0,         0;
							      x1*y2,       -y2,         0,         0,         0,         0,       -x1,         1,         0;
							      y1*y2,         0,       -y2,         0,         0,         0,       -y1,         0,         1];
            case 2,
               Jact= [ a*x2+c*y2,         0,         0,        -c,         0,         0,        -a,         0,         0;
							  b*x2+d*y2,         0,         0,        -d,         0,         0,        -b,         0,         0;
							  a*x1+b*y1,        -a,        -b,         0,         0,         0,         0,         0,         0;
							  c*x1+d*y1,        -c,        -d,         0,         0,         0,         0,         0,         0;
							      x1*x2,       -x2,         0,         0,         0,         0,       -x1,         1,         0;
							      y1*x2,         0,       -x2,         0,         0,         0,       -y1,         0,         1;
							      x1*y2,       -y2,         0,       -x1,         1,         0,         0,         0,         0;
							      y1*y2,         0,       -y2,       -y1,         0,         1,         0,         0,         0];
            case 3,
               Jact= [        -a,         0,         0, a*x2+c*y2,         0,         0,        -c,         0,         0;
							         -b,         0,         0, b*x2+d*y2,         0,         0,        -d,         0,         0;
							          0,         0,         0, a*x1+b*y1,        -a,        -b,         0,         0,         0;
							          0,         0,         0, c*x1+d*y1,        -c,        -d,         0,         0,         0;
							        -x1,         1,         0,     x1*x2,       -x2,         0,         0,         0,         0;
							        -y1,         0,         1,     y1*x2,         0,       -x2,         0,         0,         0;
							          0,         0,         0,     x1*y2,       -y2,         0,       -x1,         1,         0;
							          0,         0,         0,     y1*y2,         0,       -y2,       -y1,         0,         1];
            case 4,
               Jact= [        -c,         0,         0, a*x2+c*y2,         0,         0,        -a,         0,         0;
							         -d,         0,         0, b*x2+d*y2,         0,         0,        -b,         0,         0;
							          0,         0,         0, a*x1+b*y1,        -a,        -b,         0,         0,         0;
							          0,         0,         0, c*x1+d*y1,        -c,        -d,         0,         0,         0;
							          0,         0,         0,     x1*x2,       -x2,         0,       -x1,         1,         0;
							          0,         0,         0,     y1*x2,         0,       -x2,       -y1,         0,         1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -