理解广角镜头的视野和畸变

news2024/10/6 18:32:20

为什么广角镜头的视野会比长焦镜头的视野大呢?

   我之前用等光程解释了景深,也解释了为什么焦距越远,成像越大,但是从来没有提到过视野范围这个概念。实际上在我之前建立的数学模型中,物曲面S是无限大的,像曲面S1也是无限大的。但是实际的照相机中,照片是被框住了的,也就是像曲面S1的大小是固定的,那么怎样使得在S1固定的情况下,物曲面S尽可能的大呢?

首先,根据费马原理,这是个非常好用的原理,因为可以不用考虑折射,反射,只需要关注问题本身了,譬如这里,从S发出的光在透镜中发生了折射,但是由于折射只是最小光程的结果,光线的路径可以是任意的,那么我随意画,只要等光程即可,反正最后是选择其中光程最小的路径即可,而且这种任意性使得最小光程也符合我从任意的情况下总结出的一般性的规律。

首先有SA+SB=AS1+BS1。

所以就是SA-SB=常数2a,那么S的路径就是个双曲线了,AB的光程2c,(+-c,0)是双曲线的焦点。

注意,这里面,SA和SB是空气的光程,AB是介质中的光程,不一样。A和B是透镜的边界点。

首先假设SA-SB=2a, 可以画出来双曲线如图所示:

所以到达S1曲面的边界的位置的像点分布在双曲线上,如果是W区域和U区域发出的光呢?比如S'A-S'B大于AB了,那么就会需要像曲面S1更大或者更靠前才能使得像边界点到A和B的光程差变大。而如果是在V区域的点,由于光程差S'A-S'B变小,只要把到像边界位置的点向光轴靠近,就可以缩小光程差了。

所以可以总结出来,透镜左边的物区域,只有V区域包含双曲线的位置是可以在固定大小的成像曲面S1上的。

但是有个问题,我右边给出的是成像曲面是2维度的,左边却是空间区域是3维度的,维度不一样啊。所以,左边的双曲线中,S'点被S点遮挡住了?这还真是个问题,因为右边的光程路径是一样的,但是光线并没有被遮挡,如果改变光圈AB大小,比如缩小AB,那么S'和S在像曲面S中的位置都向光轴靠拢,但是S的光程差改变较大,所以S在像S1中的位置更向光轴靠拢。

物S'和S的最小光程在像曲面S中的位置可能不同,这只是某个光线路径的光程相同,并一定是像点。

我给出像点的定义:所谓的像点就是到达这个点的所有的光程都相等,如果只是部分光程相等,那就不是像点。

然后我给出最小光程的解释:最小光程说的是折射的意思。如果所有的光程在像曲面S1上的某个点都相等,那所有的光程都是最小光程了。

=========================================================================

首先考虑双曲线的存在的问题

从最坏的情况考虑,假设双曲线上的物点S'和S的所有光程都在像曲面上,并且最小光程的像点在像曲面S的位置是一样的。那么可以认为这个双曲线是不成像的,因为光线重合了。也就是说在成像的边界处是不成像的,只能感受到有光,但是没有信息。

这个最坏的情况是成像的视野? 为什么是这样的呢?因为成像的视野总有边界存在,那么这个边界是什么呢?先不回答这个问题。先考虑这种双曲线的存在性的问题:存在在边界上的点y0,在透镜坐标的物区中,存在一条双曲线,使得在这条曲线上的每一个点到达y的任意光程都相同。

假设不存在这样的点呢?也就意味着不存在这样的双曲线,这就是说物区域的任意点到透镜的左边成像的像点是一一对应的,注意这是3维空间对应3维空间,之前是2维对应的。

本来从数学上说确实应该是3维流形之间同胚,但是物理上,有辨识度的问题,其实分不清的时候,就会造成是并没有一一对应,而是多对一对应,意味着这样的双曲线确实存在,但不是无限延伸,而是较短的长度。在V区中,存在重重叠叠地这样的双曲线,每条双曲线代表的是透镜的分辨率,双曲线长度非常短,使得无法看清楚视野范围中的几毫米,甚至微毫米的物体的结构。

既然短的存在,那么边界位置确实是也存在极短双曲线的。但是我想要的是长的双曲线,有没有?

