淘宝网站上的图片是怎么做的/全网热搜榜

淘宝网站上的图片是怎么做的,全网热搜榜,PHP调用wordpress数据库ID,定制和订制有什么区别文章目录 2D transformationScaleReflectionShear(切变)Rotation around originTranslationReverse变换顺序复杂变换的分解 齐次坐标(Homogenous Coordinates)3D transformationScale&TranslationRotation Viewing / Camera t…

文章目录

      • 2D transformation
        • Scale
        • Reflection
        • Shear(切变)
        • Rotation around origin
        • Translation
        • Reverse
        • 变换顺序
        • 复杂变换的分解
      • 齐次坐标(Homogenous Coordinates)
      • 3D transformation
        • Scale&Translation
        • Rotation
      • Viewing / Camera transformation
      • Projection transformation
      • 视口变换
      • 相机内参和相机外参
      • 参考链接

2D transformation

Scale
  • Uniform

image-20240610131838782

  • Non-Uniform

image-20240610131903605

Reflection

image-20240610132151747

Shear(切变)

image-20240610132849601

Rotation around origin

假设旋转矩阵的4个未知数,取特殊点列方程可推导

image-20240610133654334

如果旋转 − θ -\theta θ角度,那么经过推导很容易得出旋转矩阵为原来旋转 θ \theta θ角度的矩阵的转置

image-20240612162331025

又考虑到实际上如果一个图形旋转 θ \theta θ角度再旋转 − θ -\theta θ角度会变回原来的形状,也就是 R − θ R θ X = E X R_{-\theta}R_\theta X=EX RθRθX=EX,即 R − θ R θ = E R_{-\theta}R_\theta=E RθRθ=E​两个矩阵是互逆的。

image-20240612162716886

补充:如果一个矩阵的逆等于它的转置,那么这个矩阵是正交矩阵

以上变换都属于线性变换,都可以写成矩阵相乘的形式:

image-20240610133923619

Translation

需要注意平移(Translation)变换不属于Linear Transformation:

image-20240610134631675

但以上变换可以统称为仿射变换(Affine Transformations)

image-20240610135400637

Reverse

做逆变换相当于把变换后的图形又变回去,假如对 X X X做了变换 M M M,变为 X ′ = M X X'=MX X=MX,再对 X ′ X' X做逆变换 M − 1 M^{-1} M1 M − 1 M X = X M^{-1}MX=X M1MX=X,即变回 X X X

image-20240610141644378

变换顺序

由于矩阵乘法是不可交换的,所以变换的顺序是很重要的,不同的变换顺序得到的结果也不一样,顺序是先线性变换后平移

image-20240610142339298

复杂变换的分解

image-20240610143021276

齐次坐标(Homogenous Coordinates)

将一个 n n n维空间中的点或向量,表示为 n + 1 n+1 n+1维空间中的向量,能够达到合并矩阵运算中乘法和加法操作的目的,简化计算

image-20240610140106905

这样可以定义至少3种有效操作:

image-20240610140352028

Point+Point由于没有什么实质性意义,所以给出一个定义, ( x y w ) \begin{pmatrix}x \\ y \\ w\end{pmatrix} xyw 这个点实际上定义为 ( x / w y / w 1 ) \begin{pmatrix}x/w \\ y/w \\ 1\end{pmatrix} x/wy/w1 这个点,那么这时,两个点相加就被赋予了两个点中点这一意义

那么通过使用齐次坐标,可以将仿射变换改写为:

image-20240610140944932

缩放、旋转、平移可以表示成:

image-20240610141034088

3D transformation

和2D变换中的相似,齐次坐标在3维空间中变成了4维,仿射变换矩阵如下:

image-20240612163848238

注意是先应用线性变换,再应用平移变换!

Scale&Translation

image-20240612164016369

Rotation

三维空间中的旋转和2维相似,绕某个轴旋转就固定哪个轴的坐标不变,其他两个轴应用2维旋转矩阵即可,但我们发现绕y轴旋转的矩阵中 sin ⁡ α \sin α sinα的符号有点不同,这是因为图中y的方向是 z × x z×x z×x得到的,如果y轴是向下的,即由 x × z x×z x×z得到,那么 sin ⁡ α \sin α sinα会刚好相反

