仿射变换中的旋转缩放变换矩阵推导

这篇具有很好参考价值的文章主要介绍了仿射变换中的旋转缩放变换矩阵推导。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

仿射变换可以将矩阵形状转换为平行四边形。可以挤压形状,但是必须保持两边平行。常见的是旋转、缩放、平移变换。缩放和平移比较简单,本文重点推导旋转缩放变换矩阵。

任意一点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)
可以看成 ( x 0 , 0 ) (x_0, 0) (x0,0)向量和 ( 0 , y 0 ) (0,y_0) (0,y0)向量相加,对 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)
绕原点逆时针旋转 θ \theta θ,相当于 ( x 0 , 0 ) , ( 0 , y 0 ) (x_0,0),(0,y_0) (x0,0),(0,y0)
绕原点逆时针旋转 θ \theta θ 后的向量相加。

在图像处理中图片的坐标通常使用的是左手坐标系,如图
仿射变换中的旋转缩放变换矩阵推导,数学,算法,矩阵,线性代数

x 轴为图片宽度方向,y轴为高度方向。

因此 ( x 0 , y 0 ) (x_0, y_0) (x0,y0) 点逆时针旋转 θ \theta θ 后的坐标为
( x 1 y 1 ) = ( x 0 cos ⁡ θ + y 0 sin ⁡ θ , − x 0 sin ⁡ θ + y 0 cos ⁡ θ ) = ( cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ) ( x 0 y 0 ) \begin{aligned} \begin{pmatrix} x_1 \\ y_1\\ \end{pmatrix} = (x_0 \cos \theta + y_0 \sin \theta, -x_0\sin \theta + y_0 \cos \theta) = \begin{pmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{pmatrix} \begin{pmatrix} x_0 \\ y_0\\ \end{pmatrix} \end{aligned} (x1y1)=(x0cosθ+y0sinθ,x0sinθ+y0cosθ)=(cosθsinθsinθcosθ)(x0y0)
旋转矩阵为
( cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ) . \begin{aligned} \begin{pmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{pmatrix} . \end{aligned} (cosθsinθsinθcosθ).

上面是绕原点旋转,如果是绕任意一点旋转呢? 假设旋转中心center为
( c x , c y ) (c_x, c_y) (cx,cy)。 我们把坐标原点移动到 ( c x , c y ) (c_x, c_y) (cx,cy) , 旧坐标系任意点(x,
y)在新坐标系下则为 ( x − c x , y − c y ) (x-c_x, y-c_y) (xcx,ycy)
因此在新坐标系下绕原点逆时针旋转 θ \theta θ ,即
( x ∗ y ∗ ) = ( cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ) ( x − c x y − c y ) \begin{aligned} \begin{pmatrix} x^*\\ y^*\\ \end{pmatrix} = \begin{pmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{pmatrix} \begin{pmatrix} x-c_x \\ y-c_y \\ \end{pmatrix} \end{aligned} (xy)=(cosθsinθsinθcosθ)(xcxycy)
新坐标系下旋转后的点 ( x ∗ , y ∗ ) (x^*, y^*) (x,y)在旧坐标系下则为 ( x ∗ + c x , y ∗ + c y ) (x^* + c_x, y^* + c_y) (x+cx,y+cy)
。 因此旧坐标系下绕 ( c x , c y ) (c_x, c_y) (cx,cy) 逆时针旋转 θ \theta θ 后的点为
( x ′ y ′ ) = ( cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ) ( x − c x y − c y ) + ( c x c y ) = ( cos ⁡ θ x + sin ⁡ θ y − c x cos ⁡ θ − c y sin ⁡ θ + c x − sin ⁡ θ x + cos ⁡ θ y + c x sin ⁡ θ − c y cos ⁡ θ + c y ) = ( cos ⁡ θ sin ⁡ θ ( 1 − cos ⁡ θ ) c x − c y sin ⁡ θ − sin ⁡ θ cos ⁡ θ c x sin ⁡ θ + ( 1 − cos ⁡ θ ) c y ) ( x y 1 ) \begin{aligned} \begin{pmatrix} x'\\ y'\\ \end{pmatrix} =& \begin{pmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{pmatrix} \begin{pmatrix} x-c_x \\ y-c_y \\ \end{pmatrix} + \begin{pmatrix} c_x\\ c_y\\ \end{pmatrix} \\ =& \begin{pmatrix} \cos\theta x + \sin\theta y - c_x\cos\theta - c_y\sin\theta + c_x \\ -\sin\theta x + \cos\theta y + c_x\sin\theta - c_y\cos\theta + c_y \\ \end{pmatrix} \\ =& \begin{pmatrix} \cos\theta & \sin\theta & (1 - \cos\theta)c_x - c_y\sin\theta \\ -\sin\theta & \cos\theta & c_x\sin\theta + (1-\cos\theta)c_y \\ \end{pmatrix} \begin{pmatrix} x\\ y\\ 1\\ \end{pmatrix} \end{aligned} (xy)===(cosθsinθsinθcosθ)(xcxycy)+(cxcy)(cosθx+sinθycxcosθcysinθ+cxsinθx+cosθy+cxsinθcycosθ+cy)(cosθsinθsinθcosθ(1cosθ)cxcysinθcxsinθ+(1cosθ)cy) xy1

现在再考虑缩放,分2种情况:

(1) 旋转后以原点为中心缩放 scale, 记 s c a l e ∗ cos ⁡ θ = α scale * \cos \theta = \alpha scalecosθ=α ,
s c a l e ∗ sin ⁡ θ = β scale * \sin \theta = \beta scalesinθ=β ,则
( x ′ y ′ ) = ( s c a l e 0 0 s c a l e ) ( cos ⁡ θ sin ⁡ θ ( 1 − cos ⁡ θ ) c x − c y sin ⁡ θ − sin ⁡ θ cos ⁡ θ c x sin ⁡ θ + ( 1 − cos ⁡ θ ) c y ) ( x y 1 ) = ( α β ( s c a l e − α ) c x − β c y − β α β c x + ( s c a l e − α ) c y ) ( x y 1 ) \begin{aligned} \begin{pmatrix} x'\\ y'\\ \end{pmatrix} =& \begin{pmatrix} scale & 0\\ 0 & scale \end{pmatrix} \begin{pmatrix} \cos\theta & \sin\theta & (1 - \cos\theta)c_x - c_y\sin\theta \\ -\sin\theta & \cos\theta & c_x\sin\theta + (1-\cos\theta)c_y \\ \end{pmatrix} \begin{pmatrix} x\\ y\\ 1\\ \end{pmatrix} \\ =& \begin{pmatrix} \alpha & \beta & (scale - \alpha)c_x - \beta c_y \\ -\beta & \alpha & \beta c_x + (scale-\alpha)c_y \\ \end{pmatrix} \begin{pmatrix} x\\ y\\ 1\\ \end{pmatrix} \end{aligned} (xy)==(scale00scale)(cosθsinθsinθcosθ(1cosθ)cxcysinθcxsinθ+(1cosθ)cy) xy1 (αββα(scaleα)cxβcyβcx+(scaleα)cy) xy1

(2) 旋转后以 ( c x , c y ) (c_x, c_y) (cx,cy) 为中心点缩放,分2步:
第1步,先按上面(1)变换,此时 ( c x , c y ) (c_x, c_y) (cx,cy)点变为了 ( s c a l e ∗ c x , s c a l e ∗ c y ) (scale * c_x, scale * c_y) (scalecx,scalecy)
;第2步 x分量平移 c x − s c a l e ∗ c x c_x - scale * c_x cxscalecx ,y
分量平移 c y − s c a l e ∗ c y c_y - scale * c_y cyscalecy。因此

( x ′ y ′ ) = ( α β ( s c a l e − α ) c x − β c y − β α β c x + ( s c a l e − α ) c y ) ( x y 1 ) + ( 0 0 c x − s c a l e ∗ c x 0 0 c y − s c a l e ∗ c y ) ( x y 1 ) = ( α β ( 1 − α ) c x − β c y − β α β c x + ( 1 − α ) c y ) ( x y 1 ) \begin{aligned} \begin{pmatrix} x'\\ y'\\ \end{pmatrix} =& \begin{pmatrix} \alpha & \beta & (scale - \alpha)c_x - \beta c_y \\ -\beta & \alpha & \beta c_x + (scale-\alpha)c_y \\ \end{pmatrix} \begin{pmatrix} x\\ y\\ 1\\ \end{pmatrix} + \begin{pmatrix} 0 & 0 & c_x - scale * c_x \\ 0 & 0 & c_y - scale * c_y \\ \end{pmatrix} \begin{pmatrix} x\\ y\\ 1\\ \end{pmatrix} \\ =& \begin{pmatrix} \alpha & \beta & (1 - \alpha)c_x - \beta c_y \\ -\beta & \alpha & \beta c_x + (1-\alpha)c_y \\ \end{pmatrix} \begin{pmatrix} x\\ y\\ 1\\ \end{pmatrix} \end{aligned} (xy)==(αββα(scaleα)cxβcyβcx+(scaleα)cy) xy1 +(0000cxscalecxcyscalecy) xy1 (αββα(1α)cxβcyβcx+(1α)cy) xy1

顺便提下,毛星云写的《OpenCV3 编程入门》旋转缩放矩阵是错的,写成了2*1矩阵;《学习OpenCV 3》中文版则有一个符号错误,把加号写成了减号。这2本书都没有推导过程,这也是我写这篇文章的原因。

原文链接
仿射变换中的旋转缩放变换矩阵推导

欢迎关注我的微信公众号[数学345]:长按"识别图中二维码";或打开微信扫一扫。
仿射变换中的旋转缩放变换矩阵推导,数学,算法,矩阵,线性代数文章来源地址https://www.toymoban.com/news/detail-856945.html

到了这里,关于仿射变换中的旋转缩放变换矩阵推导的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Halcon用矩阵实现图像变换(平移,旋转,缩放,镜像等)

    目录 图像变换介绍  用Halcon自带的算子实现图像变换 使用矩阵来实现相关算子的功能 一、平移 二、旋转 三、缩放 四、镜像 完整代码         在halcon中经常会用到图像变换的操作,然后这次作业是用矩阵来实现相关算子的功能,学到了挺多的所以就记录下来方便复习。

    2024年04月17日
    浏览(41)
  • 三维变换矩阵实战——三维点云的旋转、缩放、镜像、错切、平移、正交投影

    旋转矩阵:右边矩阵是点云的原始坐标,左边的是旋转矩阵     可视化:绕x轴旋转90度 代码: 旋转矩阵:    可视化:绕y轴旋转180度 代码: 旋转矩阵:    可视化:绕z轴旋转90度 代码: 旋转矩阵:  线绕哪个轴转,xyz矩阵就和哪和轴的旋转矩阵先计算      可视化:先

    2024年02月04日
    浏览(93)
  • 我在Vscode学OpenCV 几何变换(缩放、翻转、仿射变换、透视、重映射)

    几何变换指的是将一幅图像映射到另一幅图像内的操作。 cv2.warpAffine :使用仿射变换矩阵对图像进行变换,可以实现平移、缩放和旋转等操作。 cv2.warpPerspective :使用透视变换矩阵对图像进行透视变换,可以实现镜头校正、图像纠偏等操作。 cv2.getAffineTransform :计算仿射变换

    2024年02月05日
    浏览(66)
  • Web3D数学基础(平移、旋转、缩放矩阵)—WebGL、WebGPU、Threejs

    参考资料:threejs中文网 threejs qq交流群:814702116 本下节课给大家介绍下矩阵的概念,以及用于几何变换的矩阵,比如平移矩阵、缩放矩阵、旋转矩阵。 如果你对这些几何变换的矩阵概念比较熟悉,可以跳过本节课。 线性代数、图形学 如果你有《线性代数》、《计算机图形学

    2024年02月03日
    浏览(53)
  • 【C++ OpenCV】图像变换:连接、尺寸、翻转、旋转、仿射变换

    目录 图像缩放变换 图像翻转 图像拼接 纵向拼接 横向拼接 图像插值原理 作用 单线性插值 双线性插值的公式 双线性插值的例子 双线性插值的直观展示 意义 仿射变换 图像旋转 实操 一、实现图像旋转 二、根据定义的三个点实现仿射变换,并且求取仿射变换矩阵 源码 src -

    2024年01月18日
    浏览(196)
  • 二维空间和三维空间刚体变换中的雅克比矩阵的推导

    补充一些李群 SE ⁡ ( 2 ) operatorname{SE}(2) SE ( 2 ) 和李代数 se ⁡ ( 2 ) operatorname{se}(2) se ( 2 ) 的知识, 因为视觉 SLAM十四讲 1 中只给出了 S E ( 3 ) mathrm{SE}(3) SE ( 3 ) 和 s e ( 3 ) mathrm{se}(3) se ( 3 ) 的对应关系, 但是没有给出二维空间的对应关系。其中二维空间的李群李代数参考Lie Gro

    2024年02月03日
    浏览(49)
  • Opencv-C++笔记 (16) : 几何变换 (图像的翻转(镜像),平移,旋转,仿射,透视变换)

    图像旋转是指图像按照某个位置转动一定的角度的过程,旋转中图像仍保持着原始尺寸。图像旋转后图像水平对称轴、垂直对称轴及中心坐标原点都可能会发生变换,因此需要对图像旋转中的坐标进行相应转换。 假设有一个点:P(x,y),它在绕原点 O(0,0) 旋转 β 后,被转换成

    2024年02月14日
    浏览(71)
  • 仿射变换和变换矩阵

    一、2D图像的仿射变换 仿射变换 包括 平移、旋转、错切、放缩(各向同性和各向异性) 欧式变换(刚体变换)包括 平移和旋转 相似变换包括平移、旋转、放缩(各向同性) 相似变换矩阵 有4个自由度 s,θ,tx,ty: 仿射变换矩阵 有6个自由度: 所有变换矩阵只需关注一点: 坐

    2024年02月14日
    浏览(41)
  • 【opencv】几何变换——仿射变换(4 计算仿射矩阵getAffineTransform(src, ds)

    对于空间变换的仿射矩阵有两种计算方式: 仿射变换矩阵有六个未知数,需要三组对应位置坐标,构造出由六个方程组成的方程组即可解六个未知数; 函数getAffineTransform();通过方程法计算参数src到dst的对应仿射变换矩阵; 头文件:#includeopencv2/imgproc.hpp 函数getAffineTransform()输

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包