微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

文章目录

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 直接线性变换算法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