zoukankan      html  css  js  c++  java
  • 仿射变换和透射变换

    参考链接:

    http://blog.csdn.net/u012380663/article/details/43273527

    http://blog.csdn.net/xiaowei_cqu/article/details/26471527

    序言

           在图像处理中,对图像进行二维变换有仿射变换(Affine Transformation),透视变换(Perspective Transformation)(应该还有其他变换,但是我用到的比较多的是这两种变换)。

    一、仿射变换

    1、概念

           仿射变换(Affine Transformation)是空间直角坐标系的变换,从一个二维坐标变换到另一个二维坐标,仿射变换是一个线性变换,他保持了图像的“平行性”和“平直性”,即图像中原来的直线和平行线,变换后仍然保持原来的直线和平行线,仿射变换比较常用的特殊变换有平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotation)和剪切(Shear)。

           

    图1.仿射变换

         2、仿射变换的变换公式推导

          

            在opencv提供的仿射变换中,变换的公式是一个2*3的矩阵,如下:

        A是仿射变换2*3矩阵,M是2*2矩阵,表示坐标轴的旋转和缩放,B是2*1矩阵,是坐标轴平移矩阵。

        坐标变换如下:

        可以看出,A矩阵只有6个参数,所以只要知道3个点之间的仿射变换,就可以求出A矩阵。

    二、透视变换

     透视变换(Perspective Transformation)是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。

    图2.透视变换

    透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。通用的变换公式为:

    u,v是原始图片左边,对应得到变换后的图片坐标x,y,其中
    变换矩阵可以拆成4部分,表示线性变换,比如scaling,shearing和ratotion。用于平移,产生透视变换。所以可以理解成仿射等是透视变换的特殊形式。经过透视变换之后的图片通常不是平行四边形(除非映射视平面和原来平面平行的情况)。

    重写之前的变换公式可以得到:

    所以,已知变换对应的几个点就可以求取变换公式。反之,特定的变换公式也能新的变换后的图片。简单的看一个正方形到四边形的变换:
    变换的4组对应点可以表示成:

    根据变换公式得到:

    定义几个辅助变量:

    都为0时变换平面与原来是平行的,可以得到:

    不为0时,得到:

    求解出的变换矩阵就可以将一个正方形变换到四边形。反之,四边形变换到正方形也是一样的。于是,我们通过两次变换:四边形变换到正方形+正方形变换到四边形就可以将任意一个四边形变换到另一个四边形。

    所以,我们可以发现仿射变换就是特殊的透射变换,这里我们在理解它们的变换矩阵时一定要将矩阵分部分析,比如之前的一部分是用来旋转和缩放,一部分是用来平移,还有一部分是用来透射;

    之前的(x , y , w)中,w的意义我觉得它就是指投影点到面上的“距离”,这里之所以打引号我个人认为它不是物理距离,更多的带有一种数学上的“单位1”的意义;

    两者异同

    所以对于仿射变换,一般地w = w' , 也就是依然是这个平面,所以就相当于一个2D平面变换(忽略了投影点);

    对于透射变换,一般的w' = f(w) , f即相应的透射变换,所以这里就是投影点通过这个面投射到另一个承影面,这里投影点就显示了它的功能,所以我们说仿射变换是特殊的透射变换;

  • 相关阅读:
    电子书下载:Beginning ASP.NET 2.0 AJAX
    电子书下载:C# 4.0 How To
    电子书下载:Pragmatic Unit Testing in C# with NUnit
    7 个最好的.Net开源CMS系统
    电子书下载:Professional ASP.NET 2.0 Server Control and Component Development
    电子书下载:Beginning ASP.NET 2.0 Databases From Novice to Professional
    电子书下载:Professional .NET 2.0 Generics
    蛙蛙推荐:[算法练习]最长不完全匹配子串频率计算
    蛙蛙推荐:F#实现并行排序算法
    蛙蛙推荐:蛙蛙教你发明一种新语言之二代码生成
  • 原文地址:https://www.cnblogs.com/zf-blog/p/7813227.html
Copyright © 2011-2022 走看看