Homography --- 图片与图片间的点对应(DLT)
2017-10-30 09:32
316 查看
上一部分我们讲了3d与2d坐标系中点与点的对应关系,那对于两张2d图片之间的点,我们又应该怎么建立关系呢?
答案就是Homography了。
以我个人来说,homography指的是一个视平面到另一个视平面上物体的投影,我们暂且理解为变换观察一个物体的角度。
一个在homography coordinate中的点P (x̃ ,ỹ ,ω̃ ),投影到2D平面上坐标为(x,y),于是一个投影过程可以描述为:
⎡⎣⎢⎢x̃ ỹ ω̃ ⎤⎦⎥⎥→⎡⎣⎢⎢x̃ /ω̃ ỹ /ω̃ 1⎤⎦⎥⎥→⎡⎣⎢⎢xy1⎤⎦⎥⎥
对于这样一个投影过程(homography)来说,对应点和它的投影点(homogeneous point)之间的转换是可逆的,所以才可以运用到两张图片之间的点对应。
假定两张图片上对应的一对点p和p′的坐标分别为(x,y)和(x′,y′),它们之间存在下列的关系:
⎡⎣⎢⎢⎢x′~y′~ω′~⎤⎦⎥⎥⎥=H⎡⎣⎢⎢x̃ ỹ ω̃ ⎤⎦⎥⎥
H是一个3*3的矩阵。有了它,我们就可以计算出另一视平面上对应的点了。但是这个公式计算出的视平面是有局限性的,也就是说不能算出任意视平面的对应点。这个我们待会儿来讲。
上一篇文章中,我们把相机矩阵(camera matrix)表示为M=[Rt]。这里我们换一种表示方法:
M=[KR−KRt]=[H−Ht]
其中R=CRW,代表以相机三维坐标系为参照的世界三维坐标系的旋转矩阵;t=CtW,同样代表以相机三维坐标系为参照的世界三维坐标系的位移(也就是世界三维坐标系到相机三维坐标系所需要的变换);K为相机的内参矩阵,这个矩阵由相机的内部参数决定。
可能有人要问了,这个公式和上一篇文章里的不一样啊,其实这里进行了代换,代入上一篇文章中A,B坐标系变换矩阵(translformation matrix)公式可以得到这个结果。
如果能够在世界坐标系中建立这个等式是最理想的:
M=[K(WRC)T−K(WRC)T(WtC)]
或:
M=[H−H(WtC)]
或:
M=[H−HOC]
其中OC是相机坐标系中心在世界坐标系下的坐标。
一共有两种情况,一个是视平面仅进行了旋转(rotation only),另一个是只在同一平面内移动(planar object/surface)。
这两种情况下,对应点的关系可用以下公式表示:
⎡⎣⎢⎢⎢x′~y′~ω′~⎤⎦⎥⎥⎥=⎡⎣⎢⎢h1h4h7h2h5h8h3h6h9⎤⎦⎥⎥⎡⎣⎢⎢x̃ ỹ ω̃ ⎤⎦⎥⎥
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/0d4580efc6a6d06ae9bf719137d5aff0)
这一部分没看懂,待补充。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/06/50c5d295d7b9631f183f8997b00a4bc0)
同没看懂,待补充。
⎡⎣⎢⎢⎢x′~y′~ω′~⎤⎦⎥⎥⎥=⎡⎣⎢⎢h1h4h7h2h5h8h3h6h9⎤⎦⎥⎥⎡⎣⎢⎢xy1⎤⎦⎥⎥
变换得到:
x′=x′~/ω′~=h1x+h2y+h3h7x+h8y+h9
以及
y′=y′~/ω′~=h4x+h5y+h6h7x+h8y+h9
两边相乘得到:
x′(h7x+h8y+h9)−(h1x+h2y+h3)=0
y′(h7x+h8y+h9)−(h4x+h5y+h6)=0
假设我们有N个对应的点对,所以可以得到一系列的等式:
Aq=0
q是矩阵H的向量形式(h1...h9);A是一个2N*9大小的矩阵,其中一个对应点对(x,y)和(x′,y′)对应A中的两行,为:
[−x0−y0−100−x0−y0−1x′xy′xy′yy′yx′y′]
之后便需要使用SVD分解法来求解了。
这种方法被称为DLT—直接线性转换(Direct Linear Transformation-DLT)算法。
Note that DLT is not really used by itself in practice. Instead a robust estimator such as RANSAC is used to improve accuracy.
答案就是Homography了。
Homography
Homography,译成中文叫“单应性“。这里贴上wiki pedia供大家阅读。以我个人来说,homography指的是一个视平面到另一个视平面上物体的投影,我们暂且理解为变换观察一个物体的角度。
一个在homography coordinate中的点P (x̃ ,ỹ ,ω̃ ),投影到2D平面上坐标为(x,y),于是一个投影过程可以描述为:
⎡⎣⎢⎢x̃ ỹ ω̃ ⎤⎦⎥⎥→⎡⎣⎢⎢x̃ /ω̃ ỹ /ω̃ 1⎤⎦⎥⎥→⎡⎣⎢⎢xy1⎤⎦⎥⎥
对于这样一个投影过程(homography)来说,对应点和它的投影点(homogeneous point)之间的转换是可逆的,所以才可以运用到两张图片之间的点对应。
假定两张图片上对应的一对点p和p′的坐标分别为(x,y)和(x′,y′),它们之间存在下列的关系:
⎡⎣⎢⎢⎢x′~y′~ω′~⎤⎦⎥⎥⎥=H⎡⎣⎢⎢x̃ ỹ ω̃ ⎤⎦⎥⎥
H是一个3*3的矩阵。有了它,我们就可以计算出另一视平面上对应的点了。但是这个公式计算出的视平面是有局限性的,也就是说不能算出任意视平面的对应点。这个我们待会儿来讲。
上一篇文章中,我们把相机矩阵(camera matrix)表示为M=[Rt]。这里我们换一种表示方法:
M=[KR−KRt]=[H−Ht]
其中R=CRW,代表以相机三维坐标系为参照的世界三维坐标系的旋转矩阵;t=CtW,同样代表以相机三维坐标系为参照的世界三维坐标系的位移(也就是世界三维坐标系到相机三维坐标系所需要的变换);K为相机的内参矩阵,这个矩阵由相机的内部参数决定。
可能有人要问了,这个公式和上一篇文章里的不一样啊,其实这里进行了代换,代入上一篇文章中A,B坐标系变换矩阵(translformation matrix)公式可以得到这个结果。
如果能够在世界坐标系中建立这个等式是最理想的:
M=[K(WRC)T−K(WRC)T(WtC)]
或:
M=[H−H(WtC)]
或:
M=[H−HOC]
其中OC是相机坐标系中心在世界坐标系下的坐标。
When is homography the same over point matching?
前面讲过,homography是有局限的。那什么情况下两张图片的点可以用homography联系起来呢?一共有两种情况,一个是视平面仅进行了旋转(rotation only),另一个是只在同一平面内移动(planar object/surface)。
这两种情况下,对应点的关系可用以下公式表示:
⎡⎣⎢⎢⎢x′~y′~ω′~⎤⎦⎥⎥⎥=⎡⎣⎢⎢h1h4h7h2h5h8h3h6h9⎤⎦⎥⎥⎡⎣⎢⎢x̃ ỹ ω̃ ⎤⎦⎥⎥
1. Rotation Only
如果两个图片仅仅只是发生了旋转,那么就可以使用homograph了。原因是,这种情况下变换矩阵的第四列值全为0,所以原本3*4的矩阵可以转化成3*3的了。这一部分没看懂,待补充。
2. Planar Object/Surface
如果在世界坐标系,其中z坐标轴与平面的表面法线对齐,所以变换矩阵的第三列值全为0,所以矩阵也变成了3*3的。同没看懂,待补充。
如何得到矩阵H?
让我们回到之前的等式:⎡⎣⎢⎢⎢x′~y′~ω′~⎤⎦⎥⎥⎥=⎡⎣⎢⎢h1h4h7h2h5h8h3h6h9⎤⎦⎥⎥⎡⎣⎢⎢xy1⎤⎦⎥⎥
变换得到:
x′=x′~/ω′~=h1x+h2y+h3h7x+h8y+h9
以及
y′=y′~/ω′~=h4x+h5y+h6h7x+h8y+h9
两边相乘得到:
x′(h7x+h8y+h9)−(h1x+h2y+h3)=0
y′(h7x+h8y+h9)−(h4x+h5y+h6)=0
假设我们有N个对应的点对,所以可以得到一系列的等式:
Aq=0
q是矩阵H的向量形式(h1...h9);A是一个2N*9大小的矩阵,其中一个对应点对(x,y)和(x′,y′)对应A中的两行,为:
[−x0−y0−100−x0−y0−1x′xy′xy′yy′yx′y′]
之后便需要使用SVD分解法来求解了。
这种方法被称为DLT—直接线性转换(Direct Linear Transformation-DLT)算法。
Note that DLT is not really used by itself in practice. Instead a robust estimator such as RANSAC is used to improve accuracy.
相关文章推荐
- iOS开发所有KeyboardType与图片对应展示
- [置顶] Android基于photoView点击选择坐标,放大缩小图片时,坐标位置对应改变
- JAVA实现自动打开URL对应的网页并保存为图片-不借助第三方API
- Matlab把对应文件夹下的多个avi格式的视频转化成每一帧的图片
- Java将网络地址对应的图片转成本地的图片
- Generative Adversarial Text to Image Synthesis --- 根据文字描述生成对应的图片
- iOS - 关于点击小图片之后查看对应大图的实现
- 屏幕密度和图片资源路径的对应关系
- iOS开发所有KeyboardType与图片对应展示
- javaweb中把数字转换成对应图片的方法
- 本人原创:链接对应的网页保存为图片,用时:瞬间,适合任何网页
- iOS开发所有KeyboardType与图片对应展示
- 批量将导入的图片生成对应的元件调整为无损位图质量,设置链接项导出,发布并生成配置文件,fljs小命令脚本 - [jsfl]
- C# TreeView显示图片和文字对应
- iphone 各个设备的分辨率和对应的像素尺寸 以及所用到的 在 Images.xcassets 中的图片规格
- Android 图片资源文件夹(hdpi,mdpi,xhdpi,xxhdpi,xxxhdpi)对应的手机分辨率
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- 点击Viewflipper图片跳转到对应的页面代码
- 本人原创:链接对应的网页保存为图片,用时:瞬间,适合任何网页
- word把对应图片变成嵌入的ActiveX控件。