透视矫正插值

https://www.cnblogs.com/straywriter/articles/15889273.html
https://www.comp.nus.edu.sg/~lowkl/publications/lowk_persp_interp_techrep.pdf
https://8.136.115.103/perspective-correct-interpolation%E9%80%8F%E8%A7%86%E6%A0%A1%E6%AD%A3%E6%8F%92%E5%80%BC/

透视矫正插值

屏幕空间插值得到的Z值,根据比例矫正。

// https://comp.nus.edu.sg/~lowkl/publications/lowk_persp_interp_techrep.pdf//Z1
float recipVPZ = 1. / viewPosition.z;// Zt 矫正后, 利用公式(12)
float viewReflectRayZ = 1. / (recipVPZ + s * (1. / d1viewPosition.z - recipVPZ));

请添加图片描述

一、插值 z

由相似三角形,有:
X 1 Z 1 = u 1 d ⇒ X 1 = u 1 Z 1 d (1) \frac{X_{1}}{Z_{1}}=\frac{u_{1}}{d} \Rightarrow X_{1}=\frac{u_{1} Z_{1}}{d} \tag{1} Z1X1=du1X1=du1Z1(1)

X 2 Z 2 = u 2 d ⇒ X 2 = u 2 Z 2 d (2) \frac{X_{2}}{Z_{2}}=\frac{u_{2}}{d} \Rightarrow X_{2}=\frac{u_{2} Z_{2}}{d}\tag{2} Z2X2=du2X2=du2Z2(2)

X t Z t = u s d ⇒ Z t = d X t u s (3) \frac{X_{t}}{Z_{t}}=\frac{u_{s}}{d} \Rightarrow Z_{t}=\frac{d X_{t}}{u_{s}} \tag{3} ZtXt=dusZt=usdXt(3)

通过在图像平面(或屏幕空间)中进行线性插值,有:
u s = u 1 + s ( u 2 − u 1 ) (4) u_{s}=u_{1}+s\left(u_{2}-u_{1}\right) \tag{4} us=u1+s(u2u1)(4)

通过在相机坐标系中对图元进行线性插值,有:
X t = X 1 + t ( X 2 − X 1 ) (5) X_{t}=X_{1}+t\left(X_{2}-X_{1}\right) \tag{5} Xt=X1+t(X2X1)(5)

Z t = Z 1 + t ( Z 2 − Z 1 ) (6) Z_{t}=Z_{1}+t\left(Z_{2}-Z_{1}\right) \tag{6} Zt=Z1+t(Z2Z1)(6)

将(4)和(5)代入(3):
Z t = d ( X 1 + t ( X 2 − X 1 ) ) u 1 + s ( u 2 − u 1 ) (7) Z_{t}=\frac{d\left(X_{1}+t\left(X_{2}-X_{1}\right)\right)}{u_{1}+s\left(u_{2}-u_{1}\right)} \tag{7} Zt=u1+s(u2u1)d(X1+t(X2X1))(7)

将(1)和(2)代入(7):
Z t = d ( u 1 Z 1 d + t ( u 2 Z 2 d − u 1 Z 1 d ) ) u 1 + s ( u 2 − u 1 ) = u 1 Z 1 + t ( u 2 Z 2 − u 1 Z 1 ) u 1 + s ( u 2 − u 1 ) (8) \begin{aligned} Z_{t} &=\frac{d\left(\frac{u_{1} Z_{1}}{d}+t\left(\frac{u_{2} Z_{2}}{d}-\frac{u_{1} Z_{1}}{d}\right)\right)}{u_{1}+s\left(u_{2}-u_{1}\right)} \\ &=\frac{u_{1} Z_{1}+t\left(u_{2} Z_{2}-u_{1} Z_{1}\right)}{u_{1}+s\left(u_{2}-u_{1}\right)} \end{aligned} \tag{8} Zt=u1+s(u2u1)d(du1Z1+t(du2Z2du1Z1))=u1+s(u2u1)u1Z1+t(u2Z2u1Z1)(8)

将(6)代入(8):
Z 1 + t ( Z 2 − Z 1 ) = u 1 Z 1 + t ( u 2 Z 2 − u 1 Z 1 ) u 1 + s ( u 2 − u 1 ) (9) Z_{1}+t\left(Z_{2}-Z_{1}\right)=\frac{u_{1} Z_{1}+t\left(u_{2} Z_{2}-u_{1} Z_{1}\right)}{u_{1}+s\left(u_{2}-u_{1}\right)} \tag{9} Z1+t(Z2Z1)=u1+s(u2u1)u1Z1+t(u2Z2u1Z1)(9)

可以简化为:
t = s Z 1 s Z 1 + ( 1 − s ) Z 2 (10) t=\frac{s Z_{1}}{s Z_{1}+(1-s) Z_{2}} \tag{10} t=sZ1+(1s)Z2sZ1(10)