image-20240612164412560

留下几个知识点:欧拉角四元数罗德里格兹旋转公式

旋转矩阵不适合做插值,而四元数是可以的

image-20240612172907881

Viewing / Camera transformation

考虑我们现实场景重拍摄一张图片的步骤:

  • 找一个好地方并摆出姿势(model transformation)
  • 找一个好的拍摄角度并放置相机(view transformation)
  • 在相机上投影出相片(projection transformation)

这三部就是图形学中的MVP变换

我们首先考虑视角变换,也即相机变换。通常,相机可以通过三个方向向量来确定一个唯一的视图/相机位置(可以注意到 g ^ \hat g g^ t ^ \hat t t^总是垂直的):

  • Position e ⃗ \vec e e (决定相机的物理位置)
  • Gaze direction g ^ \hat g g^ (决定俯视仰视平视方向)
  • Up direction t ^ \hat t t^ (相机的角度,决定拍出的图像是什么角度,相机旋转,则拍出的照片也会旋转)

由于如果我们保持相机和物体的相对位置不变,同时移动二者,可能会得到相同的拍摄图像,因此不妨将相机固定到一个位置,即:

  • 原点
  • up at Y Y Y
  • gaze at − Z -Z Z

对于这样的位置,可以采取如下仿射变换

  • e e e平移到原点
  • g g g旋转到 − Z -Z Z
  • t t t旋转到 Y Y Y
  • ( g × t ) (g×t) (g×t)旋转到 X X X

这个变换实际上也就是世界坐标系转换到相机坐标系的过程。

但实际上,上面这些变换是不好表示的,由于前面提到旋转矩阵是正交的,所以我们可以考虑上述旋转变换的逆变换

image-20240612193435943

这样我们对所有的物体都事先运用这种变换就相当于我们的相机在一个固定位置去拍摄,并且相机位置是原点。这种变换也被称为ModelView Transformation。这实际上是世界坐标系相机坐标系的一个变换。

Projection transformation

投影变换就是从3D物体投影到2D图像的变换,可以分为:

  • 正交投影(Orthographic Projection)
  • 透视投影(Perspective Projection)

二者本质的区别是是否具有近大远小的性质,透视投影具有近大远小的性质而正交投影没有。透视投影中,原本平行的线投影后可能不再平行。如下图所示,正交投影相当于把相机拉到无限远的位置。下图中,Near clip plane是近平面,也相当于相机的成像平面。

image-20250223190053089

正交投影

当按照前面的方式进行视图变换后,正交投影其实就相当于丢弃掉Z轴坐标,然后将物体的中心平移到相机位置,并且将物体缩放到一个小的矩型中(归一化)。如下图,但这里还有一个问题是物体的正反我们无法分辨。

image-20250223191731040

在实际操作中,我们通常是将一个长方体通过平移和缩放映射一个中心位于原点,边长为1的一个立方体中:

image-20250223192051848

变换矩阵就是(先平移后缩放):

image-20250223192537273

在这个过程中,实际上物体是被拉伸了,后面会提到在做完MVP变换后还要进行视口变换

透视投影

首先需要明确齐次坐标中的一个知识点:就是 ( x , y , z , 1 ) (x,y,z,1) (x,y,z,1) ( k x , k y , k z , k ) (kx,ky,kz,k) (kx,ky,kz,k)表示的是同一个点。

透视投影实际上可以拆分为两步:

  • 将远平面到近平面内的frustum(截锥体)挤压变换成一个长方体。变换需要满足:近平面的所有点坐标不变。远平面只有xy变换而z不变。该变换表示为 M p e r s o − > o r t h o M_{perso->ortho} Mperso>ortho。注意近平面和远平面的中心连线是和z轴平行的。相机位置在中心连线上。
  • 对长方体进行正交投影。

image-20250223195710817

实际上,远平面(右)要挤压成与近平面(左)一样的大小,实际上是一个相似变换。

image-20250223200429050

