计算机视觉—图像到图像的映射

计算机视觉——图像到图像的映射

一、基本原理

1、单应性变换

将平面内一个点映射到另一个平面内的二维投影变换。单应性矩阵H具有8个独立的自由度,其中h33=1。H的求解在代码中的Haffine_from_points(在homography.py中)
在这里插入图片描述
单应性矩阵可以由两幅图像中对应点计算出来。然后我们再得到坐标的变换公式。
矩阵H会将一幅图像上的一个点的坐标a=(x,y,1)映射成另一幅图像上的点的坐标b=(x1,y1,1),也就是说,我们已知a和b,它们是在同一平面上,代码里是将fp对应到tp(映射目标点)。 则有下面的公式(1):
在这里插入图片描述
即:
在这里插入图片描述
由上面的公式中的③可以得到坐标变换的公式:
在这里插入图片描述
继续得:
在这里插入图片描述
根据前面式子(1),可写成一个矩阵与一个向量相乘,即得到式子(2):
在这里插入图片描述
其中,h=[h11,h12,h13,h21,h22,h23,h31,h32,h33]^T,是一个9维的列向量。若令:
在这里插入图片描述
然后又几对匹配特征就会几个A矩阵,n为匹配特征的对数,单应性矩阵有里8个自由度,至少需要4对(且要求三点不共线,所以这里选择四边形的四个顶点)
在这里插入图片描述
则式子(2)可记做:
在这里插入图片描述
我们把矩阵A的SVD定义为
在这里插入图片描述
V的最后一行是h的一个解,即有两个解
在这里插入图片描述

2、仿射变换

一种二维坐标到二维坐标之间的线性变换(相同平面),它保持了二维图形的“平直性”(直线经过变换之后依然是直线)和“平行性”(二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变),但是角度会改变。任意的仿射变换都能表示为乘以一个矩阵(线性变换),再加上一个向量 (平移) 的形式。
单应性变换有8个自由度,仿射有6个自由度,我们令H矩阵的 h31=h32=0,即:
在这里插入图片描述
仿射变换具有6个自由度,因此我们需要三个对应点来估计矩阵H。
典型的仿射变换有:
(1)平移,将每一点移到到(x+t , y+t),变换矩阵为
在这里插入图片描述
(2)缩放变换 将每一点的横坐标放大或缩小sx倍,纵坐标放大(缩小)到sy倍,变换矩阵为:
在这里插入图片描述
(3)旋转变换原点:目标图形围绕原点顺时针旋转Θ 弧度,变换矩阵为:
在这里插入图片描述
(4) 旋转变换 :目标图形以(x , y )为轴心顺时针旋转θ弧度,变换矩阵为:
在这里插入图片描述
相当于两次平移与一次原点旋转变换的复合,即先将轴心(x,y)移到到原点,然后做旋转变换,最后将图片的左上角置为图片的原点,即:
在这里插入图片描述

3、代码

 #对点进行归一化
        #映射起始点
    m = mean(fp[:2], axis=1)
    maxstd = max(std(fp[:2], axis=1)) + 1e-9
    C1 = diag([1/maxstd, 1/maxstd, 1]) 
    C1[0][2] = -m[0]/maxstd
    C1[1][2] = -m[1]/maxstd
    fp = dot(C1,fp)
    
    # 映射对应点
    m = mean(tp[:2], axis=1)
    maxstd = max(std(tp[:2], axis=1)) + 1e-9
    C2 = diag([1/maxstd, 1/maxstd, 1])
    C2[0][2] = -m[0]/maxstd
    C2[1][2] = -m[1]/maxstd
    tp = dot(C2<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值