单应性Homography梳理,概念解释,传统方法,深度学习方法

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Homography

  1. 这篇博客比较清晰准确的介绍了关于刚性变换仿射变换透视投影变换的理解

  2. 单应性变换 的 条件和表示
    用 [无镜头畸变] 的相机从不同位置拍摄 [同一平面物体] 的图像之间存在单应性可以用 [透视变换] 表示 。

  3. opencv单应性变换求解 传统方法
    cv2.findHomography和cv2.getPerspectiveTransform
    两者联系:
    都用于计算单应矩阵即解一个线性方程组。由于单应矩阵有8个未知数(3*3其中第9个数为1)所以至少需要4个点(每个点-x,y,提供2个约束方程)。

    两者区别:
    计算方法不同:getPerspectiveTransform用的是SVD分解只需要四个点。
    输入参数不同:getPerspectiveTransform只会拿前4个点去计算findHomography则会拿一堆点(>=4)去计算(其是不断从一堆点中重复拿出4个点去计算出一个结果再采用一些优化算法RANSAC/LMEDS去筛选出最优解)

  4. Deep Image Homography Estimation 论文。利用深度学习估计Homography
    4.1 HomographyNet的结构
    4.2 HomographyNet数据集的制作方法制作ground truth进行监督训练
    原论文也容易理解github代码有很多, 详细看原论文 或者
    可以参考 基于深度学习(HomographyNet)的图像单应性估计)

    code:https://github.com/breadcake/Deep-homography-estimation-pytorch
    有一个问题4对偏移坐标, 不同scale对应相同转换?
    code中四个角选的是长度为128的正方形

  5. 关于传统方法单应性估计的原理code 可以参考 dastratakos:Homography-Estimation

  6. Unsupervised Deep Homography: A Fast and Robust Homography Estimation Model
    和无监督光流方法类似利用warp后的图像建立损失函数无监督训练
    在这里插入图片描述

    其中 DLT就是 通过4对point 求 H
    spatial transformation 就是透视投影 warp

    def photometric_loss(delta, img_a, patch_b, corners):
        corners_hat = corners + delta
    
        # in order to apply transform and center crop,
        # subtract points by top-left corner (corners[N, 0])
        corners = corners - corners[:, 0].view(-1, 1, 2)
    
        h = kornia.get_perspective_transform(corners, corners_hat)
    
        h_inv = torch.inverse(h)
        patch_b_hat = kornia.warp_perspective(img_a, h_inv, (128, 128))
    
        return F.l1_loss(patch_b_hat, patch_b)
    

    参考代码
    和 (https://github.com/breadcake/unsupervisedDeepHomography-pytorch)

  7. Content-Aware Unsupervised Deep Homography Estimation 2020
    该篇论文和6类似都是无监督学习只是6把warp等操作放在网络里7放在了损失函数里.
    另外7引入了mask 以及在损失函数上的创新。
    本篇论文鲁棒性更好因为更多的考虑到非平面场景。
    在这里插入图片描述

  8. 关于在pytorch如何实现warp等操作:

    1)比如 stn, 后面pytorch引入 gridsample采样函数。
    2)比如 kornia 库也是基于stn.

  9. 最后再介绍一篇 基于深度学习 homography estimation:

    Motion Basis Learning for Unsupervised Deep Homography Estimation
    with Subspace Projection
    code
    在这里插入图片描述

    特征:
    1)无监督
    2)首先生成8个homography flow, 网络预测8个homo-flow的weight
    homography flow 相比light flow 有更多的约束homography flow是light flow的一个特殊情况因为homography flow所有pixel的位移是通过一个转换关系得到的而light flow是更generatic的情况。
    3)LRR模块引入网络结构
    4)更复杂有效的损失函数

[1]https://blog.csdn.net/abc20002929/article/details/8709902
[2]https://zhuanlan.zhihu.com/p/74597564
[3]https://zhuanlan.zhihu.com/p/37110107

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6