放射变换参数求解

      仿射变换(Affine Transformation或 Affine Map)是一种二维坐标到二维坐标之间的线性变换,它保持了二维图形的“平直性”(即:直线经过变换之后依然是直线)和“平行性”(即:二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变)。放射变换可以写为如下的形式:

x,y 属于仿射过后的图坐标;x',y'原图坐标

不共线的三点唯一决定一个放射变换!

#include <highgui.h>
#include <cv.h>

int main(int argc, char** argv)
{
    CvPoint2D32f srcTri[3], dstTri[3]; //二维坐标下的点,类型为浮点
    CvMat* rot_mat = cvCreateMat( 2, 3, CV_32FC1 );  //多通道矩阵
    CvMat* warp_mat = cvCreateMat( 2, 3, CV_32FC1 );
    IplImage *src, *dst;

    if( argc == 2 && ( ( src = cvLoadImage( argv[1], 1 ) ) != 0 ) )
    {
        dst = cvCloneImage( src );  //制作图像的完整拷贝
        dst ->origin = src ->origin;  
        /*
        int origin; /* 0 - 顶—左结构,
        1 - 底—左结构 (Windows bitmaps 风格) 
        */
        cvZero( dst );  //清空数组

        //计算矩阵仿射变换
        srcTri[0].x = 0;
        srcTri[0].y = 0;
        srcTri[1].x = src -> width - 1;  //缩小一个像素
        srcTri[1].y = 0;
        srcTri[2].x = 0;
        srcTri[2].y = src -> height - 1;

        //改变目标图像大小
        dstTri[0].x = src -> width * 0.0;
        dstTri[0].y = src -> height * 0.33;
        dstTri[1].x = src -> width * 0.85;
        dstTri[1].y = src -> height * 0.25;
        dstTri[2].x = src -> width * 0.15;
        dstTri[2].y = src -> height * 0.7;
        cvGetAffineTransform( srcTri, dstTri, warp_mat );  //由三对点计算仿射变换 
        cvWarpAffine( src, dst, warp_mat );  //对图像做仿射变换
        cvCopy( dst, src );  //将dst拷贝给src

        //计算旋转仿射变换
        CvPoint2D32f center = cvPoint2D32f( src -> width / 2, src -> height / 2 );
        double angle = -50.0; //旋转角度,负值表示顺时针
        double scale = 0.6;  //各项同性的尺度因子 
        cv2DRotationMatrix( center, angle, scale, rot_mat );
        cvWarpAffine( src, dst, rot_mat );  //将src仿射变换存入dst

        //输出
        cvNamedWindow( "Affine_Transform", 1 );
        cvShowImage( "Affine_Transform", dst );  //最终是输出dst 
        cvWaitKey();
    }
    cvReleaseImage( &dst );
    cvReleaseMat( &rot_mat );
    cvReleaseMat( &warp_mat );

    return 0;
}

 参考:http://blog.csdn.net/hitwengqi/article/details/6888783

         http://blog.csdn.net/augusdi/article/details/14150747

原文地址:https://www.cnblogs.com/ranjiewen/p/6040498.html