光栅化处理(Rasterization)

1.垂直可视角度

​ 通常使用不同镜头的相机拍摄同一物品的时候,其可以看到的物体的范围是不同的,那么如何表示这一镜头下摄像机所能看到的范围呢?我们定义了一个概念——可视角。如下图所示(两条红线所框出来的角):

在这里插入图片描述

实际上当我们定义一个视锥的时候只要定义一个垂直可视角度,一个宽高比,其他信息都能通过这些推理得来。

2.定义屏幕空间

​ 当我们完成mvp操作后(放物体,放相机,投影),我们会获得一个1 * 1 * 1 的小正方体,这时我们得把我们的小正方体转换在二维屏幕上 —— 这样的一个步骤我们称之为光栅化。

屏幕上的最小单位我们称之为像素(前面文章其实提到过,默认单位为1的小正方体),而一个像素的颜色由red , green ,blue 这三元色的不同比例组成。

在这里插入图片描述

一个像素的坐标默由该小正方体的左下角的点表示,坐标从0开始。

一片像素的表示法:(0,0) to (width-1 , height -1)

一个像素的中心点的坐标为(x+0.5 , y + 0.5)

屏幕整体的覆盖范围(0,0) to (width , height)

​ 那到底如何将立体正方形进行变换到像素空间上呢,我们称这一步为视口变换:

在这里插入图片描述

右边的矩阵实际上先做了两部:

1.忽视z坐标,先将立体正方形的中心点变成(0,0),并且长宽与变成了像素覆盖整个屏幕的长宽

2.在将中心点平移到整块像素的中心

这里在给大家介绍一些常见的光栅的显示设备:

LCD(液晶显示器):利用光的波动性,通过液晶造成的扭曲效果改变光的振动方向。

LED(放光二极管):LED的呈像原理就是通过半导体材料的电子结构和能级跃迁,将电能转化为光能,实现发光的效果

3.采样法

在这里插入图片描述

通常我们可以用一个又一个的小三角形表示成一个复杂多边形(美术做的工作)。

在这里插入图片描述

如上图所示,当我们将一个三角形进行实际的屏幕映射时,我们如何判断哪个像素应该染色?

通常我们采用采样法来解决这一问题(当像素的中心点在这个三角形内部中时,我们将其染色)。

(实际上就是一个点是否在一个面内的问题,前面讲过如何处理这一问题)

那万一这一点在三角形边界上又当如何呢?这里就看具体的不同规定了。

这里在给大家科普一个包围盒的概念:

在三维图形学中,包围盒通常是一个立方体,也被称为边界框。***这个立方体完全包含了物体的所有点,使得物体不会超出这个边界框的范围。***这样的包围盒在计算机图形学和游戏开发中经常用于优化碰撞检测、物体的可见性判断、以及加速渲染过程。

4.锯齿问题(走样)

首先我们上面已经说过,我们会用采样发来判断一个个像素的中心是否在三角行内,在的话就染色,但是会导致如下图的问题。

在这里插入图片描述

当然采样的不同方法有很多,不仅仅只是我们上面说的那种方式。

类似于锯齿问题的还有摩尔纹,车轮效应。他们的实质是因为采样的速度跟不上信号的变化(这里可以理解成一些图像信息的变化)就会走样。

那么我们究竟该如何防止走样呢?

5.防走样

5.1具体方法的简单描述

在这里插入图片描述

如图所示我们先将上面的三角形进行模糊处理,在采样,具体细节我们会在下文一一道来。

5.2傅里叶变换

傅里叶变换包括傅里叶级数和连续傅里叶变换

首先我们先讲解一下什么是傅里叶级数。

傅里叶级数:一个周期性函数f(t) = 正余弦函数的和

在这里插入图片描述

在这里插入图片描述

ps:这里的相位代表不同的起始点。

好领悟完上面两幅图后,我们在来说说这个连续傅里叶变换

上面提到了傅里叶级数是用来表示周期性函数的,那么当我们碰到非周期性函数的时候应该怎么办?

这个时候我们的连续傅里叶变换就登场了。

在这里插入图片描述

5.3图片的表示方法

我们讲了这么多的傅里叶变换的内容,那么到底和咋们的图形学有什么关系呢?

实际上,对于一张图片来说我们可以使用傅里叶变换将它变成一堆不同频率的波(光的波粒二象性)

具体究竟是个怎么变换法,短时间内很难讲明白,这里先开个坑,不过变换只后的图片的一些特性我们还是能够帮助大家进行一定的分析。

在这里插入图片描述

如上这副图,在频域图中,中心为低频区域,而我们的四周为高频区域,亮度表示图像信息的多少,比如上面一幅图,图像的信息大多集中在低频上。

在这里插入图片描述

之后我们采样高通滤波器,将我们低频的信息过滤掉,就变成了如上图这样。