将(10)代入(6),有:
Z t = Z 1 + s Z 1 s Z 1 + ( 1 − s ) Z 2 ( Z 2 − Z 1 ) (11) Z_{t}=Z_{1}+\frac{s Z_{1}}{s Z_{1}+(1-s) Z_{2}}\left(Z_{2}-Z_{1}\right) \tag{11} Zt=Z1+sZ1+(1s)Z2sZ1(Z2Z1)(11)

可以简化为:
Z t = 1 1 Z 1 + s ( 1 Z 2 − 1 Z 1 ) (12) Z_{t}=\frac{1}{\frac{1}{Z_{1}}+s\left(\frac{1}{Z_{2}}-\frac{1}{Z_{1}}\right)} \tag{12} Zt=Z11+s(Z21Z11)1(12)

二、插值属性

I t = I 1 + t ( I 2 − I 1 ) (13) I_{t}=I_{1}+t\left(I_{2}-I_{1}\right) \tag{13} It=I1+t(I2I1)(13)

将(10)代入(13),有:
I t = I 1 + s Z 1 s Z 1 + ( 1 − s ) Z 2 ( I 2 − I 1 ) (14) I_{t}=I_{1}+\frac{s Z_{1}}{s Z_{1}+(1-s) Z_{2}}\left(I_{2}-I_{1}\right) \tag{14} It=I1+sZ1+(1s)Z2sZ1(I2I1)(14)

可以重新排列成:
I t = ( I 1 Z 1 + s ( I 2 Z 2 − I 1 Z 1 ) ) / ( 1 Z 1 + s ( 1 Z 2 − 1 Z 1 ) ) (15) I_{t}=\left(\frac{I_{1}}{Z_{1}}+s\left(\frac{I_{2}}{Z_{2}}-\frac{I_{1}}{Z_{1}}\right)\right) /\left(\frac{1}{Z_{1}}+s\left(\frac{1}{Z_{2}}-\frac{1}{Z_{1}}\right)\right) \tag{15} It=(Z1I1+s(Z2I2Z1I1))/(Z11+s(Z21Z11))(15)

从(12),我们可以看到(15)中的分母只是 1 / Z i 1/Z_{i} 1/Zi, 所以
I t = ( I 1 Z 1 + s ( I 2 Z 2 − I 1 Z 1 ) ) / 1 Z t (16) I_{t}=\left(\frac{I_{1}}{Z_{1}}+s\left(\frac{I_{2}}{Z_{2}}-\frac{I_{1}}{Z_{1}}\right)\right) / \frac{1}{Z_{t}} \tag{16} It=(Z1I1+s(Z2I2Z1I1))/Zt1(16)

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

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

相关文章

Postfix+Dovecot+Roundcube开源邮件系统搭建系列4:Dovecot安装配置

1. Dovecot安装 安装Dovecot: yum -y install dovecot dovecot-mysql 启动服务并设置开机自启动: systemctl start dovecot systemctl enable dovecot 2. Dovecot配置 Dovecot配置文件目录:/etc/dovecot,在该目录中dovecot.…

【内网穿透】如何本地搭建Whisper语音识别模型并配置公网地址

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

视频联网共享平台LntonCVS视频监控汇聚平台视频云解决方案

LntonCVS流媒体平台是一款遵循国家GB28181标准协议的先进视频监控与云服务平台。该平台设计独特,能够同时接入并处理多路设备的视频流,支持包括RTSP、RTMP、FLV、HLS、WebRTC在内的多种视频流格式的分发。其功能丰富多样,涵盖了视频直播监控、…

基于STM32的全栈嵌入式解决方案:LoRa、MQTT和阿里云IoT平台构建的智慧农业监控系统(附代码示例)

摘要: 随着科技的进步,物联网技术在农业领域的应用越来越广泛。本文介绍一个基于物联网的智慧农业监控系统,该系统可以实时监测农田的环境数据,并根据数据自动控制灌溉、施肥等操作,提高农业生产效率。 关键词&#x…

微分段Microsegmentation简介

目录 微分段Microsegmentation简介什么是微分段?微分段的防范措施微分段的防护层级 基于网络的微分段微分段基本工作机制微分段的角色VxLAN的额外字段 业务链分组与传输策略场景1:三层报文本地转发场景场景2:三层报文跨设备转发场景 微分段的…

【深度学习】PyTorch框架(5):Transformer和多注意力机制

