放射变换的原理

部署运行你感兴趣的模型镜像

仿射变换是二维平面中一种重要的变换,在图像图形领域有广泛的应用。许多人对“仿射”没有一个感官的认识,我觉得很有必要先来说一下“仿射”。

所谓的“仿射变换”就是一种简单的变换,它的变化包括旋转、平移、伸缩,原来的直线仿射变换后还是直线,原来的平行线经过仿射变换之后还是平行线,这就是仿射。

仿射变换的矩阵是其次坐标形式的变换矩阵


这个矩阵包含的变换有旋转和平移,其实是两个矩阵的混合体,许多文章都对这个做了很详细的描述。仿射变换的数学公式里,是如何做到坐标点位置的平移呢?清楚这个才是弄明白仿射变换的关键。

这里有一个非常重要的图,这张图百度百科中就有。利用此图可以完成仿射变换公式的推导,推导如下:


一个点P在原始坐标系下的坐标是(Xsp,Ysp)。然后要完成旋转操作,旋转操作是基于原点的,如何得到旋转之后的点的坐标,这里用到一个技巧,坐标系中某个点的旋转可以等价地去旋转坐标轴,所以有了上图中以(Xs0,Ys0)为中心的虚线与屏幕水平垂直的坐标系。在这个坐标系中确定P的坐标,和在蓝色坐标系中确定旋转之后P的坐标是等价的。基于这个结论,我们可以通过简单的立体几何知识确定P在新坐标系中的坐标。P在新坐标系中的X坐标和Y坐标分别是


经典的仿射变换的模型呼之欲出了。整理上面两个式子得:


这就是仿射变换模型中旋转部分的原理,还有一步,就是平移。

旋转变换之后,我们确定了P点在新坐标系中的位置,然后在这个位置的基础上加上其在X轴和Y轴的偏移即可


仿射变换的矩阵横空出世。当然上图中对这个变换的处理更巧妙,它还是利用了不移动点移动坐标系的策略,将坐标系向相反方向移动了相应的距离。于是有了上图这个经典仿射变换模型的图示展现。上图中我们可以看到,整个在对P点进行仿射变换的过程中,P点的位置并没有移动,我们是通过不断的坐标系的调整来间接达到P点移动的效果,这充分说明了一件事:运动都是相对的。矩阵理论是运动是相对的这一哲学思想的深刻体现,有兴趣大家可以阅读一下这篇文章http://blog.youkuaiyun.com/xiaojidan2011/article/details/8213873。


您可能感兴趣的与本文相关的镜像

Langchain-Chatchat

Langchain-Chatchat

AI应用
Langchain

Langchain-Chatchat 是一个基于 ChatGLM 等大语言模型和 Langchain 应用框架实现的开源项目,旨在构建一个可以离线部署的本地知识库问答系统。它通过检索增强生成 (RAG) 的方法,让用户能够以自然语言与本地文件、数据库或搜索引擎进行交互,并支持多种大模型和向量数据库的集成,以及提供 WebUI 和 API 服务

### 仿射变换的基本原理 仿射变换是一种在几何中常用的变换方法,它能够在保持图形的“平直性”和“平行性”的前提下,对图形进行各种线性变换和位移。仿射变换可以看作是线性变换(如旋转、缩放)与平移操作的组合。在计算机视觉中,仿射变换常用于图像的几何变换,例如图像的旋转、平移、缩放等[^1]。 仿射变换的数学表达式可以表示为: $$ \begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} a & b \\ c & d \end{bmatrix} \cdot \begin{bmatrix} x \\ y \end{bmatrix} + \begin{bmatrix} e \\ f \end{bmatrix} $$ 其中 $(x, y)$ 是原始坐标点,$(x', y')$ 是变换后的坐标点,矩阵 $\begin{bmatrix} a & b \\ c & d \end{bmatrix}$ 表示线性变换部分(如旋转、缩放、剪切等),而向量 $\begin{bmatrix} e \\ f \end{bmatrix}$ 表示平移操作。仿射变换变换矩阵通常表示为一个 $2 \times 3$ 的矩阵: $$ \begin{bmatrix} a & b & e \\ c & d & f \end{bmatrix} $$ ### 仿射变换的性质 1. **自由度**:仿射变换具有6个自由度,对应变换矩阵中的6个系数 $a, b, c, d, e, f$。因此,仿射变换可以完全由这6个参数决定[^1]。 2. **保持平行性**:仿射变换能够保持直线的平行性。也就是说,变换后互相平行的直线仍然保持平行。 3. **保持形状**:仿射变换可以将三角形映射为另一个三角形,但不能保证将四边形以上的多边形映射为等边数的多边形[^1]。 4. **组合变换**:仿射变换的乘积和逆变换仍然是仿射变换。这意味着多个仿射变换可以组合为一个变换,且变换的逆操作也可以通过计算逆矩阵实现[^1]。 5. **几何变换能力**:仿射变换能够实现平移、旋转、缩放等基本几何变换[^1]。 ### 仿射变换在图像处理中的应用 在计算机视觉中,仿射变换常用于图像的几何变换。例如,在OpenCV中,可以通过以下方式实现仿射变换: 1. **手动指定变换矩阵**:对于简单的变换(如平移、旋转、缩放),可以直接构造一个 $2 \times 3$ 的变换矩阵,并将其传递给 `cv2.warpAffine()` 函数。需要注意的是,变换矩阵的数据类型必须为 `np.float32`。 2. **自动求解变换矩阵**:对于复杂的变换,可以通过已知的三组对应点(原图中的三点和变换后的三点)来求解仿射变换矩阵。OpenCV提供了 `cv2.getAffineTransform()` 函数来计算变换矩阵,然后将其传递给 `cv2.warpAffine()` 函数进行图像变换[^3]。 ### 示例代码 以下是一个使用OpenCV进行仿射变换的Python示例代码: ```python import cv2 import numpy as np # 读取图像 image = cv2.imread('input.jpg') # 定义三个点用于计算仿射变换矩阵 pts1 = np.float32([[50, 50], [200, 50], [50, 200]]) pts2 = np.float32([[10, 100], [200, 50], [100, 250]]) # 计算仿射变换矩阵 M = cv2.getAffineTransform(pts1, pts2) # 应用仿射变换 rows, cols = image.shape[:2] transformed_image = cv2.warpAffine(image, M, (cols, rows)) # 显示结果 cv2.imshow('Transformed Image', transformed_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值