实际上这里的高频描述的是图片中人物的边框,为什么呢?拿上面这个哥们的衣服举例,其褶皱度比较大,凹凸不平,一般这样的图片部分所代表的往往是我们的高频信息。

在这里插入图片描述

接着我们采用低通滤波器得到了这样的一幅图。实际上我们看到低频信息是一副图的大致整体部分,一些凹凸,轮廓感这样的细节信息全部去掉了。

5.4卷积操作

好那么终于要开始要讲解我们的防走样方法了(就是上面提到的模糊处理)。

这里我们先来介绍一下我们的卷积操作:

在这里插入图片描述

那么用到实际图像处理上是什么样的呢?

如下图所示:

在这里插入图片描述

这副图的上半部分是在时域上面进行处理的一个抽象图,对于该图片上任何一个像素,我们取它周围的3乘以3的这样的一块像素空间,求信号的评价数值然后再写回去,就会得到这样的一副模糊的图片。

这副图片的下半部分就是我们再图片转换为频域后进行一个类似于运用录波器原理的这样的一个处理方式。

5.5从本质上来理解走样现象

在这里插入图片描述

上图是一段在时域当中的频率变换图,我们采样的操作实际就是冲击函数和最开始的频率图相互结合,然后生成了如e这样一段段离散化的频率图来代表我们当前图片的一些频率信息

在这里插入图片描述

上图是相对于的频域的处理,可以看到的是,采样的实际操作在频域上的表现是在将原本的频谱(就是图b)复制粘贴了很多份。

在这里插入图片描述

​ 实际上,当我们的采样的速度不快,采样率比较稀疏的时候,所对应的频谱就会显示上图这样的情况,频谱在搬移的情况下发生了混叠,导致了走样。

总结一下走样的本质是由于采样率不足,未能准确捕捉信号变化(换个说法信号变换的太快了),导致信号失真。

5.6反走样方法的总结

1.增加采样率

2.先模糊(将高频信息砍掉)在采样

5.7MSAA方法

当然实际防走样我们肯定不能像上面进行这个复杂的操作,我们还是采样一种近似的方法来处理我们的走样,这里给大家介绍一种常用的方法MSAA。

在这里插入图片描述

在这里插入图片描述

实际上就是把一个像素在多分几块区域,然后看三角形单个像素内不同区域的覆盖情况,根据这一情况改变颜色的深度。

当然这么做会增大计算量,导致性能的消耗。

实际在单个像素的区域划分上也是有讲究的,不会像上图那样平均划分。

下面给大家在介绍一些其他常用的抗锯齿方案:

1.FXAA(fast approximate aa) 先得到一个有锯齿的图,然后找到边界进行一些替换操作

2.TAA(temporal AA) 复用上一帧的数值

还有一个有意思的技术在这里也跟大家科普一下:

超分辨率技术:当想提高一张图的分辨率时,本质上来将就是将一张拉大然后补充细节,而我我们并不知道其中的细节是什么,这个时候就需要进行一些猜测,而我们的DLSS(深度学习)技术就很适合做一些类似的工作。

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

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

相关文章

LoadBalancer 客户端的负载均衡器+openFeign 请求转发

LoadBalancer Spring Cloud LoadBalancer是Spring Cloud中负责客户端负载均衡的模块,其主要原理是从nacos中获取服务列表通过选择合适的服务实例来实现负载均衡。 源码跟踪 可以看到这里的intercept()方法,拦截了用户的HttpRequest请求,然…

【鸿蒙 HarmonyOS 4.0】通知

一、介绍 通知旨在让用户以合适的方式及时获得有用的新消息,帮助用户高效地处理任务。应用可以通过通知接口发送通知消息,用户可以通过通知栏查看通知内容,也可以点击通知来打开应用,通知主要有以下使用场景: 显示接…

ctfshow web入门 php特性 web146-web150

