图像处理-仿射变换

1.仿射变换(Affine Transformation)

空间变换中的仿射变换对应着五种变换,平移,缩放,旋转,翻转,错切。
  这五种变化由原图像转变到变换图像的过程,可以用仿射变换矩阵进行描述。这个变换过程可以用一个2*3的矩阵与原图进行相乘得到。不共线的三对点决定了唯一的仿射变换。
图像处理-仿射变换_第1张图片
 由公式看到,仿射变换可以描述为一个线性变换加平移。

  • 错切变换是指图形沿某坐标方向产生不等量的移动而引起图形变形的一种变换。如右下角,图形在x轴产生了不等量的平移。

图像处理-仿射变换_第2张图片

2.opencv实现

1)getAffineTransform       //三点法
Mat M1=getAffineTransform(const Point2f* src, const Point2f* dst)
		  //参数const Point2f* src:原图的三个固定顶点
		  //参数const Point2f* dst:目标图像的三个固定顶点
          //返回值:Mat型变换矩阵,可直接用于warpAffine()函数
         //注意,顶点数组长度超过3个,则会自动以前3个为变换顶点;数组可用Point2f[]或Point2f*表示2)getRotationMatrix2D       //直接指定比例和角度
Mat M2=getRotationMatrix2D (CvPoint2D32f  center,double angle,double scale)
            //参数CvPoint2D32f  center,表示源图像旋转中心
            //参数double angle,旋转角度,正值表示逆时针旋转
            //参数double scale,缩放系数

//进行仿射变换
C++ void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
	   //参数InputArray src:输入变换前图像
		//参数OutputArray dst:输出变换后图像,需要初始化一个空矩阵用来保存结果,不用设定矩阵尺寸
		//参数InputArray M:变换矩阵,用另一个函数getAffineTransform()计算
		//参数Size dsize:设置输出图像大小
		//参数int flags = INTER_LINEAR:设置插值方式,默认方式为线性插值(另一种WARP_FILL_OUTLIERS)
        //参数int borderMode=BORDER_CONSTANT:边界像素模式,默认值BORDER_CONSTANT
        //参数const Scalar& borderValue=Scalar(),在恒定边界情况下取的值,默认值为Scalar(),即0

第一种方法,指定三点,仿射变换结果:
图像处理-仿射变换_第3张图片

你可能感兴趣的:(图像处理)