利用相似变换的性质,可以求出 ( x , y , z ) (x,y,z) (x,y,z) ( x ′ , y ′ , z ′ ) (x',y',z') (x,y,z)的变换。
y ′ = n z y x ′ = n z x y^{\prime}=\frac{n}{z} y \quad x^{\prime}=\frac{n}{z} x y=znyx=znx
对于截锥体内的所有平面,xy变换都满足上述关系,但z的关系目前还不知道,只知道远平面和近平面的z不变。表示成齐次坐标为:

image-20250223200933762

M p e r s o − > o r t h o M_{perso->ortho} Mperso>ortho的目标就是:

image-20250223201044878

至此我们可以推导出 M p e r s o − > o r t h o M_{perso->ortho} Mperso>ortho矩阵的一部分:

image-20250223201130878

至于第三行,我们利用近平面的任意一点和远平面的任意一点z都不会改变可以推导出第三行,最终的 M p e r s o − > o r t h o M_{perso->ortho} Mperso>ortho矩阵就是:
M p e r s o − > o r t h o = ( n 0 0 0 0 n 0 0 0 0 n + f − n f 0 0 1 0 ) M_{perso->ortho}=\begin{pmatrix} n & 0 & 0 & 0\\ 0 & n & 0 & 0 \\ 0 & 0 & n+f & -nf\\ 0 & 0 & 1 & 0 \end{pmatrix} Mperso>ortho= n0000n0000n+f100nf0
n n n是近平面的z值, f f f是远平面的z值。

然后就是用正交变换矩阵再去做一次变换即得到最终的投影变换矩阵。
M persp  = M ortho  M persp  → ortho  M_{\text {persp }}=M_{\text {ortho }} M_{\text {persp } \rightarrow \text { ortho }} Mpersp =Mortho Mpersp  ortho 
这也是相机坐标系图像坐标系的过程。

透视投影中还涉及到两个概念,视锥的长宽比(aspect ratio)垂直可视角度(vertical field-of-view,fovY)。实际含义可以从下图看出:

image-20250224165545646

我们假设前面经过矩型块是对称的,即 l = − r ( x 方向 ) , b = − t ( y 方向 ) l=-r(x 方向),b=-t(y方向) l=r(x方向),b=t(y方向)。那么可以从 t , r t,r t,r推出两个概念的表达式:
tan ⁡ f o v Y 2 = t ∣ n ∣ aspect  = r t \begin{aligned} \tan \frac{f o v Y}{2} & =\frac{t}{|n|} \\ \text { aspect } & =\frac{r}{t} \end{aligned} tan2fovY aspect =nt=tr
image-20250224165606254

视口变换

在MVP变换过后,我们的目标就是将前述的小立方块投影到一个图片上,这实际上也是图像坐标系到像素坐标系的变换。

首先我们假设像素坐标系是如下形式:坐标原点在左下角,每个像素是有单位宽度和高度的小颜色块,像素内部每一点颜色都一样,像素坐标系放的是像素的索引。如下图。

image-20250224170145528

设定y轴方向的长度为高度(height),x轴方向的长度是宽度(width),整个屏幕的范围就是上图灰色区域。

视口变换的目标是:

  • 保持相机坐标系的z不变
  • xy平面要从原来小立方体 [ − 1 , 1 ] 2 [-1,1]^2 [1,1]2的范围变换到 [ 0 , w i d t h ] × [ 0 , h e i g h t ] [0,width]\times[0,height] [0,width]×[0,height]的范围

变换矩阵很容易写出,就是缩放+平移操作。视口变换矩阵 M v i e w p o r t M_{viewport} Mviewport
M viewport  = ( width  2 0 0 width  2 0 height  2 0 height  2 0 0 1 0 0 0 0 1 ) M_{\text {viewport }}=\left(\begin{array}{cccc} \frac{\text { width }}{2} & 0 & 0 & \frac{\text { width }}{2} \\ 0 & \frac{\text { height }}{2} & 0 & \frac{\text { height }}{2} \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) Mviewport = 2 width 00002 height 0000102 width 2 height 01
经过视口变换后,下一步就是光栅化(Rasterization)的过程。

相机内参和相机外参

外参就是上面从世界坐标系到相机坐标系的变换矩阵,可以简单理解为相机的位置、角度。

内参是上面另外两个变换矩阵的叠加,简单理解就是相机的内部特性,如焦距,畸变系数等。

参考链接

[1] https://www.bilibili.com/video/BV1X7411F744?spm_id_from=333.788.videopod.episodes&vd_source=bac8ddf04ec0b6386d58110f67353bc7&p=4

[2] https://www.bilibili.com/video/BV1r8411f72j/?spm_id_from=333.337.search-card.all.click&vd_source=bac8ddf04ec0b6386d58110f67353bc7

[3] https://zhuanlan.zhihu.com/p/692565077

还有一些不太理解的地方以及一些概念以后再更新。

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

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

相关文章

DBGPT安装部署使用

简介 DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。 目的是构建大模型领域的基础设施,通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Mul…

【windows driver】 开发环境简明安装教程

一、下载路径 https://learn.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads 二、安装步骤: 1、安装Visual Studio IDE 笔者建议安装最新版本,可以向下兼容。发文截止到目前,VS2022是首选,当前笔者由于项…

回文重新排序

回文串就两种情况&#xff0c;一种是有一个奇数个的字母&#xff0c;另一种是没有的。所以我们需要统计出题目给出的字母是否为奇数个&#xff0c;且奇数个只能有一个&#xff0c;如果超过一个就不能构成回文串了。 #include<iostream> #include<string> #include…

如何在docker上部署java服务

目录结构 首先 Dockerfile FROM bladex/alpine-java:openjdk17_cn_slimMAINTAINER admin@rsz.comENV TZ=Asia/ShanghaiRUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneRUN mkdir -p /xhWORKDIR /xhEXPOSE 8106ADD ./blade-system.…

FinRobot:一个使用大型语言模型进行金融分析的开源AI代理平台

文章目录 前言一、生态系统1. 金融AI代理&#xff08;Financial AI Agents&#xff09;2. 金融大型语言模型&#xff08;Financial LLMs&#xff09;3. LLMOps4. 数据操作&#xff08;DataOps&#xff09;5. 多源LLM基础模型&#xff08;Multi-Source LLM Foundation Models&am…

《SegFace: Face Segmentation of Long-Tail Classes》论文分享(侵删)

author{Kartik Narayan and Vibashan VS and Vishal M. Patel} 原文链接&#xff1a;[2412.08647] SegFace: Face Segmentation of Long-Tail Classes 摘要 人脸解析是指将人脸语义分割为眼睛、鼻子、头发等关键面部区域。它是各种高级应用程序的先决条件&#xff0c;包括人脸…

基于POI的Excel下拉框自动搜索,包括数据验证的单列删除

目录 目标 例子 1.搜索下拉框页 2.数据源页 3.效果 代码以及注意事项 1.代码 2.注意事项 1.基于Excel的话&#xff0c;相当于加入了一个【数据验证】 2.代码中的一些方法说明 目标 期望在Excel利用代码创建具备自动搜索功能的下拉框 例子 1.搜索下拉框页 2.数据源…

UWB人员定位:精准、高效、安全的智能管理解决方案

在现代企业管理、工业生产、安全监测等领域&#xff0c;UWB&#xff08;超宽带&#xff09;人员定位系统正逐步成为高精度定位技术的首选。相较于传统的GPS、Wi-Fi、蓝牙等定位方式&#xff0c;UWB具备厘米级高精度、低延迟、高安全性、抗干扰强等突出优势&#xff0c;能够实现…

如何在Apple不再支持的MacOS上安装Homebrew

手头有一台2012年产的Macbook Pro&#xff0c;系统版本停留在了10.15.7&#xff08;2020年9月24日发布的&#xff09;。MacOS 11及后续的版本都无法安装到这台老旧的电脑上。想通过pkg安装Homebrew&#xff0c;发现Homebrew releases里最新的pkg安装包不支持MacOS 10.15.7&…

【线性代数的理解】 为什么说线性代数研究的是空间变换?旋转矩阵坐标转换矩阵

注&#xff1a; 在线性代数中 &#xff0c;常常不把点看成是点&#xff0c;而是看成是一个由原点出发的向量。所以&#xff0c;点的坐标相当于是向量的坐标。正方形&#xff08;图中灰色图形&#xff09;可以看成是由一大堆向量组成的图形&#xff0c;对这一堆向量进行A变换&a…

Cursor+pycharm接入Codeuim(免费版),Tab自动补全功能平替

如题&#xff0c;笔者在Cursor中使用pycharm写python程序&#xff0c;试用期到了Tab自动补全功能就不能用了&#xff0c;安装Codeuim插件可以代替这个功能。步骤如下&#xff1a; 1. 在应用商店中搜索扩展Codeuim&#xff0c;下载安装 2. 安装完成后左下角会弹出提示框&#x…

STM32学习——RTC实时时钟(BKP与RTC外设)

RTC实时时钟 RTC实时时钟 想记录或读取日期和事件&#xff0c;就可以通过操作RTC实现 RTC与BKP和PWR经常同时出现 一般情况下&#xff0c;VBTA是电池供电口&#xff0c;需要接备用电池 在BKP备份寄存器写入两个数据&#xff0c;然后再读出之后显示&#xff0c;BKP的数据&a…

C# Unity 唐老狮 No.2 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体…

Denoising Diffusion Implicit Models (DDIM)

因为扩散模型的正向过程可以实现跳步&#xff0c;其马尔科夫性并不重要&#xff0c;因此DDIM尝试在反向过程中也舍弃马尔科夫性的约束。在引入一个可控参数 σ t \sigma_t σt​后&#xff0c;反向过程的迭代被整理为预测 x 0 x_0 x0​后重新进行正向扩散的过程&#xff0c;扩散…

LearnOpenGL之Shader编程用算法绘画

———————————————————— 前序 ——————————————————— AndroidLearnOpenGL是本博主自己实现的LearnOpenGL练习集合&#xff1a; Github地址&#xff1a;GitHub - wangyongyao1989/AndroidLearnOpenGL: OpenGL基础及运用 系列文章&#xff…

第5章_管理策略

管理策略 如前所述&#xff0c;策略定义了在授予对对象的访问权限之前必须满足的条件。 单击 Policy &#xff08;策略&#xff09; 选项卡可查看与资源服务器关联的所有策略。 在此选项卡上&#xff0c;您可以查看以前创建的策略列表&#xff0c;以及创建和编辑策略。 要创…

Chromium_src源码

Chromium_src源码 码云上有一个OpenHarmony-TPC/chromium_src项目&#xff0c;目前已经停止维护了&#xff0c;迁移到GitCode上了&#xff0c;源代码项目地址为&#xff1a;openharmony-tpc/chromium_chrome 特此记录一下老的项目的相关软件架构 Chromium 简介 软件架构 软…

Android ObjectBox数据库使用与集成指南

ObjectBox其核心特点ObjectBox与 SQLite 和 Realm 的对比Android集成ObjectBox创建ObjectBox实体对象创建ObjectBox操作管理类OBManager在Application初始化ObjectBox插入或更新数据查询数据统计数据分页数据查询删除数据总结今天分享一套Android另一个数据库ObjectBox。Object…

013作用域

一、基本概念 C语言中&#xff0c;标识符都有一定的可见范围&#xff0c;这些可见范围保证了标识符只能在一个有限的区域内使用&#xff0c;这个可见范围&#xff0c;被称为作用域&#xff08;scope&#xff09;。 软件开发中&#xff0c;尽量缩小标识符的作用域是一项基本原…

AH表情捕捉设备:虚拟人动态表情捕捉

在虚拟人应用里&#xff0c;除了关注虚拟人能否展现流畅的肢体动作&#xff0c;其表情是否自然流畅同样关键。虚拟人作为新兴技术产物&#xff0c;广泛应用于娱乐直播、影视动画等领域。自然的表情能让虚拟人更具亲和力与真实感&#xff0c;大幅提升用户体验。 而广州虚拟动力…