1.web146 :被过滤了,三元运算符用不了,还可以用位运算符,逻辑运算符,等,逻辑运算符要注意或运算符的短路性 eval(return 1|phpinfo()|1) eval(return 1phpinfo()|1) payload: v11&v20&v3(~%8C%86%8C%8B%9A%92…

粉嘟嘟的免费wordpress模板

粉色好看的wordpress免费模板,用免费wordpress模板也可以搭建网站。 https://www.wpniu.com/themes/11.html

产品开发流程的意义:确保事情做正确——以苹果公司的iPhone为例

产品开发流程的意义:确保事情做正确——以苹果公司的iPhone为例 在当今高度竞争的商业环境中,产品开发流程的重要性愈发凸显。一个精心设计和执行的产品开发流程不仅确保了产品开发的顺利进行,同时也为产品的质量和市场竞争力提供了坚实的保…

Anaconda 的一些配置

Anaconda 安装及修改环境默认位置 https://blog.csdn.net/qq_54562136/article/details/128932352 最重要的一步!!!!!改文件夹权限 Anaconda创建、激活、退出、删除虚拟环境 修改pip install 默认安装路径

你真的用对了知识管理系统了吗?这篇文章教会你

面对信息化社会的信息爆炸,知识管理系统如同一艘救生船,帮助我们捕捉、储存、共享重要的知识,并提高工作效率。但是,你真的用对了知识管理系统吗?让这篇文章成为你的参考指南。 了解知识管理系统的功能导则 首先&…

数据通信练习题

1.0osi七层模型 应用层 data 表示层 会话层 传输层 数据段 防火墙,端口(TCP UDP) 网络层 数据包 路由器 数据链路层 数据帧 交换机 物理层 比特流 网卡 2.IP地址分类 私有地址 A类 0--127 10.0.0.0…

vue学习笔记23-组件事件⭐

组件事件 在组件的模板表达式中,可以直接使用$emit方法触发自定义事件;触发自定义事件的目的是组件之间传递数据 好好好今天又碰到问题了,来吧来吧 测试发现其他项目都可以 正常的run ,就它不行 搜索发现新建项目并进入以后,用指…

数据结构->双向链表带你体验开火车(哨兵)与拼接火车(应用)厢的乐趣

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青-CSDN博客 目的:学习双向带头链表的增,删,查,销毁…

每日OJ题_牛客OR57 手套

目录 牛客OR57 手套 解析代码 牛客OR57 手套 手套_牛客题霸_牛客网 class Gloves { public:int findMinimum(int n, vector<int> left, vector<int> right) {} }; 解析代码 class Gloves { public:int findMinimum(int n, vector<int> left, vector<i…

Tomcat容器经常重启问题排查

报错代码: INFO [Catalina-utility-2] org.apache.catalina.core.StandardContext.reload Reloading Context with name [] has started1.查看内存占用情况:top 可以发现java线程正常情况下占用高达24%的内存资源 2.继续排查:top -Hp 29580 可以发现主要有子线程Catalina-ut…

Java高级编程—注解

文章目录 1.注解的概述2.常见的Annotation示例2.1 生成文档相关的注解2.2 在编译时进行格式检查的注解2.3 跟踪代码依赖性&#xff0c;实现替代配置文件功能的注解 3.自定义Annotation4.JDK中的元注解4.1 Retention4.2 Target4.3 Documented & Inherited 5. JDK8中注解的新…

服务器出现故障如何恢复数据?

服务器数据恢复案例之服务器raid6中3块硬盘离线导致阵列崩溃的数据恢复案例 服务器故障&#xff1a; 服务器中有一组由6块盘组建的 RAID6&#xff0c;这台网站服务器上运行MYSQL数据库和存放其它类型的文件。该组raid中有两块磁盘离线&#xff0c;管理员没有及时更换磁盘&#…

【Numpy】练习题100道(1-25题)

#学习笔记# 在学习神经网络的过程中发现对numpy的操作不是非常熟悉&#xff0c;遂找到了Numpy 100题。 Git-hub链接 目录 1 题目列表&#xff1a; 2 题解&#xff1a; 1 题目列表&#xff1a; 导入numpy包&#xff0c;并将其命名为np&#xff08;★☆☆&#xff09; 打印…

Spring boot创建第一个项目

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构&#xff0c;spring等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; Spring boot创建第一个项目 sp…

基于单片机的视觉导航小车设计

目 录 摘 要 I Abstract II 引 言 1 1 总体方案设计 3 1.1 方案论证 3 1.2 项目总体设计 3 2 项目硬件设计 4 2.1 主控模块设计 4 2.1.1单片机选型 4 2.1.2 STM32F103RCT6芯片 4 2.2单片机最小系统电路 5 2.3电机驱动模块设计 7 2.4红外模块设计 8 2.5红外遥控模块设计 9 2.6超…

设计模式深度解析:工厂方法模式与抽象工厂模式的深度对比

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 探索设计模式的魅力&#xff1a;工厂方法模式文章浏览阅读17k次&#xff0c;点赞105次&#xff0…

Axure 单键快捷键 加快绘图速度 提高工作效率

画图类 R&#xff1a;绘制矩形 先点击空白页面&#xff0c;输入R即可绘制 L&#xff1a;绘制直线 先点击空白页面&#xff0c;输入L即可绘制&#xff0c;绘制的时候按住shift直线 O&#xff1a;绘制圆 先点击空白页面&#xff0c;输入O即可绘制&#xff0c;绘制的时候按…

最新:Selenium操作已经打开的Chrome(免登录)

最近重新尝试了一下&#xff0c;之前写的博客内容。重新捋了一下思路。 目的就是&#xff0c;selenium在需要登录的网站面前&#xff0c;可能就显得有些乏力&#xff0c;因此是不是有一种东西&#xff0c;可以操作它打开我们之前打开过的网站&#xff0c;这样就不用登录了。 …