这就要看透镜有没有做到3维空间之间的同胚了,我认为并没有做到,因为我之前考虑过了,在二维曲面同胚的时候,我认为只需要这个映射是覆盖映射即可,只需要像空间是单连通的。

我个人提出的数学模型,其实应该建立在代数拓扑的基础上更合理,这样就是更推广了应用的范围了。但是我并不知道照相机的镜头是什么曲面,所以到底有没有做到3维空间的同胚是未知的。

从另一个方面考虑,假设这样的长的双曲线确实存在,那么一定会是在边界上吗?从现实看,也只能出现在边界上,因为在像中间的斑点现实并没有看到。

结论就是: 长的双曲线不知道,但是极小的双曲线确实存在, 并且这种存在是重叠的,因为分辨率了的问题。

=========================================================================

现在从重叠的极短双曲线讨论视野的问题。

假设长双曲线不存在,把成像曲面S1的边界点y0的原像f-1(y0)视为极短双曲线,由这些重重叠叠的极短双曲线,就组成了包围物曲面S的3维空心但是有一定厚度的球。

尽管极短双曲线并没有连成无限长双曲线,而是有一定的错开,但是可以近似认为是一条无限长双曲线,因为这在解释视野上差别不大。

我现在解决透镜右边像曲面是2维的,左边物区域是三维的问题。

实际上同胚的只能是二维的,也就是说能清晰看到的是二维流形,其余的三维的是不清晰的。也就是说在V区域只表示能看到的,但是在任何情况下,能够清晰成像的都是二维的流形,比如三维空间中的球面是二维的。在最小光程双曲线上,W和U区域包括双曲线是不可见的,但是W区域是不在成像曲面S上。而双曲线上是在成像曲面S的边界上,但只是能感受到光而没有信息。

当透镜大小,即光程AB=2c不变的时候,而当焦距变小的时候,像曲面S1的距离变小了,即是SA-SB=2a变大了。

渐近线公式:y=±(a/b)x (焦点在y轴上)

aa+bb=cc, 所以b变小了,所以渐近线的斜率变大了,所以我上面的W区域和U区域更小了。所以短焦的视野更大,就是这个道理。

从上面的分析可以知道,要想视野范围变大,需要AB变小,即透镜的直径更小,或者焦距变小,这会使得视野更广。

========================================================================

现在讨论一下广角镜头,甚至是鱼眼镜头的畸变。

所以,广角镜头为什么会有从中心向周围膨胀的视野呢?

当镜头对焦到物体上的时候,物体S周围的极短双曲线效果就会明显产生,这是分辨率的问题造成的。具体解释是: 物体对焦的部分要清晰成像,其他的地方是模糊的,而清晰成像由于分辨率不能清晰到毫米甚至是微毫的尺度,所以在这个尺度下,会发生双曲线效应。这种效应是重重叠叠的,而模糊成像的地方不会有明显的双曲线效应,因为本来就是物理上光重叠了,观察装置能够分清楚这是模糊的。清晰成像部分是物理上光几乎没有重叠,但是观察装置的分不清认为成像曲面S1前后移动一定的距离dx无影响,这种物理上的光稍微重叠,造成了景深的概念和双曲线效应。

既然极短双曲线是稍微错位,我直接从长双曲线讨论畸变简化过程了。

所以就是,如果要把带有一定景深的空间物体D映射到成像曲面S1上,可以知道的是D区域的远处在视野中呈现的空间更多,近处在视野中呈现的空间更少。但是如果成像曲面换成是矩形,宽度一样的矩形会怎么样?只能是远处的物体被压缩了,所以会有膨胀的效果,至少在景深的区域中会是这样的。超过景深区域,就没有这种效果了。所以更远处或者更近处虽然模糊,但是不会有明显变形。所以双曲线效应只在景深中发生了。

========================================================================

但是为什么是广角镜头才有,长焦镜头看不出来呢?

这跟压缩的程度有关,短焦镜头压缩程度大,根据我上面的渐近线的说法,但是景深小,我之前讨论过景深和焦距的关系。景深越小,越说明观察装置的这个时候的分辨能力是较高的,双曲线较短。(实际上分辨能力从弥散圆看都是固定的,因为弥散圆的半径是固定的,只是具体观察的时候,相同的弥散圆看到的细节尺度不同,我是从实际观察到的尺度判定的分辨能力。)

同时,压缩范围跟景深的深度有关。景深小,意味着在画面中清晰区域占比小,所以畸变的区域不多。

