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

📄 initialparams.asv

📁 这是我用Delphi和Matlab写的一个程序
💻 ASV
字号:
function [alfa, a, b, e0x, e0y, e1x, e1y, H0, H1] = InitialParams(F, e0, e1)
%  INITIALPARAMS  Return the Initial values of the 7 parameters used for optimization
%  F: 基本矩阵,e0: 左图像的极点,e1: 右图像的极点
%  alfa, a, b, e0x, e0y, e1x, e1y: 优化参数
%  H0, H1: 投影变换矩阵(初值)
%
%  Ran Liu: liuran781101@tom.com
%  College of Computer Science, Chongqing University
%  Panovasic Technology Co.,Ltd

%  初始化参数
e0x = e0(1);
e0y = e0(2);
e1x = e1(1);
e1y = e1(2);

d0x = e0y / sqrt(e0x^2 + e0y^2);
d0y = -e0x / sqrt(e0x^2 + e0y^2);

tmp = F*[d0x d0y 0]';
x = tmp(1, :);
y = tmp(2, :);
d1x = y / sqrt(x^2 + y^2);
d1y = -x / sqrt(x^2 + y^2);

%  计算参数alfa
alfa = atan(d1y/d1x);

theta0 = atan(1 / (d0y * e0x - d0x * e0y));  %  计算theta0: I0的深度旋转角度
R0Planes = MatAlignImgPlanes(theta0, d0x, d0y);  %  计算图像平面I0旋转变换矩阵
e0New = R0Planes * e0;  %  计算变换后的e0的坐标
beta0 = -atan(e0New(2) / e0New(1));  %  计算参数beta0: I0中的极线旋转角度
R0Lines = MatAlignScanlines(beta0); %  计算I0中的极线旋转变换矩阵

theta1 = atan(1 / (d1y * e1x - d1x * e1y));  %  计算theta1: I1的深度旋转角度
R1Planes = MatAlignImgPlanes(theta1, d1x, d1y);  %  计算图像平面I1旋转变换矩阵
e1New = R1Planes * e1;  %  计算变换后的e1的坐标
beta1 = -atan(e1New(2) / e1New(1));  %  计算参数beta1: I1中的极线旋转角度
R1Lines = MatAlignScanlines(beta1); %  计算I1中的极线旋转变换矩阵

%%  计算参数a、b
FIn = R1Lines * R1Planes * F * MatAlignImgPlanes(-theta0, d0x, d0y) * MatAlignScanlines(-beta0);  %  和其它语言一致,可由函数名带回值
FIn = FIn ./ FIn(3, 2);  %  使得矩阵的(3,2)位置缩放为1
a = -FIn(2, 3);
b = -FIn(3,3);

if a < 0  %  如果比例变换因子小于零,则要重新变换
   R1Lines = MatAlignScanlines(-beta1); %  计算I1中的极线旋转变换矩阵 
   FIn = R1Lines * R1Planes * F * MatAlignImgPlanes(-theta0, d0x, d0y) * MatAlignScanlines(-beta0);  %  和其它语言一致,可由函数名带回值
   FIn = FIn ./ FIn(3, 2);  %  使得矩阵的(3,2)位置缩放为1
   a = -FIn(2, 3);
   b = -FIn(3,3);
end;

%  计算H0
H0 = R0Lines * R0panel;

%%  图像平面旋转变换矩阵
function RPlanes = MatAlignImgPlanes(t, dx, dy)
%  MATALIGNIMGPLANES  Return the Matrix used for aligning the image planes
Rlanes = [dx^2 + dy *cos(t) dx * dy *(1-cos(t)) dy * sin(t)
    dx * dy * (1-cos(t)) dy^2 + dx^2 * cos(t) -dx * sin(t)
    -dy * sin(t) dx * sin(t) cos(t)];

%%  极线旋转变换矩阵
function RLines = MatAlignScanlines(beta)
%  MATALIGNSCANLINES  Return the Matrix used for aligning the scanlines
RLines = [cos(beta)  -sin(beta)  0
    sin(beta)  cos(beta)   0
    0          0           1];







⌨️ 快捷键说明

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