1、引言 在本文中,我们将探讨近两年来最具影响力的模型架构之一——Transformer模型。自从2017年Vaswani等人发表的论文《注意力是你所需要的全部》以来,Transformer架构在多个领域持续刷新着性能记录,尤其是在自然语言处理(NLP&…

python入门课程Pro(1)--数据结构及判断

数据结构及判断 第1课 复杂的多向选择1.if-elif-else2.if嵌套3.练习题(1)大招来了(2)奇数还是偶数(3)简洁代码 第2课 数据与判断小结1.变量2.格式化输出3.逻辑运算-或与非4.判断条件5.练习题(1&…

LNK1342中文报错乱码

如图所示,因编译中存在中文而报错“常量中有换行符”或者直接报错LNK1342且中文报错乱码 无论是使用UTF-8还是GBK编译都会报错,并且修改控制台的格式936或65001也无法解决 解决办法:检查你的注册表编辑器 以下位置,如果安装了VS…

Java无模版导出Excel 0基础教程

0 写在前面 经常写数据导出到EXCEL&#xff0c;没有模板的情况下使用POI技术。以此作为记录&#xff0c;以后方便使用。 1 依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</v…

C# 各版本语法新功能汇总

C# 8.0 以后 官网 C# 7.3 》》in C# 7.2 》》 命名参数、具名参数 》》》 条件 ref 表达式 C# 7.1 》》 default 运算符 default 在C#7.1中得到了改进&#xff0c;不再需要default&#xff08;T&#xff09;了 //变量赋值C#7.0 var s "字符串"; s default(s…

鸿蒙基本工程目录

工程级目录 AppScope 中存放应用全局所需要的资源文件。entry 是应用的主模块&#xff0c;存放 HarmonyOS 应用的代码、资源等。oh_modules 是工程的依赖包&#xff0c;存放工程依赖的源文件。build-profile.json5 是工程级配置信息&#xff0c;包括签名、产品配置等。hvigorf…

一文带你了解 GB 18030-2022 字符集

GB18030 全称《‌信息技术 中文编码字符集》‌&#xff0c;‌是我国信息技术领域的强制性国家标准之一&#xff0c;是中华人民共和国国家标准所规定的变长多字节字符集&#xff0c;字符以单字节、双字节或四字节编码。 当前执行标准为 GB 18030-2022&#xff0c;于 2023 年 8 月…

Linux·权限与工具(上)

1. shell命令以及运行原理 Linux严格意义上来说是一个操作系统&#xff0c;我们称之为 "核心(kernel)" &#xff0c;但我们一般的用户不呢个直接使用到核心&#xff0c;因为不会用。所以开发者在核心外面封装了一层 "外壳(shell)" 程序&#xff0c;来与核心…

24暑假算法刷题 | Day15 | LeetCode 110. 平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和,222. 完全二叉树的节点个数

目录 110. 平衡二叉树题目描述题解 257. 二叉树的所有路径题目描述题解 404. 左叶子之和题目描述题解 222. 完全二叉树的节点个数题目描述题解 110. 平衡二叉树 点此跳转题目链接 题目描述 给定一个二叉树&#xff0c;判断它是否是平衡二叉树 平衡二叉树 是指该树所有节点的…

VMware Vsphere创建虚拟机

作者&#xff1a;红米 一、上传系统镜像 1、打开数据中心 2、新建文件夹&#xff0c;存放镜像 3、点击上传文件按钮 4、找到本地镜像上传 二、安装虚拟机 1、创建虚拟机 2、选择创建类型 3、为虚拟机命名并选择虚拟机安装的所在位置 4、选择计算资源 5、选择存储 6、选择兼容…

Linux系统部署MySQL数据库

1.Linux插入光盘&#xff0c;使用df-h获取光盘信息&#xff0c;默认/dev/sr0文件为光盘文件 使用命令 mount -o ro /dev/sr0 /media进行手动挂载 mount -o ro /dev/sr0 /media 2.进入cd /etc/yum.repos.d目录 编辑配置yum库&#xff0c;编辑vim yum.repos [BaseOS] nameba…

什么是IoC控制反转思想?

目录 一.什么是IoC&#xff1f; IoC核心思想 一.什么是IoC&#xff1f; IoC&#xff08;Inversion of Control&#xff09;即控制反转&#xff0c;这里的控制是代表控制权的意思&#xff0c;IoC是一种编程思想&#xff0c;旨在降低代码之间的耦合度、降低代码的维护成本。…

算法力扣刷题记录 五十二【617.合并二叉树】

前言 二叉树篇&#xff0c;继续。 记录 五十二【617.合并二叉树】 一、题目阅读 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要…

算法day04 位运算 插入排序 二分法 对数器

位运算: 1&#xff09;有一个数组只包含这样的数&#xff0c;有几个数出现偶数次&#xff0c;有1个数出现奇数次&#xff0c;要求时间复杂度不超过o(n),怎么求出现奇数次的数。 使用 ^ 异或运算整个数组&#xff0c;偶数次运算结果为0&#xff0c;只留下最后一个奇数次的数。 …

【元器件】二极管、三极管、MOS管

二极管 D 二极管是一种具有两个电极&#xff08;即正极和负极&#xff09;的电子器件。它是一种非线性元件&#xff0c;具有许多重要的功能和应用 三极管 Q 概述 一种控制电流的半导体器件&#xff0c;其作用是把微弱信号放大成幅度值较大的电信号&#xff0c;也用作无触点开…