长焦镜头的压缩程度小,因为双曲线的渐近线,景深比较深。景深越深,越说明观察装置的这个时候的分辨能力是较差的,双曲线较长。双曲线长只会影响观察的尺度,也就是说如果短焦镜头能观察到毫米的结构,那么长焦镜头只能观察到厘米的结构了,所以长焦不可能比短焦更清晰。

所以景深决定了清晰区域的大小和分辨率。景深深,清晰区域大,但是分辨率下降了。景深小,清晰区域小,分辨率上升。

========================================================================

总结: 

那么我再改一下,畸变只跟双曲线的渐近线的斜率有关,而跟双曲线的长短无关。改变斜率可以改变光圈和焦距。光圈越小,焦距越短,斜率越大,畸变越明显。但是光圈越小,景深越深,意味着在矩形画面中,畸变的所占据的范围更大,因为矩形的长宽是固定的,清晰的区域变多了。

          

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

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

相关文章

python:画圆圈,绘制生命之花图案

参阅:生命之花/平衡轮:一个实用的人生规划的工具 先画一个圆圈,编写 draw_circle1.py 如下 # -*- coding: utf-8 -*- """ 画一个圆圈 """ import numpy as np from matplotlib import pyplot as plt# 用于…

(done) 关于 GNU/Linux API setenv 的实验

写一个下面的代码来验证 #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h>int main() {// 设置环境变量 MY_VAR 的值为 "hello_world"if (setenv("MY_VAR", "hello_world", 1) ! 0…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-29残差网络ResNet

29残差网络ResNet import torch from torch import nn from torch.nn import functional as F import liliPytorch as lp import matplotlib.pyplot as plt# 定义一个继承自nn.Module的残差块类 class Residual(nn.Module):def __init__(self, input_channels, num_chan…

adb 查看哪些应用是双开的

adb shell pm list users 得到 这 里有 user 0 ,11,999 其中0是系统默认的&#xff0c;11是平行空间的&#xff0c;999是双开用户 pm list packages --user 999 -3 得到了999用户安装第三方应用的包名 pm list packages --user 11 -3 得到了隐私空间用户安装第三方应用的…

Git客户端安装步骤详解

git windows7 百度经验:jingyan.baidu.com 方法/步骤 1 从git官网下一个git安装包。 步骤阅读 2 点击git.exe安装程序&#xff0c;点击【next】 ![git的安装和配置](https://imgsa.baidu.com/exp/w500/sign7565f44ba58b87d65042ab1f37092860/21a4462309f790525e5b0144…

兰州理工大学24计算机考研情况,好多专业都接受调剂,只有计算机专硕不接收调剂,复试线为283分!

兰州理工大学&#xff08;Lanzhou University of Technology&#xff09;&#xff0c;位于甘肃省兰州市&#xff0c;是甘肃省人民政府、教育部、国家国防科技工业局共建高校&#xff0c;甘肃省高水平大学和“一流学科”建设高校&#xff1b;入选国家“中西部高校基础能力建设工…

Android-系统开发_四大组件篇----探讨-Activity-的生命周期

当一个活动不再处于栈顶位置&#xff0c;但仍然可见时&#xff0c;这时活动就进入了暂停状态。你可能会觉得既然活动已经不在栈顶了&#xff0c;还怎么会可见呢&#xff1f; 这是因为并不是每一个活动都会占满整个屏幕&#xff0c;比如对话框形式的活动只会占用屏幕中间的部分…

Retrieval-Augmented Generation for Large Language Models A Survey

Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述 文章目录 Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述 Abstract背景介绍 RAG概述原始RAG先进RAG预检索过程后检索过程 模块化RAGModules部分Patterns部分 RAG…

15天搭建ETF量化交易系统Day9—玩大A必学网格策略

搭建过程 每个交易者都应该形成一套自己的交易系统。 很多交易者也清楚知道&#xff0c;搭建自己交易系统的重要性。现实中&#xff0c;从&#xff10;到&#xff11;往往是最难跨越的一步。 授人鱼不如授人以渔&#xff0c;为了帮助大家跨出搭建量化系统的第一步&#xff0c;我…

vscode用vue框架2,续写登陆页面逻辑,以及首页框架的搭建

