图像到图像的映射

本文探讨图像到图像的映射,包括单应性变换和仿射变换。单应性变换用于图像配准、纠正和创建全景图像,而仿射变换则用于图像扭曲。直接线性变换算法(DLT)用于计算单应性矩阵,至少需要4个对应点对。仿射变换只需要3个对应点对,且可通过设置矩阵元素为0来估计。Scipy的ndimage包可用于图像扭曲。示例展示了如何将一幅图像放置到另一幅图像中,通过仿射变换对齐图像的角点。
摘要由CSDN通过智能技术生成

图像到图像的映射

1.1单应性变换
单应性变换是将一个平面内的点映射到另一个平面内的二维投影变换。
0
单应性变换具有很强的实用性,比如图像配准、图像纠正和纹理扭曲,以及创建全景图像

本质上,单应性变换H,按照下边的方程映射二维中的点(齐次坐标意义下):
在这里插入图片描述
对于图像平面内的点,齐次坐标是一个非常有用的表示方式。点的齐次坐标是依赖于其尺度定义的,所以x=[x, y, w]=[αx, αy, αw]=[x/w, y/w,1]都表示同一个二维点。因此,单应性矩阵H也仅仅依赖尺度定义,所以单应性矩阵具有9个独立的自由度。

通常使用w=1来归一化,这样点具有唯一的图像坐标x和y,这样可以简单地使用一个矩阵来表示变换。

创建homography.py文件,使用下边的函数实现对点进行归一化和转换齐次坐标的功能:

def normalize(points):
    for row in points:
        row /= points[-1]
    return points

def make_homog(points):
    return vastack((points,ones((1,points,shape[1]))))

行点和变换处理时,我们会按照列优先的原则存储这些点。因此,n个二维点集将会存储为齐次坐标意义下的一个3 *n数组。这种格式使得矩阵乘法和点的变换操作更加容易。

在这些投影的变换中,有一些特别重要的变换。比如,仿射变换可以应用于图像扭曲、相似变换可以应用于图像配准。

1.1 直接线性变换算法

单应性矩阵可以由两幅图像中对应点对计算出来。一个完全射影变换具有8个自由度,根据对应点约束,每个对应点对可以写出两个方程,分别对应于x和y坐标。因此,计算单应性矩阵H需要4个对应点对。

DLT(直接线性变换)是给定4个或者更多对应点对矩阵,来计算单应性矩阵H的算法。将单应性矩阵H作用于对应点对上,重新写出一个齐次方程Ah=0,其中A是一个具有对应点对二倍数量行数的矩阵。将这些对应点对方程的系数堆叠到一个矩阵中,可以使用奇异值分解找到H的最小二乘解。

CODE:

def H_from_points(fp,tp):
    if fp.shape != tp.shape:
        raise RuntimeError('number of points do not match')
    
    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,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值