Python计算机视觉——第三章 图像到图像的映射

Python计算机视觉——第三章 图像到图像的映射,第1张

概述文章目录3.1单应性变换3.1.1直接线性变换算法3.1单应性变换单应性变换是将一个平面内的点映射到另一个平面内的二维投影变换,平面是指图像或三维中的平面表面,单应性变换在图像配准、图像纠正、纹理扭曲和创建全景图像等具有很强的变换性,单应性变换如下矩阵变换定义

文章目录3.1 单应性变换3.1.1 直接线性变换算法

3.1 单应性变换

单应性变换是将一个平面内的点映射到另一个平面内的二维投影变换,平面是指图像或三维中的平面表面,单应性变换在图像配准、图像纠正、纹理扭曲和创建全景图像等具有很强的变换性,单应性变换如下矩阵变换定义。
[ x ′ y ′ w ′ ] = [ h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 H 9 ] = [ x y w ] \left[ \begin{matrix}x'\\\\y'\\\\w' \end{matrix} \right]=\left[ \begin{matrix} h_1 & h_2 & h_3\\ \\ h_4 & h_5 &h_6 \\ \\ h_7&h_8&H_9 \end{matrix} \right]=\left[ \begin{matrix}x\\\\y\\\\w \end{matrix} \right] ⎣⎢⎢⎢⎢⎡​x′y′w′​⎦⎥⎥⎥⎥⎤​=⎣⎢⎢⎢⎢⎡​h1​h4​h7​​h2​h5​h8​​h3​h6​H9​​⎦⎥⎥⎥⎥⎤​=⎣⎢⎢⎢⎢⎡​xyw​⎦⎥⎥⎥⎥⎤​ 或 x ′ = H x x'=Hx x′=Hx 平面中的点用坐标来表示,我们使用齐次坐标来表示。《计算机图形学(OpenGL版)》的作者F.S. Hill Jr.曾说过一句话:“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”

我们需要来理解一下什么是齐次坐标系,简而言之,齐次坐标就是用N+1维来代表N维坐标,我们可以在一个2D笛卡尔坐标末尾加上一个额外的变量w来形成2D齐次坐标,因此,一个点(X,Y)在齐次坐标里面变成了(x,y,w),并且有X = x/w,Y = y/w。(x,y,w)(齐次坐标系) 等价于 (x/w,y/w)(笛卡尔坐标系),齐次坐标系的点依赖于尺度定义。

单应性矩阵H具有8个独立的自由度,在统计学上是指可以自由取值的变量个数,矩阵的自由度反映了矩阵中每个元素互相约束的状态。 所以单应性矩阵H仅受一个变量的约束。令X=[x,y,w],通常使用w=1来归一化点,这样,点具有唯一的图像坐标x和y,坐标变换我们可以使用一个矩阵来表示变换。

在这里插入代码片

在进行点和变换处理时,按照列优先的原则存储这些点,n个二维点集等价为齐次坐标意义之下的一个3 × \times ×n数组。(H矩阵尺寸是3 × \times × 3),在这些投影变换中,有一些特别重要的变换,如:仿射变换:
[ x ′ y ′ w ′ ] = [ a 1 a 2 t x a 3 a 4 t y 0 0 1 ] = [ x y w ] = [ a 1 x + a 2 y + t x w a 3 x + a 4 y + t y w w ] = [ a 1 x / w + a 2 y / w + t x a 3 x / w + a 4 y / w + t y 1 ] \left[ \begin{matrix}x'\\\\y'\\\\w' \end{matrix} \right]=\left[ \begin{matrix} a_1 & a_2 & t_x\\ \\ a_3 & a_4 &t_y \\ \\ 0&0&1\end{matrix} \right]=\left[ \begin{matrix}x\\\\y\\\\w \end{matrix} \right]=\left[ \begin{matrix}a_1x+a_2y+t_x w\\\\a_3x+a_4y+t_yw\\\\w \end{matrix} \right]=\left[ \begin{matrix}a_1x/w+a_2y/w+t_x \\\\a_3x/w+a_4y/w+t_y\\\\1 \end{matrix} \right] ⎣⎢⎢⎢⎢⎡​x′y′w′​⎦⎥⎥⎥⎥⎤​=⎣⎢⎢⎢⎢⎡​a1​a3​0​a2​a4​0​tx​ty​1​⎦⎥⎥⎥⎥⎤​=⎣⎢⎢⎢⎢⎡​xyw​⎦⎥⎥⎥⎥⎤​=⎣⎢⎢⎢⎢⎡​a1​x+a2​y+tx​wa3​x+a4​y+ty​ww​⎦⎥⎥⎥⎥⎤​=⎣⎢⎢⎢⎢⎡​a1​x/w+a2​y/w+tx​a3​x/w+a4​y/w+ty​1​⎦⎥⎥⎥⎥⎤​

仿射变换包含可逆矩阵A和一个平移向量 t = [ t x , t y ] t=[t_x,t_y] t=[tx​,ty​],可用于图像扭曲。

相似变换:
[ x ′ y ′ 1 ] = [ s c o s ( θ ) − s s i n ( θ ) t x s s i n ( θ ) s c o s ( θ ) t y 0 0 1 ] = [ x y w ] \left[ \begin{matrix}x'\\\\y'\\\\1 \end{matrix} \right]=\left[ \begin{matrix} scos(\theta) & -ssin(\theta) & t_x\\ \\ s sin(\theta) & scos(\theta) &t_y \\ \\ 0&0&1\end{matrix} \right]=\left[ \begin{matrix}x\\\\y\\\\w \end{matrix} \right] ⎣⎢⎢⎢⎢⎡​x′y′1​⎦⎥⎥⎥⎥⎤​=⎣⎢⎢⎢⎢⎡​scos(θ)ssin(θ)0​−ssin(θ)scos(θ)0​tx​ty​1​⎦⎥⎥⎥⎥⎤​=⎣⎢⎢⎢⎢⎡​xyw​⎦⎥⎥⎥⎥⎤​
s制定了变换的尺度,R是角度为 θ \theta θ的旋转矩阵, t = [ t x , t y ] t=[t_x,t_y] t=[tx​,ty​]同样是平移向量,s=1是,称为刚体变换,保持距离不变。

3.1.1 直接线性变换算法 总结

以上是内存溢出为你收集整理的Python计算机视觉——第三章 图像到图像的映射全部内容,希望文章能够帮你解决Python计算机视觉——第三章 图像到图像的映射所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1159151.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存