目录 前言&#xff1a; 一、实现登录页信息验证逻辑 1.实现登录数据双向绑定 2.验证用户输入数据是否和默认数据相同 补充知识1&#xff1a; 知识点补充2&#xff1a; 二、首页和登录页之间的逻辑(1) 1. 修改路由&#xff0c;使得程序被访问先访问首页 知识点补充3&am…

[每周一更]-(第102期):认识相机格式Exif

文章目录 EXIF数据包含的信息读取EXIF数据的工具和库EXIF数据读取示例&#xff08;Go语言&#xff09;想法参考 相机拍摄的照片&#xff0c;在照片展示行无水印信息&#xff0c;但是照片属性中会包含比较丰富的信息&#xff0c;相机品牌、型号、镜头信息等&#xff0c;这些我们…

基于NURBS曲线的数据拟合算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1NURBS曲线基础 4.2 数据拟合原理 5.完整程序 1.程序功能描述 基于NURBS曲线的数据拟合算法,非均匀有理B样条&#xff08;Non-Uniform Rational B-Splines&#xff0c;简称NURBS&#xf…

电子商务的未来:大数据||论主流电商大数据采集API接口的重要性

每天全球生成2.5万亿字节。金融交易&#xff0c;用户出版物和众多内容&#xff0c;数据对于组织了解消费者的行为和实际需求极为重要。 在一个互联、动态和竞争激烈的多元世界中&#xff0c;能够预测技术和市场变化的组织在竞争中生存下来。这是大数据管理的真正目标&#xff0…

鸿蒙生态伙伴SDK市场正式发布,驱动千行百业鸿蒙原生应用开发

6月21-23日&#xff0c;华为开发者大会&#xff08;HDC 2024&#xff09;在东莞举办。在22日举办的【鸿蒙生态伙伴SDK】论坛中&#xff0c;正式发布了【鸿蒙生态伙伴SDK市场】&#xff08;以下简称&#xff1a;伙伴SDK市场&#xff09;&#xff0c;伙伴SDK市场是为开发者提供各…

PHP转Go系列 | ThinkPHP与Gin的使用姿势

大家好&#xff0c;我是码农先森。 安装 使用 composer 进行项目的创建。 composer create-project topthink/think thinkphp_demo使用 go mod 初始化项目。 go mod init gin_demo目录 thinkphp_demo 项目目录结构。 thinkphp_demo ├── LICENSE.txt ├── README.md …

JVM专题三:Java代码如何运行

通过前面的第一篇文章&#xff0c;对JVM整体脉络有了一个大概了解。第二篇文章我们通过对高级语言低级语言不同特性的探讨引出了Java的编译过程。有了前面的铺垫&#xff0c;咱们今天正式进入Java到底是如何运行起来的探讨。 目前大部分公司都是使用maven作为包管理工具&#x…

Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!

代码仓库 会同步代码到 GitHub https://github.com/turbo-duck/flink-demo 当前章节 继续上一节的内容&#xff1a;https://blog.csdn.net/w776341482/article/details/139875037 上一节中&#xff0c;我们需要使用 nc 或者 telnet 等工具来模拟 Socket 流。这节我们写一个 …

基于YOLOv5的火灾检测系统的设计与实现(PyQT页面+YOLOv5模型+数据集)

基于YOLOv5的火灾检测系统的设计与实现 概述系统架构主要组件代码结构功能描述YOLOv5检测器视频处理器主窗口详细代码说明YOLOv5检测器类视频处理类主窗口类使用说明环境配置运行程序操作步骤检测示例图像检测视频检测实时检测数据集介绍数据集获取数据集规模YOLOv5模型介绍YOL…

python输入、输出和变量

一、变量 变量是存储数据的容器。在 Python 中&#xff0c;变量在使用前不需要声明数据类型&#xff0c;Python 会根据赋值自动推断变量类型。 定义变量&#xff1a; 二、输入&#xff08;Input&#xff09; input() 函数用于获取用户输入。默认情况下&#xff0c;input() 会…

在阿里云使用Docker部署MySQL服务,并且通过IDEA进行连接

阿里云使用Docker部署MySQL服务&#xff0c;并且通过IDEA进行连接 这里演示如何使用阿里云来进行MySQL的部署&#xff0c;系统使用的是Linux系统 (Ubuntu)。 为什么使用Docker? 首先是因为它的可移植性可以在任何有Docker环境的系统上运行应用&#xff0c;避免了在不通操作系…