单应性(homography)变换的公式推导过程_homography svd 求解-程序员宅基地

技术标签: 图像  

原文地址:http://www.cnblogs.com/ml-cv/p/5871052.html


矩阵的一个重要作用是将空间中的点变换到另一个空间中。这个作用在国内的《线性代数》教学中基本没有介绍。要能形像地理解这一作用,比较直观的方法就是图像变换,图像变换的方法很多,单应性变换是其中一种方法,单应性变换会涉及到单应性矩阵。单应性变换的目标是通过给定的几个点(通常是4对点)来得到单应性矩阵。下面单应性矩阵的推导过程。

H=h11h21h31h12h22h32h13h23h33 H=[h11h12h13h21h22h23h31h32h33]

矩阵 H H会将一幅图像上的一个点的坐标 a=(x,y,1) a=(x,y,1)映射成另一幅图像上的点的坐标 b=(x1,y1,1) b=(x1,y1,1),也就是说,我们已知 a a b b,它们是在同一平面上。 则有下面的公式:
b=HaT(1) (1)b=HaT

即:
x1=h11x+h12y+h13y1=h21x+h22y+h231=h31x+h32y+h33(2) (2){x1=h11x+h12y+h13y1=h21x+h22y+h231=h31x+h32y+h33

由上面这个公式中的 1=h31x+h32y+h33 1=h31x+h32y+h33可得到下面两个等式
x1=x11=h11x+h12y+h13h31x+h32y+h33y1=y11=h21x+h22y+h23h31x+h32y+h33(3) (3){x1=x11=h11x+h12y+h13h31x+h32y+h33y1=y11=h21x+h22y+h23h31x+h32y+h33


{ h11x+h12y+h13=h31xx1+h32yx1+h33x1h21x+h22y+h23=h31xy1+h32yy1+h33y1(4) (4){h11x+h12y+h13=h31xx1+h32yx1+h33x1h21x+h22y+h23=h31xy1+h32yy1+h33y1


{ 0=h31xx1+h32yx1+h33x1(h11x+h12y+h13)0=h31xy1+h32yy1+h33y1(h21x+h22y+h23)(5) (5){0=h31xx1+h32yx1+h33x1−(h11x+h12y+h13)0=h31xy1+h32yy1+h33y1−(h21x+h22y+h23)

对于方程 (???) (???) ,可写成一个矩阵与一个向量相乘,即:
[x0y0100x0y01xx1xy1yx1yy1x1y1]h=0(6) (6)[−x−y−1000xx1yx1x1000−x−y−1xy1yy1y1]h=0

其中, h=[h11,h12,h13,h21,h22,h23,h31,h32,h33]T h=[h11,h12,h13,h21,h22,h23,h31,h32,h33]T,是一个9维的列向量。若令:
A=[x0y0100x0y01xx1xy1yx1yy1x1y1](7) (7)A=[−x−y−1000xx1yx1x1000−x−y−1xy1yy1y1]

(6) (6)可以记为
Ah=0(8) (8)Ah=0

这里的 AR2×9 A∈R2×9。这只是1对点所得到的矩阵 A A,若有4对点,则得到的矩阵 AR8×9 A∈R8×9。如何求解向量 h h呢?方法很简单,真接对 A A进行SVD分解,即
UΣVT(9) (9)U∗Σ∗VT

然后取 V V的最后一列出来作为求解 h h。因为矩阵 A A是行满秩,即只有一个自由度。
具体实现时,先要得到两幅图,然后在两幅图之间找到4对点的坐标,由此得到矩阵 A A,然后在matlab中可以这样实现:

[U,S,V]=svd(A);

h=V(:,9);

H= reshape(h,3,3);

由单应性矩阵可以得到仿射变换,还可以在单应性矩阵上做图像拼接。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ccblogger/article/details/73467525

智能推荐

ubuntu 按shift进不去grub…_ubuntu按住shift不能进入恢复模式-程序员宅基地

文章浏览阅读1.3w次,点赞11次,收藏21次。重启电脑进不去grub 模式惠普电脑 ubuntu 18.04进入recovery mode的方法:ctrl + alt + delete 重启电脑,长按F9 进入 Boot Menu ,选择第一个Ubuntu ,这时长按shift 并 ESC 进入ubuntu 高级模式,在高级模式里面选择 recovery mode …..._ubuntu按住shift不能进入恢复模式

Python实现两个有序集合的交集和并集_有两个集合采用整数单链表a,b存储,设计一个算法求两个集合的并集c,c仍然采用单链-程序员宅基地

文章浏览阅读2.8k次。本文通过python实现简易的集合交并算法,输入是两个以递增顺序排序的集合,输出它们的有序交集和有序并集。1、Union算法def union(s1, s2): o = [] i = j = 0 s1_n = len(s1) s2_n = len(s2) while i < s1_n and j < s2_n: ..._有两个集合采用整数单链表a,b存储,设计一个算法求两个集合的并集c,c仍然采用单链

如何将西安80坐标转换为国家2000(或WGS84)坐标系?_80转2000坐标对照表-程序员宅基地

文章浏览阅读2.3w次,点赞6次,收藏34次。西安80坐标系和国家2000坐标系之间的转换是两种不同的椭球参数之间的转换,一般而言比较严密的是用七参数布尔莎模型,即X平移,Y平移,Z平移,X旋转(WX),Y旋转(WY),Z旋转(WY),尺度变化(DM)。每个地区的七参数是不一样的,想得到七参数需要在一个地区提供3个以上的公共点坐标对(即西安80坐标系下x、y、z和国家2000坐标下x、y、z),可以向地方测绘局获取。方法/步..._80转2000坐标对照表

Taro路由跳转_taro监听路由跳转-程序员宅基地

文章浏览阅读2.8k次。先在路径src/app.tsx下将页面添加页面管理中然后在index.tsx页面中写一个点击事件toMouseTracker(){ Taro.navigateTo({ url:'./mouseTracker/MouseTracker' }) }<Button size='mini' onClick={this.toMouseTracker}>点..._taro监听路由跳转

FFMPEG 编译的一些问题 标记一下__audioconverterfillcomplexbuffer", referenced from-程序员宅基地

文章浏览阅读3.1k次。Undefined symbols for architecture x86_64: "_AudioConverterDispose", referenced from: _ffat_close_decoder in libavcodec.a(audiotoolboxdec.o) _ffat_close_encoder in libavcodec.a(__audioconverterfillcomplexbuffer", referenced from:

贝尔数-程序员宅基地

文章浏览阅读2.3k次。转自ACdreamer http://blog.csdn.net/acdreamers/article/details/12309269Bell数的定义:第n个Bell数表示集合{1,2,3,...,n}的划分方案数,即:B[0] = 1; 每一个Bell数都是第二类Stirling数的和,即: 第二类Stir_贝尔数

随便推点

python去掉人像白边_python 使用plt画图,去除图片四周的白边方法-程序员宅基地

文章浏览阅读1.9k次。python 使用plt画图,去除图片四周的白边方法用matplotlib.pyplot画的图,显示和保存的图片周围都会有白边,可以去掉。为了显示的更清楚,给图片加了红色的框代码“`import matplotlib.pyplot as pltfig, ax = plt.subplots()im = im[:, :, (2, 1, 0)]ax.imshow(im, aspect='equal')p..._python画图不要坐标轴外白色框

乾坤 微前端_微前端 qiankun 项目实践 !!! 防踩坑指南-程序员宅基地

文章浏览阅读1.7k次。作者:zxh1307导语最近在做微前端的项目 , 过程中真是踩了不少坑 , 在有限的资料中不断试错 , 默默无语两行泪 哈哈. 在此次将采坑部分都记录下来, 让更多的人少走点弯路 , 此项目使用 蚂蚁金服qiankun 为基础作为开发 . 话不多说 开讲 !!!那什么是 qiankun 呢qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的..._乾坤 手动刷新页面

高通QFIL刷机指南-程序员宅基地

文章浏览阅读2w次,点赞6次,收藏62次。文章目录1、通过QFIL刷机2、工具下载1、通过QFIL刷机1) 刷机需要进入9008刷机模式,在CMD窗口里,输入adb devices检查是否连接设备,然后输入adb reboot edl 进入9008刷机模式。2) 双击打开QFIL烧录工具,选择Configuration 配置,勾选Reset after Download 和Erase All Before Download备注(不需要全擦下载时,可以去勾选:Erase All Before Download)3) selectport_qfil

【Linux学习】虚拟机VMware 安装Qt5 一条龙讲解_虚拟机安装qt-程序员宅基地

文章浏览阅读1.4w次,点赞52次,收藏172次。如何在Linux下安装Qt5呢?Linux下安装Qt5 一条龙讲解_虚拟机安装qt

解决Linux系统的ls/vi等基本命令不能用的问题_lsvi-程序员宅基地

文章浏览阅读4.7k次,点赞14次,收藏9次。解决Linux系统的ls/vi等基本命令不能用的问题这两天在配置项目到我的Linux服务器,输入命令的时候发现了一个bug,我的Linux系统的ls、vi等基本命令都不能用了,能理解是/etc/profile文件配置错误,我就以为是我不小心改了文件的什么,后来找到标准的该文件进行对比,也没有发现问题,后来终于在网上找到了问题所在,因为我配过python的环境,在配环境的时候我直接export path=$python_home/bin;而应该是path=$path:$home/bin的形式;我把$path_lsvi

GPS卫星星历与历书_gps星历-程序员宅基地

文章浏览阅读2.9w次,点赞16次,收藏120次。GPS卫星星历与历书 GPS 卫星发送的导航信息是每秒50位的连续的数据流,在此我们称之为导航电文,每颗卫星都同时向地面发送以下信息: 系统时间和时钟校正值、自身精确的轨道数据(星历,ephemeris) 其他卫星的近似轨道信息(历书,almanac) 系统运行状况。1.GPS卫星星历: 卫星轨道信息或某一时刻轨道参数及其变率或某一时刻卫星位置及其变化率。分为预_gps星历