单应性矩阵 matlab,matlab 在求定标中单映性矩阵
从年前就开始编写一个标定的程序,可是总是在不小心程序改动一点,算出来的内参是复数形式,不知道问题出在哪里,构建求单映性矩阵H的矩阵L的时候,如果图像上角点选取不同就会出现很大的差异,今天终于又调试了很多,看到一篇论文写到,因为矩阵L上数量级相差太大,因为里面有图像平面坐标,数量级是100~1,而世界坐标与图像坐标乘积数量积将在1000~1之间,得到的S矩阵对角元素数量级为10的8次幂。所以对L进行了改造,将图像坐标归一化变换了一下。在下面的normUVfun()函数中;而且今天在计算L矩阵时,选取了图像的中间的两个点,在本例中就是第23个到26的点。
function
H=funH(M,m,flag)%g根据读入的信息,求出H,flag是表示第几幅图像的意思;H为单应性矩阵;
%%%%---输入变量 M:为模板齐次坐标,维数为3*npt;
%%%% m:图像像素齐次坐标, 维数为:3*npt*flag
%%% flag:图像个数,几副图像,这里取了三副;
%%%%---输出变量:H,是模板坐标矩阵与图像坐标矩阵之间的单映性矩阵;
%%%%---H应该满足min∑||mi-mi'||的最小平方和;其中mi'表示消去s计算得到图像坐标期望值。
%%%---依据:sm=HM. 消去s计算得到图像坐标期望值:mi'=1/h3*Mi[h1*Mi;h2*Mi]
Hi表示H的i行向量;
%%%---[MT 0T -uMT ] [h1']
% [ 0T MT -vMT ] [h2']=0;
% [h3']
[l,npt]=size(M);%npt是模板上有多少个点。
maxone=ones(1,npt);
%M=[M;maxone];
u=m(1,:,flag); %u为三副图像的x坐标,
v=m(2,:,flag); %v三副图像的y的坐标
%构造l矩阵,奇异分解求H.
O=zeros(1,3);
L=zeros(2*npt,9);
MT=M';
%讲实际图像平面坐标变化,因为L中有世界坐标、图像坐标数量级相差太大,所以L矩阵条件数大
[uN,vN,Hinv]=normUVfun(u,v);
UM=zeros(npt,3);
% for i=1:length(u)
% UM(i,:)=uT(i).*MT(i,:);
% end
% for i=1:length(v)
% VM(i,:)=vT(i).*MT(i,:);
% end
%
% L=[M' O' -UM;O' M' -VM]; %L*H=0;求解H,选取n个点,L是2n*9个的矩阵;
%下面需要分解L就出的解为H
% L55=[L(7:12,:);L(49:54,:)];% 一副图像选取了6个点;
% [U,S,V]=svd(L55'*L55);
% L=[M' O' -UM;O' M' -VM];
for i=1:length(M)
L(2*i-1,:)=[MT(i,:) O -uN(1,i)*MT(i,:)];
L(2*i,:)= [O
MT(i,:) -vN(1,i)*MT(i,:)];
end
% -- %L*H=0;求解H,选取n个点,L是2n*9个的矩阵;
% --[u s v]=SVD(L'L)
% --选取中间的4个点计算H,这个四个点表示为(npt-3)行到(npt+4)行;
% --Lnpt是8*9矩阵;
Lnpt=L(floor(npt)-3:floor(npt)+4,:);
[U S V]=svd(Lnpt'*Lnpt);
[R,M]=size(V);
%HH(:,:)=V(:,M)./V(L,M);%H的解就是 V的最后一列,并且把最后一个元素变成1。
HH=V(:,M);
Hnorm=reshape(HH,3,3);
%空间平面与实际图像坐标平面的单映性矩阵H:
H=Hnorm*Hinv;
H=H/H(3,3);
下面是归一化变换函数
%
function
[uN,vN,Hinv]=normUVfun(u,v) %%%%%%function:将图像坐标归一化处理,采用非方式处理两个坐标轴上的数据,缩放比例不相等,但经处理后使各点到原点距离的平均值为1.
% 平均值:mu=mean(ui),mv=mean(vi),
% 各个点相对应平均值的相对量:du=ui-mu,
% dv=vi=mv;
% 求u,v轴的缩放因子:su=1/mean(abs(dui)),
% sv=1/mean(abs(dvi))
% 总的变换关系:uN=dui/mean(abs(dui)),
% vN=dvi=/mean(abs(dvi))
% --输入变量(u,v)
% --输出为归一化后图像坐标(uN,vN)和反变换矩阵Hinv
%%%-----------author:liyingyan-----------------------------
%%%---------Date:2009.03.13--------------------------
[r,npt]=size(u);
du=zeros(r,npt);
dv=zeros(r,npt);
mu=mean(u);
mv=mean(v);
for i=1:npt
du(i)=abs(u(i)-mu);
dv(i)=abs(v(i)-mv);
end
su=1/mean(du);
sv=1/mean(dv);
uN=du*su;
vN=dv*sv;
%m=Hinv*mN--变换后的图像平面坐标需要与一个反变换矩阵相乘猜得到实际图像平面坐标;
Hinv=[1/su 0 mu;0 1/sv mv;
0 0 1];
单应性矩阵 matlab,matlab 在求定标中单映性矩阵相关推荐
- 十字链表计算矩阵乘积 c语言,求用十字链表实现矩阵相加算法(C语言)急!!!...
匿名用户 1级 2010-02-09 回答 我有一个可以用的.怎么给你?百度hi我吧. 算了,我贴上来吧,由电脑编程网整理: #include #include #define smax 45 typ ...
- SLAM笔记(四)运动恢复结构的几何数学(本征矩阵、单应矩阵、基础矩阵)
1. 间接法进行运动恢复的前提假设 对于结构与运动或视觉三维重建中,通常假设已经通过特征匹配等方法获取了匹配好的点对. 先求出匹配点对再获取结构和运动信息的方法称作间接法. 间接法最重要的三个假设是: ...
- 透视变换 单应性矩阵怎么求 matlab,单应性(homography)变换的推导
矩阵的一个重要作用是将空间中的点变换到另一个空间中.这个作用在国内的<线性代数>教学中基本没有介绍.要能形像地理解这一作用,比较直观的方法就是图像变换,图像变换的方法很多,单应性变换是其中 ...
- 单应性矩阵 matlab,四点求解单应性矩阵
网上有很多关于单应性矩阵的求解方法,但都没有说明怎样用四点求解单应性矩阵或者源码详细说明很少.这里说说自己的理解. 首先贴出matlab代码 % 返回值 H 是一个3*3的矩阵 % pts1 和 pt ...
- 单应性矩阵 matlab,单应性矩阵MATLAB程序
单应性(Homography)描述的是同一个平面上的点,在两幅视图上的像点之间存在一一对应的映射关系,本质上是将一个目标点在两幅图像中相互转移.对应关系如图所示. 本文计算单应性矩阵在两个图像平面中都 ...
- opencv求两张图像光流_OpenCV单应性矩阵发现参数估算方法详解
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 单应性矩阵计算函数与应用 OpenCV在通过特征描述子完成描述子匹配之后,会得到一些关键点对,我们会把这些关键 ...
- matlab矩阵指定行最大值,求Matlab程序:在2行矩阵中,如何求第1行最大值和第2行相应的最大,请问,如何在MATLAB中编写程序实现求两矩阵A*B,A.*...
导航:网站首页 > 求Matlab程序:在2行矩阵中,如何求第1行最大值和第2行相应的最大,请问,如何在MATLAB中编写程序实现求两矩阵A*B,A.* 求Matlab程序:在2行矩阵中,如何求 ...
- 单应性矩阵的理解及求解4
https://blog.csdn.net/hudaliquan/article/details/52121832 网上有很多关于单应性矩阵的求解方法,但都没有说明怎样用四点求解单应性矩阵或者源码详细 ...
- 单目初始化 单应矩阵 本质矩阵 恢复R t 三角变换求 3D点
单目初始化 单应矩阵 本质矩阵 恢复R t 三角变换求 3D点 博文末尾支持二维码赞赏哦 ^_^ /* * This file is part of ORB-SLAM2 * * 单目相机初始化 * 用 ...
最新文章
- 综合布线施工中的不规范现象
- EnumMap的用法和源码解析
- oracle sequrnce_OracleSql语句学习(五)
- python自定义包_详解python自定义模块、包
- Vr-Vantage之场景与环境
- oracle不存在共享内存域,Oracle数据库共享内存分配不足怎么办
- Karoly Nyisztor
- OpenCV-Python实战(番外篇)——利用 SVM 算法识别手写数字
- 个人的一些MySql管理经验
- 2017 Multi-University Training Contest - Team 3 Kanade's trio(字典树+组合数学)
- 美团财报数据初步分析
- 如何塑造亲切有趣的微博形象?
- linux下的chm阅读器?
- 运筹优化学习08:Repairing MIP infeasibility through local branching
- 又十一了,唠唠程序员回家相亲那些段子
- 图片合成视频,视频文件过大了,python 改变视频的码率, 压缩视频文件
- 08.音频系统:第003课_Linux音频驱动程序:第001节_alsa音频驱动框架
- html 微信登陆,登录包含微信登录.html
- MySQL事件的创建和执行
- 这部豆瓣评分 9.4 的古董沙雕剧和 Python ...
热门文章
- 内存虚拟化、内存复用、大页内存作用及详解
- 程序员幸福感拉满:一键为代码自动生成注释的工具,拿走不谢!
- springboot+activiti7+react实现模仿钉钉功能的审批流(八、流程面板:待我审批、我已审批、我发起的、抄送我的、所有审批单)
- 永远的经典-意大利波伦塔蛋糕Polenta Cake
- git提交后push中出现之前的提交的代码或者其他人提交的代码
- vue学习笔记(2)基础语法
- java中北大学ppt总结+课后习题第二章(小宇特详解)
- Android从1.0到 6.0各版本的差别
- 2017阿里巴巴技术论坛,本周起将席卷全球四大顶级名校!
- CSS3背景渐变及文本效果