精华内容
下载资源
问答
  • 仿射定义
    2021-06-20 14:30:18

    仿射变换介绍

    仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。

    仿射变换原理

    • 仿射变换矩阵

      M = [A B] =
      [ a 00 a 01 b 00 a 10 a 11 b 10 ] (1) \begin{bmatrix} a00 & a01 & b00 \\ a10 & a11 & b10 \end{bmatrix} \tag{1} [a00a10a01a11b00b10](1)

    • 仿射变换原理

      **T=A * [x,y] + B **

    仿射变换相关函数

    图像仿射变换

    warpAffine()

    void cv::warpAffine(InputArray		src,
                       OutputArray		dst,
                       InputArray		M,
                       Size				dsize,
                       int flags		= INTER_LINEAR,
                       int borderMode 	= BORDER_CONSTANT,
                       const Scalar& borderValue = Scalar())
    
    • src:输入图像
    • dst:仿射变换后输出图像,与src数据类型相同,尺寸与dsize相同
    • M:2*3的变换矩阵
    • dsize:输出图像大小
    • flags:插值方法标志
    • borderMode:像素边界外推方法标志
    • borderValue:填充边界使用的数值,默认为0

    旋转矩阵仿射变换

    getRotationMatrix2D()

    Mat cv::getRotationMatrix2D(Point2f		center,
                               double		angel,
                               double		scale)
    
    • center:图像旋转的中心位置

    • angle:图像旋转的角度,正直为逆时针旋转

    • scale:两个轴的比例因子,可以实现旋转过程中的比例缩放,不缩放则为1
      R o t a t i o n = [ a 00 a 01 b 00 a 10 a 11 b 10 ] (1) Rotation = \begin{bmatrix} a00 & a01 & b00 \\ a10 & a11 & b10 \end{bmatrix} \tag{1} Rotation=[a00a10a01a11b00b10](1)
      其中

      ​ α = scale * cos(angle)

      ​ β = scale * cos(angle)

    三点对应仿射变换

    getAffineTransform()

    Mat cv::getAffineTransform(const Point2f src[],
                              const Point2f dst[])
    
    • src[]:原图像中三个像素坐标
      • dst[]:目标图像中的三个像素坐标
    #include <iostream>
    #include <opencv2/opencv.hpp>
    #include <vector>
    
    using namespace std;
    using namespace cv;
    
    int main()
    {
    	Mat img = imread("lena.png");
    
    	Mat rotation0, rotation1, img_warp0, img_warp1;
    	double angle = 30;						// 图像旋转角度
    	Size dst_size(img.rows/2, img.cols/2);		// 设置输出图像尺寸
    	// 设置旋转中心点
    	Point2f center(img.rows / 2.0, img.cols / 2.0);
    	// 计算仿射变换矩阵
    	rotation0 = getRotationMatrix2D(center, angle, 1);
    	warpAffine(img, img_warp0, rotation0, dst_size, WARP_INVERSE_MAP);
    	imshow("rotation0", img_warp0);
    
    	// 根据定义的三个点进行仿射变换
    	Point2f src_points[3];
    	Point2f dst_points[3];
    	// 原始图像中的三个点
    	src_points[0] = Point2f(0, 0);
    	src_points[1] = Point2f(0, (float)(img.cols - 1));
    	src_points[2] = Point2f((float)(img.rows - 1), (float)(img.cols - 1));
    
    	// 仿射变换后的三个点
    	dst_points[0] = Point2f((float)(img.rows * 0.11), (float)(img.cols * 0.20));
    	dst_points[1] = Point2f((float)(img.rows * 0.15), (float)(img.cols * 0.70));
    	dst_points[2] = Point2f((float)(img.rows * 0.81), (float)(img.cols * 0.85));
    	rotation1 = getAffineTransform(src_points, dst_points);
    	warpAffine(img, img_warp1, rotation1, dst_size, WARP_FILL_OUTLIERS);
    	imshow("img_warp1", img_warp1);
    
    	waitKey(0);
    	return 0;
    }
    
    
    更多相关内容
  • Lecture.仿射函数(仿射变换).doc
  • 主要介绍了基于Python解密仿射密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 然后定义保守度作为保守性的量化指标,以完备性为约束条件、保守度最小为优化目标,基于海森矩阵求解仿射乘法的最优近似;最后将仿射乘法的最优近似用于仿射谐波潮流计算。IEEE 30节点系统仿真结果表明,相较于传统...
  • 仿射非线性系统状态方程的任意阶近似解[定义].pdf
  • ∞ 性能的定义, 并在此基础上提出使得系统有限时间内有界的充分条件以及??∞</sub> 控制器的设计方法, 所得结论均以线性矩阵不等式(LMI) 的形式给出. 最后通过算例验证了所提出方法的正确性和有效性.</p>
  • 仿射密码

    千次阅读 2021-04-21 22:43:39
    语言:python3 实验目的: 通过编程实现代换密码算法——仿射密码和简单置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。 实验内容: ... 仿射密码加密解密模块 @author WQ @.

    仿射密码定义原理:
      仿射密码为单表加密的一种,字母系统中所有字母都借一简单数学方程加密,对应至数值,或转回字母。 其仍有所有替代密码之弱处。所有字母皆借由方程加密,b为移动大小。
      在仿射加密中,大小为m之字母系统首先对应至0…m-1范围内之数值, 接着使用模数算数来将原文件中之字母转换为对应加密文件中的数字。 单一字母的加密函数为:
      在这里插入图片描述
    取余m为字母系统大小且a和b为密码关键值。a之值必须使得a与m互质。
    解密方程为
      在这里插入图片描述
    举例说明:

    代换密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如,明文字母a、b、c、d,用D、E、F、G做对应替换后形成密文。
    代换密码包括多种类型,如单表代换密码、多表代换密码等。下面介绍一种典型的单表代换密码——仿射密码。它的加密、解密过程可以表示为下面的函数:
    在这里插入图片描述
    仿射加密要求gcd(k1,26)=0,否则就褪化为 y=f(k)=k2(mod 26)。
    故密钥空间大小为: (k1,k2)=12x26=312
    例如:密钥k=(7,3),7-1(mod 26)=15
    加密函数: y=f(x)=7x+3(mod 26)
    解密函数: x=f^(-1)(y)=15(y-3)(mod 26)=15y-9(mod 26)
    设明文:China,首先转换为数字:2,7,8,13,0 在这里插入图片描述
    原始消息“China”得到恢复

    1、实验目的:
      通过编程实现代换密码算法——仿射密码和简单置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。
    2、实验内容:
      根据仿射密码的实现原理,实现利用仿射密码进行加密和解密的程序。
      (1)设计加密程序:能够根据用户输入明文的内容产生加密的密文并输出。
      (2)设计解密程序:能够对输入的密文内容破解并输出得到其对应的明文。

    # -*- coding: UTF-8 -*-
    import math
    """
        仿射密码加密解密模块
        @author WQ
        @time 2020/11/18
    """
    class Affine():
        """
            仿射密码
            Encrypt:加密方法
    		Decrypt:解密方法
    		letters:字母数字对应字典
        """
        def __init__(self):
            self.ciphertext=''  #加密后的密文
            self.plaintext=''   #解密后的明文
            self.reverse=0 #秘钥a的逆元
            self.list_keya=[3,5,7,9,11,15,17,19,21,23,25] #秘钥a可能取值
            self.letters = {
                    'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'g':6, 'h': 7,
                    'i': 8, 'j': 9, 'k': 10, 'l': 11, 'm': 12, 'n': 13, 'o': 14,
                    'p': 15, 'q': 16, 'r': 17, 's': 18, 't': 19, 'u': 20,
                    'v': 21, 'w': 22, 'x': 23, 'y': 24, 'z': 25}
    
        def gcd(self,a,b=26):
            if(a<b):
                return self.gcd(b,a)
            while(a%b!=0):
                temp = b
                b = a%b
                a = temp
            return b 
    
        def Encrypt(self,a=0,b=0,input=""):
            """
                对输入的字符串进行加密
                加密算法:c=Ea,b(m)=am+b(mod26) m是单个明文字母
                args={
                        a,b:秘钥
                        input:用于加密的明文
                }  
            """
            if(self.gcd(a)!=1):
                print("秘钥a错误,应与26互质,请重输!")
                exit(0)
            if(b>=26):
                print("秘钥b错误[0~26],请重输!")
                exit(0)
            input=input.lower()
            digitals=[]
            #加密转化成密文对应数字
            for i in input:
                for j in self.letters:
                    if(i==j):
                        d=(a*self.letters[i]+b)%26
                        digitals.append(d)
    
            #将对应数字转化对应密文字母
            for i in digitals:
                for j in self.letters:
                    if(i==self.letters[j]):
                        self.ciphertext=self.ciphertext+j  
    
        def Decrypt(self, a, b, input=""):
            """
                对输入的字符串进行解密
                解密算法:m=Da,b(m)=a(-1)(c-b)(mod26) c是单个密文字母
                args={
                        a(-1):秘钥a的逆元
                        b:秘钥
                        input:用于解密的秘文
                }  
            """
            if(self.gcd(a)!=1):
                print("秘钥a错误,应与26互质,请重输!")
                exit(0)
            if(b>=26):
                print("秘钥b错误[0~26],请重输!")
                exit(0)
            digitals=[]
            self.reverse=self.Inverse(a) #求逆元
            for i in input:#解密 密文转化成对应数字
                for j in self.letters:
                    if(i==j):
                        digitals.append(self.letters[j])
            #解密
            for i in digitals:
                t=(self.reverse*(i-b))%26
                for j in self.letters:
                    if(t==self.letters[j]):
                        self.plaintext=self.plaintext+j
    
        def BruteForce(self, input=''):
            #暴力破解仿射密码
            digitals=[]
            plaintext=''
            for i in input: #解密 密文转化成对应数字
                for j in self.letters:
                    if(i==j):
                        digitals.append(self.letters[j])
    
            for keya in self.list_keya:
                a=self.Inverse(keya)
                for keyb in range(0,26):
                    for i in digitals:
                        t=(keya*(i-keyb))%26
                        for j in self.letters:
                            if(t==self.letters[j]):
                                plaintext=plaintext+j
                                break
                    print(plaintext)
                    plaintext=''
    
        def Inverse(self, a,mod=26):
            #求秘钥a的逆元 欧几里得算法   
            x1,x2,x3 = 1,0,mod
            y1,y2,y3 = 0,1,a
            while(1):
                if(y3==0):
                    g=x3
                    break
                if(y3==1):
                    g=y3
                    break
                q=math.floor(x3/y3)#向下取整
                t1,t2,t3=x1-q*y1,x2-q*y2,x3-q*y3
                x1,x2,x3=y1,y2,y3
                y1,y2,y3=t1,t2,t3
            return y2   #逆元求得为y2,y3为gcd(a,26),最大公因数   
    
    if __name__ == "__main__":
        test=Affine()
        #a=test.Inverse(615647919867658945209035999713482421889581801898774401730949,691310408299283134015133178155232316338199895735303344369216)
        #print(a)
        inputs=input("请输入待加密明文:")
        a=int(input("请输入秘钥[a]:"))
        b=int(input("请输入秘钥[b]:"))
        test.Encrypt(a,b,inputs)
        test.Decrypt(a,b,test.ciphertext)
        s1 = "加密为:" + test.ciphertext
        s2 ="解密为:" + test.plaintext
        s3 = str(a) + "的逆元为: " + str(test.reverse)
        print(s1)
        print(s2)
        print(s3)
        #test.BruteForce(test.ciphertext)
    

    运行结果:

    在这里插入图片描述

    小结:仿射密码是利用简单的置换原理,实现比较容易;增加了一个爆破函数,利用穷举爆破仿射密码。

    展开全文
  • 包含各种仿射变换的程序,即平移、旋转、均匀和非均匀缩放、正投影、斜投影和透视投影。 它还包含面部绘图功能,可以轻松地针对特定问题绘制 3d 图形。 这可以在代码的仿射变换... 法向量和初始状态需要由用户定义
  • 主要介绍了使用OpenCV实现仿射变换—平移功能,需要的朋友可以参考下
  • 本文研究了用连续时间仿射模糊模型描述的一类非线性系统的状态反馈控制器设计问题。 基于分段连续的Lyapunov函数,结合S过程和一些矩阵解耦技术,在有限频域中线性矩阵不等式(LMI)的表示中推导了新的控制律。 首先...
  • 本文研究了利率仿射期限结构下债券折扣价格的市场风险价格。 通常的关系扮演两个角色。 首先,它是风险市场价格的定义,其次,它为贴现债券市场提供了无套利条件。 这里的关系定义了更一般情况下风险的市场价格,但...
  • 仿射组合(Affine Combination) 对于数域为 FF\mathbb F 的线性空间 VVV 中的任意 nnn 个向量 a1,⋯,an,a1,⋯,an,a_1, \cdots, a_n, 称向量 β=∑i=1nxiαi,β=∑i=1nxiαi,\beta = \sum \limits_{i = 1} ^{n} x ...

    仿射组合(Affine Combination)

    对于数域为 F F 的线性空间 V V 中的任意 n 个向量 a1,,an, a 1 , ⋯ , a n , 称向量
    β=i=1nxiαi, β = ∑ i = 1 n x i α i , (其中 i=1nxi=1,xiF,iN,1in ∑ i = 1 n x i = 1 , x i ∈ F , i ∈ N , 1 ≤ i ≤ n
    a1,,an a 1 , ⋯ , a n 的 一个仿射组合。

    性质

    对于数域为 F F 的线性空间 V V 中的任意 n 个向量 a1,,an, a 1 , ⋯ , a n , 令集合
    S={i=1nxiαii=1nxi=1,xiF,iN,1in} S = { ∑ i = 1 n x i α i | ∑ i = 1 n x i = 1 , x i ∈ F , i ∈ N , 1 ≤ i ≤ n }
    则:
    1. α,βS,λ,μF, ∀ α , β ∈ S , ∀ λ , μ ∈ F , λ+μ=1, λ + μ = 1 , λα+μβS λ α + μ β ∈ S
    2. α,β,γS,kF,α+k(βγ)S ∀ α , β , γ ∈ S , ∀ k ∈ F , α + k ( β − γ ) ∈ S

    证明

    1. α,βS, α , β ∈ S , 则存在集合
      {xiF|iN,1in},{yiF|iN,1in}, { x i ∈ F | i ∈ N , 1 ≤ i ≤ n } , { y i ∈ F | i ∈ N , 1 ≤ i ≤ n } , 使得
      α=i=1nxiαiβ=i=1nyiαi, { α = ∑ i = 1 n x i α i β = ∑ i = 1 n y i α i , i=1nxi=1i=1nyi=1, { ∑ i = 1 n x i = 1 ∑ i = 1 n y i = 1 ,
      λα+μβ=λi=1nxiαi+μi=1nyiαi=i=1n(λxi+μyi)αi, λ α + μ β = λ ∑ i = 1 n x i α i + μ ∑ i = 1 n y i α i = ∑ i = 1 n ( λ x i + μ y i ) α i ,
      i=1n(λxi+μyi)=λi=1nxi+μi=1yi=λ+μ=1 ∑ i = 1 n ( λ x i + μ y i ) = λ ∑ i = 1 n x i + μ ∑ i = 1 y i = λ + μ = 1
      因此 λα+μβS λ α + μ β ∈ S
    2. α,β,γS, α , β , γ ∈ S , 则存在集合
      {xiF|iN,1in},{yiF|iN,1in},{ziF|iN,1in}, { x i ∈ F | i ∈ N , 1 ≤ i ≤ n } , { y i ∈ F | i ∈ N , 1 ≤ i ≤ n } , { z i ∈ F | i ∈ N , 1 ≤ i ≤ n } , 使得
      α=i=1nxiαiβ=i=1nyiαiγ=i=1nziαi, { α = ∑ i = 1 n x i α i β = ∑ i = 1 n y i α i γ = ∑ i = 1 n z i α i , i=1nxi=1i=1nyi=1i=1nzi=1, { ∑ i = 1 n x i = 1 ∑ i = 1 n y i = 1 ∑ i = 1 n z i = 1 ,
      α+k(βγ)=i=1nxiαi+k(i=1nyiαii=1nziαi), α + k ( β − γ ) = ∑ i = 1 n x i α i + k ( ∑ i = 1 n y i α i − ∑ i = 1 n z i α i ) ,
      =i=1n(xi+kyikzi)αi = ∑ i = 1 n ( x i + k y i − k z i ) α i
      i=1n(xi+kyikzi)=i=1nxi+ki=1nyiki=1nzi=1+kk=1 ∑ i = 1 n ( x i + k y i − k z i ) = ∑ i = 1 n x i + k ∑ i = 1 n y i − k ∑ i = 1 n z i = 1 + k − k = 1
      因此 α+k(βγ)S α + k ( β − γ ) ∈ S
    展开全文
  • 仿射变换是在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射。由一个非奇异的线性变换(运用一次函数进行的变换)接上一个平移变换组成。在有限维的情况,每个仿射变换可以由一个矩阵A和一个向量b给出,它
  • 了一个抗密钥泄露的双态仿射函数加密方案,该方案中加密策略和解密角色定义仿射空间,并且具有再次委托<br /> 能力.在双系统加密模型下,实现了自适应安全的抗有界的主密钥泄露和用户密钥连续泄露的加密...
  • 本文将其对模的定义扩展到仿射的Temperley-Lieb代数TLna。由于常规的Temperley-Lieb代数TLn是仿射TLna的子代数,因此存在一对自然的伴随诱导限制函子(↑ar,↓ra) 。 代数:TLna→TLn的存在提供了第二对伴随函子...
  • 针对有扰动的约束非线性系统,提出了一种基于仿射控制输入的反馈预测控制策略. 采用无穷范数定义有限时域代价函数,对其进行极大极小优化得到预测控制律,并应用输入状态稳定分析了闭环系统的鲁棒稳定性,同时还给出...
  • 光流估计(一)-- 仿射变换

    千次阅读 2021-12-13 14:50:17
    图像仿射变换矩阵如何靠六个参数确定

    光流估计(一)仿射变换

    由于过去做的研究是传统计算机视觉的图像梯度算法,所以近期想要了解一下光流估计的传统的“基于梯度的”算法。看似图像仿射变换和光流估计一点关系也没有,但是之后部分建模可能会用到它,所以先列在这。

    仿射变换是在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射(来自拉丁语,affine,“和…相关”)由一个非奇异的线性变换(运用一次函数进行的变换) 接上一个平移变换组成。对于图像的仿射变换而言,通常有 个参数。为什么是 6 个?
    请添加图片描述

    1. 仿射变换的一般定义

    仿射变换为两函数的复合:平移线性映射。普通向量代数用矩阵乘法呈现线性映射,用向量加法表示平移。一个对向量 x ⃗ \vec{x} x 平移 b ⃗ \vec{b} b ,与旋转放大缩小 A A A 的仿射映射为:
    y ⃗ = A x ⃗ + b ⃗ \vec{y}=A \vec{x}+\vec{b} y =Ax +b
    上式在齐次坐标上(为了写成矩阵乘法形式,就和神经网络中把 bias 视作一个对应权重为 1 的输入神经元一样),等价于下式:
    [ y ⃗ 1 ] = [ A b ⃗ 0 , … , 0 1 ] [ x ⃗ 1 ] \left[\begin{array}{c} \vec{y} \\ 1 \end{array}\right]=\left[\begin{array}{cc} A & \vec{b} \\ 0, \ldots, 0 & 1 \end{array}\right]\left[\begin{array}{l} \vec{x} \\ 1 \end{array}\right] [y 1]=[A0,,0b 1][x 1]
    这其实是一个 增广矩阵增广向量 的乘积。

    一仿射变换为可逆的当且仅当A为可逆的。在矩阵表示中,其逆元为:

    [ A − 1 − A − 1 b ⃗ 0 , … , 0 1 ] y ⃗ = A x ⃗ + b ⃗ ⇒ x ⃗ = A − 1 y ⃗ − A − 1 b ⃗ \left[\begin{array}{cc} A^{-1} & -A^{-1} \vec{b} \\ 0, \ldots, 0 & 1 \end{array}\right] \\ \vec{y}=A \vec{x}+\vec{b} \Rightarrow \vec{x}=A^{-1}\vec{y}-A^{-1}\vec{b} [A10,,0A1b 1]y =Ax +b x =A1y A1b

    2. 图像仿射变换 - 6个参数

    图像二维仿射变换包括对二维影像的平移、旋转、放缩和拉伸,对应的二维仿射变换矩阵由 6 参数 ( a , b , c , d , e , f a,b,c,d,e,f a,b,c,d,e,f) 组成。 ( x , y ) (x,y) (x,y) 表示原始影像的像素位置, ( X , Y ) (X,Y) (X,Y) 表示变换后的像素位置,则 X = a x + b y + c , Y = d x + e y + f X=ax+by+c, Y=dx+ey+f X=ax+by+c,Y=dx+ey+f

    先了解一下基础的变换有哪些:

    请添加图片描述

    2.1 平移

    对每一个像素点坐标平移。可以让每一个像素点的 x,y 坐标都加一个变量。矩阵形式表示为:
    [ 1 0 T x 0 1 T y 0 0 1 ] [ X Y 1 ] = [ X + T x Y + T y 1 ] \left[\begin{array}{ccc} 1 & 0 & T_{x} \\ 0 & 1 & T_{y} \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{l} X \\ Y \\ 1 \end{array}\right]=\left[\begin{array}{c} X+T_{x} \\ Y+T_{y} \\ 1 \end{array}\right] 100010TxTy1XY1=X+TxY+Ty1
    等式左边 [ X , Y , 1 ] [X,Y,1] [X,Y,1] 是像素坐标的齐次形式。等式右边是平移之后的坐标的齐次形式。

    2.2 放缩

    进行放缩,就是将矩形(图像)放缩 n n n 倍,也就是长宽各乘一个放缩系数变量。
    [ W 0 0 0 H 0 0 0 1 ] [ X Y 1 ] = [ W X H Y 1 ] \left[\begin{array}{ccc} W & 0 & 0 \\ 0 & H & 0 \\ 0 & 0 & 1 \end{array}\right] \left[\begin{array}{l} \mathbf{X} \\ \mathbf{Y} \\ 1 \end{array}\right]=\left[\begin{array}{c} W \mathbf{X} \\ H \mathbf{Y} \\ 1 \end{array}\right] W000H0001XY1=WXHY1
    这里说一下,反射矩阵为:
    [ − 1 0 0 0 1 0 0 0 1 ] [ 1 0 0 0 − 1 0 0 0 1 ] \left[\begin{array}{ccc} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right] \quad \left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{array}\right] 100010001100010001

    2.3 旋转

    对矩形(图片)进行旋转,也就是乘上一个旋转矩阵:
    [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] [ X 0 Y 0 1 ] = [ X 1 Y 1 1 ] \left[\begin{array}{ccc} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{c} X_{0} \\ Y_{0} \\ 1 \end{array}\right]=\left[\begin{array}{c} X_{1} \\ Y_{1} \\ 1 \end{array}\right] cosθsinθ0sinθcosθ0001X0Y01=X1Y11

    2.4 错切

    相比于前两个而言,错切没有那么直观,我们可以先从简单的形式入手。我们可以看下矩形关于 y y y 方向的错切:

    请添加图片描述

    看图就很直观了,其对应的数学表达为:
    [ 1 0 0 tan ⁡ Ψ 1 0 0 0 1 ] [ X Y 1 ] = [ X Y + X tan ⁡ Ψ 1 ] \left[\begin{array}{ccc} 1 & 0 & 0 \\ \tan \Psi & 1 & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{c} X \\ Y \\ 1 \end{array}\right]=\left[\begin{array}{l} X \\ Y + X\tan \Psi \\ 1 \end{array}\right] 1tanΨ0010001XY1=XY+XtanΨ1

    x x x 轴上的错切就是同理了,公式如下:
    [ 1 tan ⁡ Φ 0 0 1 0 0 0 1 ] [ X Y 1 ] = [ X + Y tan ⁡ Φ Y 1 ] \left[\begin{array}{ccc} 1 & \tan \Phi & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{c} X \\ Y \\ 1 \end{array}\right]=\left[\begin{array}{l} X + Y\tan \Phi\\ Y \\ 1 \end{array}\right] 100tanΦ10001XY1=X+YtanΦY1
    然后两者和起来,错切就如下了:
    [ 1 tan ⁡ Φ 0 tan ⁡ Ψ 1 0 0 0 1 ] [ X Y 1 ] = [ X + Y tan ⁡ Φ Y + X tan ⁡ Ψ 1 ] \left[\begin{array}{ccc} 1 & \tan \Phi & 0 \\ \tan \Psi & 1 & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{c} X \\ Y \\ 1 \end{array}\right]=\left[\begin{array}{l} X + Y\tan \Phi\\ Y + X\tan \Psi \\ 1 \end{array}\right] 1tanΨ0tanΦ10001XY1=X+YtanΦY+XtanΨ1

    到此我们就了解了这四种变换了,那仿射变换是什么呢?可以看下图公式 (最后的平移是为了把图片移动回第一象限,因为图像坐标都是正数):
    [ 1 0 T x 0 1 T y 0 0 1 ] [ cos ⁡ Θ − sin ⁡ Θ 0 sin ⁡ Θ cos ⁡ Θ 0 0 0 1 ] [ W 0 0 0 H 0 0 0 1 ] [ 1 tan ⁡ ϕ 0 tan ⁡ ψ 1 0 0 0 1 ] [ 1 0 T x ′ 0 1 T y ′ 0 0 1 ] = [ a 0 a 1 b 1 a 2 a 3 b 2 0 0 1 ] \begin{array}{l} {\left[\begin{array}{ccc} 1 & 0 & T_x \\ 0 & 1 & T_y \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{ccc} \cos \Theta & -\sin \Theta & 0 \\ \sin \Theta & \cos \Theta & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{ccc} W & 0 & 0 \\ 0 & H & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{ccc} 1 & \tan \phi & 0 \\ \tan \psi & 1 & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{ccc} 1 & 0 & T^{\prime}_x \\ 0 & 1 & T^{\prime}_y \\ 0 & 0 & 1 \end{array}\right]=\left[\begin{array}{ccc} a_{0} & a_{1} & b_{1} \\ a_{2} & a_{3} & b_{2} \\ 0 & 0 & 1 \end{array}\right]} \end{array} 100010TxTy1cosΘsinΘ0sinΘcosΘ0001W000H00011tanψ0tanϕ10001100010TxTy1=a0a20a1a30b1b21

    等式右边就是仿射变换矩阵,是由原图像旋转,放缩,错切,平移之后得来的。这得到的,就是题所说的六个参数。这六个参数之间是没有什么公式关系的,但各个参数却也不是简单的代表了某个变换,而都是各个变换叠加而成的。

    仿射变换中集合中的一些性质保持不变:
    (1)凸性
    (2)共线性:若几个点变换前在一条线上,则仿射变换后仍然在一条线上
    (3)平行性:若两条线变换前平行,则变换后仍然平行
    (4)共线比例不变性:变换前一条线上两条线段的比例,在变换后比例仍然不变

    注:所有的三角形都能通过仿射变化为其他三角形,所有平行四边形也能仿射变换为另一个平行四边形

    注:透视变换和放射变换不同,透视变换可以变换平行四边形成任意不规则四边形

    参考

    展开全文
  • 3.2仿射变换1

    2022-08-08 21:58:04
    3.2 仿射变换3.2.1 齐次坐标下一节我们就会知道仿射变换是一个组合了平移的线性变换 3.2.2 定义和矩阵表示一个线性变换无法表示所有我们需要的变换 3.
  • 给出了仿射切换系统的FTB概念以及有限时间鲁棒H∞性能的定义,并在此基础上提出使得系统有限时间内有界的充分条件以及H∞控制器的设计方法,所得结论均以线性矩阵不等式(LMI)的形式给出。最后通过算例验证了所提出...
  • 结合分段仿射目标跟踪方法中仿射变换参数的思想,对双侧学习的目标跟踪方法进行了改变,以达到对运动目标跟踪的良好效果。通过重新定义双侧学习方法中的均值和协方差等重要参数,使这些参数适合运动目标跟踪,并设计出...
  • 仿射空间

    千次阅读 2019-09-27 14:47:16
    向量空间(也叫线性空间)我们是很熟悉的,那么可以借助向量空间给仿射空间一个直观的定义仿射空间就是没有原点的向量空间。 向量空间没有了原点,会有什么样的影响?向量是基于原点的,向量有两个元素-大小、...
  • 什么是仿射函数?

    2021-07-14 14:02:04
    仿射函数(affine function)即由 1 阶多项式构成的函数,一般形式为:f(x)=Ax+bf(x)=Ax+bf(x)=Ax+b,这里,AAA是一个m×km × km×k 矩阵,xxx 是一个 kkk 向量,bbb 是一个 mmm 向量,实际上反映了一种从 kkk 维到...
  • 仿射变换代码

    2013-11-22 12:17:30
    在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射(来自拉丁语,affinis,“和。..相关”)由一个线性变换接上一个平移组成。
  • 函数f:Rn→Rf:\mathbf{R}^{n} \rightarrow \mathbf{R}f:Rn→R是凸的,如果fff在定义域(domdomdom)上是凸集,且对于任意x,y∈domfx,y∈\mathbf{dom}fx,y∈domf和任意0⩽θ⩽10⩽θ⩽10⩽θ⩽1,有 f(θx+(1−θ)y)⩽...
  • 本文介绍了仿射变换的类型及其关系以及仿射变换矩阵,基本的仿射变换包括平移、旋转、缩放和错切,镜像可以看做特殊的缩放。实际中一般图像的仿射变换就是平移、旋转、缩放和错切的叠加组合,每叠加一个处理,就进行...
  • 本文是老猿关于仿射变换的原理、概念以及OpenCV-Python实现额的导览式文章,通过本文作为入口,读者可以非常快速的理解仿射变换的相关知识以及开发应用。
  • 一文搞懂仿射变换

    千次阅读 多人点赞 2020-02-12 11:57:50
    在图像处理中,我们经常需要对图像进行各种操作如平移、缩放、旋转、翻转等,有时候我们还需要将图像投影到另一个平面来对图像做一些矫正,然而这些操作都与仿射变换和透视变换有着莫大的联系。通过本篇文章,你能够...
  • //第三题 仿射变换 旋转缩放(定义点之间对应关系) #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { cv::Mat dstMat; cv::Mat srcMat = ...
  • //第二题 仿射变换 旋转缩放(定义旋转度数和缩放大小) #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { cv::Mat dstMat; cv::Mat srcMat...
  • 仿射变换与加密

    2021-04-17 09:00:19
    前言:摘抄自wiki的关于仿射变换的定义仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。一个对向量平移,与旋转放大缩小的仿射映射为 【1】1、移位...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,712
精华内容 6,284
关键字:

仿射定义