精华内容
下载资源
问答
  • 论文研究-基于仿射过程的企业债信用价差期限结构模型.pdf, 本文选取上海证券交易所2003年至2010年国债和企业债交易数据,通过遗传算法求解五因子利率期限结构模型,分别...
  • 遇到了一些情况需要将图片旋转一定角度使其相对来说是符合人类认知的形式【就是歪图转正】于是接触了处理图片的经典方式——仿射变换 定义:仿射变换的功能是从二维坐标到二维坐标之间的线性变换,且保持二维图形的...

    遇到了一些情况需要将图片旋转一定角度使其相对来说是符合人类认知的形式【就是歪图转正】于是接触了处理图片的经典方式——仿射变换

    定义:仿射变换的功能是从二维坐标到二维坐标之间的线性变换,且保持二维图形的“平直性”和“平行性”。仿射变换可以通过一系列的原子变换的复合来实现,包括平移,缩放,翻转,旋转和剪切。

    1)图像的几何变换

    对图像进行放大、缩小、旋转等操作,会改变原图中各区域的空间关系,这类操作就是图像的几何变换。

    2)仿射变换

    对原来的x和y坐标分别进行线性的几何变换,得到新的x和y,这种变换就是放射变换。

    3)投影变换

    4)极坐标变换

    5)齐次坐标

    在原坐标的基础上,引入第三个数值为1的坐标,这种表示方法就是齐次坐标。

    6)仿射变换矩阵

    仿射变换矩阵的最后一行均为(0,0,1)此形式,最后一个值为1。


    平移(translation)旋转(rotation) 顾名思义,两者的组合称之为 欧式变换(Euclidean transformation)刚体变换(rigid transformation)

    放缩(scaling) 可进一步分为 uniform scalingnon-uniform scaling,前者每个坐标轴放缩系数相同(各向同性),后者不同;如果放缩系数为负,则会叠加上反射(reflection)——可以看成是特殊的scaling;

    刚体变换+uniform scaling 称之为,相似变换(similarity transformation),即平移+旋转+各向同性的放缩;

    剪切变换(shear mapping) 将所有点沿某一指定方向成比例地平移

    上图
    在这里插入图片描述
    这张图就是被各大博客,知乎精华所引用的仿射变换的

    简单来说,图像的本质可以看做一个三维矩阵,第一维为长度,第二维是宽度,第三维是通道数(RGB),如果一张图在python中是一个变量image,那么其长宽即width, height = image.shape[:2],即前两维度的表示方法。

    对于图像矩阵中的每一个像素坐标(x,y),我们可以令其乘上一个矩阵,使所有像素坐标平移,旋转,缩放,翻转到处理后的图像新坐标上

    对于每种操作的矩阵构造如下:
    在这里插入图片描述
    以下是对单一变换时所做的矩阵操作
    在这里插入图片描述
    要知道,计算机中往往左上角是坐标原点,图片的高度(width)是X轴,宽度(height)是Y轴,因此当以原点为圆心顺时针旋转90°为例,我们将把图旋转出第一象限,此时需要将图片向Y轴方向平移原图的高度(width)才能回到第一象限:
    在这里插入图片描述
    这样的复合操作其实是多个矩阵相乘的结果
    在这里插入图片描述
    分解后是多个单独的操作

    以(0,0)为中心进行放大和缩小

    这里的放大和缩小不是指在物理空间中某一物体的放大和缩小。

    二维空间坐标(x, y)以(0,0)为中心,在水平上缩放Sx倍,指的是变换后的坐标位置(x’,y’)离(0,0)的水平距离变为原坐标(x,y)离位置中心点的水平距离的Sx倍;在垂直方向上缩放Sy倍,指的是变换后的坐标位置(x’,y’)离(0,0)的垂直距离为原坐标(x,y)离位置中心的垂直距离的Sy倍。

    用数学公式表示,(x’, 'y) = (Sx * x, Sy * y)

    如果Sx>1,则表示在水平方向上放大;如果0<Sx<1,则表示在水平方向上缩小。

    如果Sy>1,则表示在垂直方向上放大;如果0<Sy<1,则表示在垂直方向上缩小。


    假设已知参数是图片本体,我们可以自己构造一个需要的仿射变换矩阵,做自定义操作。
    如顺时针旋转90°:

    width, height = img.shape[:2]
    transform = np.matrix(
          [[1, 0, 0], [0, 1, width], [0, 0, 1]], dtype='float')
      transform *= np.matrix(
          [
              [np.cos(np.pi / 2), np.sin(np.pi / 2), 0],
              [-np.sin(np.pi / 2), np.cos(np.pi / 2), 0], [0, 0, 1]
          ],
          dtype='float')
      transform = np.linalg.inv(transform)
      img = cv2.warpAffine(img, transform[:2], (width, height))
    

    以(x0,y0)为中心的放大和缩小

    以(0,0)为中心的放大和缩小,很容易理解。而以(x0,y0)为中心的放大和缩小,直接来理解比较苦难。但是可以用分解步骤的思想来进行理解,可以变得简单一些。

    以(x0,y0)为中心的缩放(x,y)=先将原点(0,0)移动到中心点(x0,y0)—>以新原点为中心点进行缩放—>然后再移回坐标原点。

    等比例缩放

    在上面放大和缩小的公式中,如果Sx==Sy,则表示是等比例缩放。


    吐槽一下自己,突然意识到自己从秋招回学校之后就开始浪了,再也懒得写博客了,虽然零零散散接触了些新东西,但是没有系统的学过,也不好将皮毛整理成博客。接下来是正经的学习期,以及毕设的准备与实践采坑,,,新的开始,忘掉过去,要写一些更实用的博客了。

    展开全文
  • python实现仿射密码加解密过程

    千次阅读 2017-05-12 22:10:55
    对于仿射密码算法过程这里不做过多讲解,请自行参照教材或者网络资料。这里需要注意的是,默认为加密后的密文要转化为大写字母的形式。下面是用python实现的加解密过程: 密钥为k=(11,4) (1)加密过程 (2)...

    对于仿射密码算法过程这里不做过多讲解,请自行参照教材或者网络资料。这里需要注意的是,默认为加密后的密文要转化为大写字母的形式。下面是用python实现的加解密过程:

    密钥为k=(11,4)

    (1)加密过程

    import string
    
    plaintext_ = string.ascii_lowercase
    ciphertext_ = string.ascii_uppercase
    
    
    #加密算法
    
    def encryption(plaintext):
        cipherarr = [0 for i in range(len(plaintext))]
        plaintext_list = list(plaintext)
    
        j = 0
        for plaintext_item in plaintext_list:
            for i in range(len(plaintext_)):
                if plaintext_item == plaintext_[i]:
                    ciphertext = (11*i+4)%26
                    cipherarr[j] = ciphertext_[ciphertext]
                    j = j+1
    
        cipher = ''.join(cipherarr)
        return cipher
    
    while True:
        plaintext = raw_input('请输入明文:')
        cipher = encryption(plaintext)
        if plaintext == 'exit':
            break
        print '密文是:',cipher


    (2)解密过程,密钥k的逆元求出后直接带到公式


    def decryption(ciphertext):
        plaintext_arr = [0 for i in range(len(ciphertext))]
        cipherlist = list(ciphertext)
    
        j = 0
        for cipheritem in cipherlist:
            for i in range(len(ciphertext_)):
                if cipheritem == ciphertext_[i]:
                    plaintext = (19*i-24)%26
                    plaintext_arr[j] = plaintext_[plaintext]
                    j = j+1
    
        plain = ''.join(plaintext_arr)
        return plain
    
    while True:
        ciphertext = raw_input('请输入密文:')
        plain = decryption(ciphertext)
        if ciphertext == 'EXIT':
            break
        print '明文输出为:',plain
    


    展开全文
  • 1.仿射矩阵的一般式 ⎡⎣⎢xwywzw⎤⎦⎥=⎡⎣⎢a11a21a31a12a22a32a13a231⎤⎦⎥●⎡⎣⎢ximageyimage1⎤⎦⎥ \begin{bmatrix} x_{w} \\ y_{w} \\ z_{w} \\ \end{bmatrix} = \begin{bmatrix}

    1.仿射矩阵的一般式

    xwywzw=a11a21a31a12a22a32a13a231ximageyimage1

    其中设图像平面为1,坐标只有一个比例因子。故
    Zimage=1,a33=1

    求得a11~a32 8个参数便能得到仿射矩阵。
    2.求解8个参数
    为了得到仿射后的一一对应关系,8个未知数应有8个方程,故需要4个不同的点对应才能求解该方程。
    由矩阵乘法可知:
    xw=a11ximage+a12yimage+a13(1)

    yw=a21ximage+a22yimage+a23(2)

    zw=a31ximage+a32yimage+1(3)

    zwxy:xyz
    故:
    xworld=xwzw,yworld=ywzw
    有:
    xworld=a11ximage+a12yimage+a13a31ximage+a32yimage+1

    yworld=a21ximage+a22yimage+a23a31ximage+a32yimage+1

    代入四个对应点对,并写成矩阵A·x = 0的形式。
    x1i0x2i0x3i0x4i0y1i0y2i0y3i0y4i0101010100x1i0x1i0x3i0x4i0y1i0y1i0y3i0y4i01010101x1ix1wy1wx1ix2ix2wy1wx1ix3ix3wy3wx3ix4ix4wy4wx4ix1iy1wy1iy1wx2iy2wy1iy1wx3iy3wy3iy3wx4iy4wy4iy4wx1wy1wx2wy1wx3wy3wx4wy4wa11a12a13a21a22a23a31a321=0

    由此可求得这8个参数。
    3.多点求仿射矩阵
    超过四个点,就是方程数大于未知数。属于超定方程求解,可以由最小二乘法解决。

    展开全文
  • 仿射变换过程中,把图像放大,原来的像素点映射到新图形时并不能满射,会出现有镂空的现象,请问一般是怎么处理呢?
  • 仿射变换

    2017-12-27 06:35:04
    仿射变换放射变换又称为仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换成另一个向量空间的过程。它保持了一个二维图形的平直性(直线经过变换后依然是直线)和平行性(二维图形之间的...

    仿射变换

    放射变换又称为仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换成另一个向量空间的过程。它保持了一个二维图形的平直性(直线经过变换后依然是直线)和平行性(二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变)

    一个任意的仿射变换都能够表示为乘以一个矩阵(线性变换)接着加上一个向量(平移)的形式

    那么,我们能够用仿射变换来表示如下三种常见的变换形式

    (1)旋转 rotation(线性变换)

    (2)平移 translation (向量加)

    (3)缩放 scale(线性变换)

    进行更深层次的理解,仿射变换代表的是两幅图之间的一种映射关系。

    通常我们使用2*3的矩阵来表示仿射变换


    放射变换的求法


    OpenCV仿射变换相关的函数涉及warpAffine 和getRotationMatrix2D这两个函数:

    (1)使用warpAffine来实现一些简单的重映射

    (2)使用getRotationMatrix2D来获取旋转矩阵

    展开全文
  • 图像的仿射变换是将图像的二维坐标从一个直角坐标系中变换到另外一个直角坐标系中的二维坐标的过程。图像的仿射变换是一种线性的变换,可以表示为矩阵相乘。仿射变换主要用来实现图像的缩放,平移,旋转以及翻转,...
  • 借鉴了大佬的推导过程,https://www.cnblogs.com/graphics/archive/2012/08/10/2627458.html
  • OpenC 仿射变换

    2019-04-29 18:19:40
    仿射变换(Affine Transformation)又称仿射映射,是指在几何中,一个向量空间进行一次线性变化并加上一个平移,变换位另一个的向量空间的过程。 一个任意的仿射变换都能够表示为乘以一个矩阵(线性变换)接着加上一...
  • 参数选取:模数n=26+10=36,k2为...密钥 k = (k1 , k2)仿射密码加解密算法是: m:是输入的明文C=Ek(m)=(k1m+k2)modnM=Dk(c)=k3(c-k2)modn (其中(k3×k1)mod26=1,即k3是k1的逆元)求取逆元的过程代码如下:def get_...
  • OpenCV之仿射变换

    2020-12-31 15:16:12
    仿射变换,是指在几何中,一个向量空间进行一次线型变换并接上一个平移,变换为另一个向量空间的过程。它保持了二维图形的“平直性”(直线经过变换之后仍然是直线)和“平行性”(直线经过变换之后仍然是直线,且...
  • 仿射密码解密

    万次阅读 2016-06-17 00:07:56
    描述已知仿射加密的变换公式为 c = (11 * m) mod 26,试着对密文解密。解析这里我们要强调的是加密过程不是对字符对应的ascii值进行加密,而是用0~25表示a~z26个英文字母。通过乘法加密和加法加密再取模。于是我们...
  • 图像的仿射变换

    2019-04-23 17:58:50
    仿射变换(Affine Transformation或Affine Map),又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间的过程。它保持了二维图形的“平直性”(直线经过变换之后依然是直线)和...
  • Task01 OpenCV框架与图像仿射变换一、仿射变换原理1.1仿射变换过程1.2坐标系与变换矩阵二、仿射变换的种类与特点2.1仿射变换种类2.2仿射变换特点2.3仿射变换相关函数仿射函数翻转函数缩放函数三、基于OpenCV的代码...
  • 仿射变换过程,(x,y)表示原图像中的坐标,(x’,y’)表示目标图像的坐标 ↑ 三. 仿射变换——图像平移 算法: 仿射变换—图像平移算法,其中tx为在横轴上移动的距离,ty为在纵轴上移动的距离 ↑ 四. python实现...
  • 图像处理-仿射变换

    2020-06-27 18:25:46
     这五种变化由原图像转变到变换图像的过程,可以用仿射变换矩阵进行描述。这个变换过程可以用一个2*3的矩阵与原图进行相乘得到。不共线的三对点决定了唯一的仿射变换。  由公式看到,仿射变换可以描述为一个线性...
  • 对离散灰色模型进行了重新定义并给出了参数求解式,建立了离散最优化灰色模型.通过对这两个模型进行仿射特性研究,...研究结果表明,通过仿射变换,可以缩小数据的量级,简化建模过程,而不会改变模型的模拟和预测效果.</p>
  • 仿射密码Python实现

    2018-12-29 23:55:00
    算法分析 仿射密码结合了移位密码和乘数密码的特点,是移位密码和乘数密码的组合。 仿射密码的加密算法就是一个线性变化,即对明文字符x,...实现过程: 选取a,b两个参数,其中gcd(a, 26)=1 加密变换: c= a∗
  • 转盘密码和仿射加密

    2018-11-17 13:50:00
    仿射加密法中,字母表的字母被赋予一个数字,例如a=0,b=1,c=2…z=25。仿射加密法的密钥为0-25直接的数字对。 加密过程较为容易 加密算法:c = a*m + b(mod n) 加密过程: 1,获取a,b,n...
  • 仿射加密(java)

    2020-12-18 13:30:52
    仿射加密的加密过程是一个线性变换: 在仿射加密中,可设0-25对应 'a '-‘z’ 这26个字母。 设y为密文,x为明文,则: y(x)=(k1x+k2) mod 26 并且要求gcd(k1,26)=1;(即k1与26的最大公约数为1) 要求k1和26互素...
  • python 仿射变换

    千次阅读 2019-05-29 15:15:57
    记录学习Python Computer Vision的过程 第三次 Homography(单应性变换) 图像变换的方法很多,单应性变换是其中一种方法,单应性变换会涉及到单应性矩阵。单应性变换的目标是通过给定的几个点(通常是4对点)来得到...
  • 仿射变换的通俗解释

    万次阅读 2017-03-16 16:43:06
    最近看论文的过程中,愈发觉得仿射变换不管是在利用特征点的变化推断帧与帧之间目标框的变换上(例如RANSAC做图形拼接、图像匹配),还是样本的生成上(例如TLD中利用仿射将10个原始正样本变换成200个合成样本)。...
  • 仿射变换与透视畸变

    千次阅读 2016-12-27 15:35:21
    在恢复图像的过程中,可能会需要对透视畸变以及仿射变换进行补偿,今天整理了下关于透视畸变和仿射变换的相关概念。
  • opencv学习(三十五)之仿射变换warpAffine

    万次阅读 多人点赞 2017-02-22 10:50:41
    1.仿射变换介绍仿射变换是指在向量空间中进行一次线性变换(乘以一个矩阵)并加上一个平移(加上一个向量),变换为另一个向量空间的过程。在有限维的情况下,每个仿射变换可以由一个矩阵A和一个向量b给出,它可以写作A...
  • 纯C++仿射变换实现

    2020-10-16 17:06:33
    最近需要使用仿射变换进行一些应用,但又不想用到OpenCV和Halcon之类的库进行,就自己写了一个计算和实现函数,大概记录一下这个过程。 基本概念参考:图像变换的基本模型 前言 想要实现的效果,知道坐标系A的3个...
  • 用C写的仿射变换加密解密程序,程序过程很简单,不足之处,欢迎提出
  • 实验2 仿射密码算法

    千次阅读 2020-08-20 20:21:07
    通过实验熟练掌握仿射密码算法的加密解密过程,加深对古典密码体制的了解,为深入学习密码学奠定基础。 【二、实验原理】 设两个整数α和β,及gcd(α,26)=1, 加密过程:x → αx+β (mod 26) 解密过程:x → α*...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 364
精华内容 145
关键字:

仿射过程