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

news2024/11/20 15:41:31

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Active Directory计算机备份和恢复

在Active Directory(AD)环境中,用户通过域中的计算机认证他们自身。从AD中删除这些计算机账户时,系统也会自动从域中删除它们。于是,用户不能再通过些计算机登录网络。为允许用户访问域资源,必须恢复这些已…

聚集千百个企业管理系统的API资产,打造API资产全生命周期一站式集成体验

API——接口,作为软件世界中的连接服务和传输数据的重要管道,已经成为数字时代的新型基础设施,是各领域驱动数字变革的重要力量之一。传统企业集成主要采用点对点或ESB集成方式,基于全新API战略中台的API新型集成方式通过解耦系统…

SpringBoot跨域请求解决方案详细分析

跨域的定义 跨域是指不同域名之间的相互访问,这是由浏览器的同源策略决定的,是浏览器对JavaScript施加的安全措施,防止恶意文件破坏。同源策略:同源策略是一种约定,它是浏览器最核心的也是最基本的安全策略&#xff0…

【数据产品】缓存设计

背景:为什么需要做缓存? 我所做的产品的指标设计越来越复杂,查询性能也随之下降。因此需要增加缓存层, 以提高接口查询效率。 哪些层需要做缓存? 随着指标系统的应用,该产品的查询逻辑也越来越简单&…

二分查找核心思路--单调性--极值

在最初的二分查找中,我们将一组数据按大小排序,然后根据arr[mid]与要查找的k的大小比较,从而每次去掉一半的数字,使时间复杂度简化为O(logN)。 排序本质上是让数据的单调性统一,变为单增或单减…

spring中的JSR-303统一校验

1.在前后端的传输参数的过程中数据在何处校验? 在前后端都需要进行校验,只是分工不同. 2.各个层的校验内容: 1.Controller层主要负责校验残水的合法性,包括: 必填的参数字段,数据格式的校验 2.Service层的业务校验是审核业务中的规则的相关内容,比如:课程已经审核通过所以提…

vue3 为何比 vue2 快

vue3 为何比 vue2 快 测试环境:https://vue-next-template-explorer.netlify.app/ 1、proxy 响应式 vue3 优缺点: 深度监听性能更好可监听 新增 / 删除 属性可监听数组变化Proxy 能规避 Object.defineProxy 的问题Proxy 无法兼容所有浏览器&#xff…

OAuth2介绍

目录 一、什么是OAuth2 二、OAuth2中的角色 三、认证流程 四、令牌的特点 五、OAuth2授权方式 授权码 隐藏方式 密码方式 凭证方式 一、什么是OAuth2.0 概念:第三方授权解决方案 OAuth2.0是目前使用非常广泛的授权机制,用于授权第三方应用获取…

[NRF52] mesh DFU

mesh DFU升级过程:完整流程:以前nRF SDK DFU的实现是通过nRF51 Dongle配合主机nRF connect工具,且借助Secure DFU的后台式更新速率较快(见另一篇笔记),现在的nRF mesh DFU分角色,全都由DK充当&a…

什么是单体应用?什么是微服务?

Monolith(单体应用), 也称之为单体系统或者是 单体架构 。就是一种把系统中所有的功能、模块、组件等耦合在一个应用中应用最终打成一个(war,jar)包使用一个容器(Tomcat)进行部署,通常一个应用享用一个数据库。 也就是将所有的代码…

Java版数据结构与算法笔记

文章目录一、数据结构与算法概述及题目1、数据结构和算法的关系2、线性结构与非线性结构Ⅰ-线性结构Ⅱ-非线性结构3、经典面试题Ⅰ-字符串匹配问题:Ⅱ-汉诺塔游戏Ⅲ-八皇后问题:Ⅳ-马踏棋盘算法4、几个实际编程中遇到的问题Ⅰ-字符串替换问题Ⅱ-一个五子棋程序Ⅲ-约…

这家芯片企业,从创立之初就用 Authing 管理身份

在德州仪器和苹果的经验,让我深知统一身份管理要从 Day 1 做起。——Alpha Cen 联合创始人 & CEO 王璠 案例亮点: 打通 2000 主流应用、满足芯片初创企业统一身份需求 一周快速上线,产品开箱即用,后续无需费力运维 基于协同…

Pytorch安装及环境配置详细教程(CUDA版本)

文章目录前言一、查看GPU支持的CUDA版本二、安装CUDA三、确定torch、torchvision和python版本四、安装anaconda五、安装torch和torchvision前言 安装cuda版本的pytorch时踩了不少坑,网上安装pytorch的版本很多,一般的教程都是到pytorch的官网&#xff0…

相比传统专线网络,爱快、飞连等主流SD-WAN方案好在哪里?

当企业发展至一定的规模后,移动办公、异地办公会逐渐成为刚需,这就对企业的网络架构提出了新的挑战。 一般来说,企业在发展中所遇到的这些新增的网络需求,有两种比较常见的解决方案,其中之一是专线连接 。专线虽然简单…

【Unity3D插件】Build Report Tool插件,Build报告,优化包体,查看资源占用

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 本篇文章介绍一下Build Report Tool插件的使用。 Build Repor…

在Visual Studio中调试Linux控制台程序

最近,Visual Studio 2022 17.5 预览版3 面向广大 Linux 开发者提供了一项新特性:在 Visual Studio 集成的终端中调试 C Linux 控制台程序。 如需了解更多关于集成终端的功能以及它在 Visual Studio 中的工作原理,请参考我们之前的一篇文章: I…

Linux系统安装Hadoop步骤详解

一、 安装新的虚拟机。 配置根据电脑内存自由处理,一般来说,虚拟机内存设为电脑内存一半 二、打开虚拟机,设置语言,时区,硬盘分区,密码,用户等 三、修改ip地址,连接xshell 3.1关闭…

Acer传奇Go电脑开机几分钟就会蓝屏怎么重装系统?

Acer传奇Go电脑开机几分钟就会蓝屏怎么重装系统?有用户使用的Acer传奇Go电脑出现了一些系统故障,电脑正常开机使用几分钟之后,马上就会出现蓝屏的情况,导致无法正常的使用。那么这个情况如何去重装系统呢?来看看以下的…

在产业互联网时代,以生态和边界为代表的有限市场的瓜分业已完成

在这样一个过程中,阿里们更多地思考的是,如何与产业结合,而非独立于产业之外,仅仅只是做一个旁观者和第三方。无论是它们投身到物流、制造、能源化工等行业之中,还是它们对这些产业的传统玩家们深度赋能,几…

第三章 TCG 规范解读【嵌入式工作组】【工业工作组】

可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…