书本变形模型上的透视投影问题总结
0.前言
目前已经进行到了逆映射阶段,写完了求解逆映射的代码之后发现,得出来的世界坐标点完全不对,但是对于一元三次方的求解以及逆映射的公式,经过验证推导并无问题。所以找寻问题的答案。
1 问题的可能性原因
1)逆映射的公式
经过验证,逆映射的公式没有问题,也就是一元三次方的求解也没有问题
2)计算dx,dy,dz,ox,oy,oz出错
也不是这个原因
3)计算的的x,y,z有错
因为在求逆映射的过程中,主要用到了dx,dy,dz的值,而这个值来自于Dw=R^T(u,v,f)^T,所以只能是u,v的问题。而u,v的话来自于世界坐标点经过透视投影而来,所以问题就出在世界坐标点上。
2 分析原因
仔细想想,从6月份开始到现在,做的最多的工作就是拟合书本模型,找到系数的范围,利用定积分求得对应的x值。
这些工作完成了之后,透视投影变换是之前的代码,没有做更多的修改。生成样本,训练网络也没有修改。
然后就是逆映射部分做了一元三次方的求解和确定方程组,如何求得世界坐标的工作。
也就是总共的工作分为了三部分:
1)求书本模型的系数范围以及世界坐标点
2)进行透视投影,生成样本,训练网络
3)测试网络,进行逆映射,反向求得世界坐标点
可以确定的是,后两部分工作没有问题。问题只能出现在第一部分。
回头想想,第一部分的工作最关键的是求得了系数的范围,通过大量的观察和总结。然后在这个基础上进行定积分求解x坐标,然后通过多项式公式(系数是在求得的系数范围中随机选取的)求得z的值。
那么其实,这个书本模型的系数范围是在什么情况下确定的呢?是在x位于0到1的范围下找到的规律。
所以呢,在求定积分的时候,x坐标也是从0到1的。在求得这样的x之后,利用多项式
Z_XFun = lambda x: a3*x**3 + a2*x**2 + a1*x**1 + a0
求得了z的值。
然后关键的一步来了,对x进行了-190到190的映射!
for x in posXLst: posX.append((x-0.5)*380)
在这个地方,问题就开始出现了。
并没有对相应的z进行映射。
也不知道当时怎么想的,满脑子都是符合的曲线。因为如果用映射后的x求得z的值的话,这个曲线完全不符合要求。
所以,当时找了一个符合曲线的z值,那就是用0到1的x求得的z值。
然后用这个z值与x值进行透视变换以及接下来的所有,到了逆映射阶段,我就发现不行了,出问题了!
3 解决方案
对z值也进行相应的映射。当然是用0到1的x计算得到的z值。
经过验证,这个曲线也符合要求。
那么,接下来要做的就是,用这个坐标,重新生成样本,进行逆映射,
可以先生成几个,然后测试一下逆映射的正确与否,如果任然不对,那就继续找寻问题所在!
4 验证是否解决
没有解决。问题的原因就是这个。求逆映射的公式中,带入了z=a3*x^3+a2*x^2+a1*x+a0,所以,x和z必须满足这个关系。然后对z进行和x一样的映射之后,x和z的关系并不成立,所以无法这么计算。
那到底该怎么做呢?
书本变形模型上的透视投影问题总结相关推荐
- CG笔记之一——透视投影
以前以为投影也就投影了,并不了解投影也可视作坐标变换,而且也是一个齐次坐标(Homogeneous Coordinate)系的坐标变换.因此书中的介绍一开始也不明白--它说透视投影会把直线映射成曲线, ...
- [补充]上集 Ch. 19-12(AJAX)在ListView / GridView的「样版」里面,放置 UpdatePanel
这是我的文章备份,有空请到我的网站走走, http://www.dotblogs.com.tw/mis2000lab/ 才能掌握我提供的第一手信息,谢谢您. http://www.dotblogs ...
- 基于MFC的透视投影算法实现
基于MFCMFCMFC的透视投影算法实现 本文是在上一篇博客基于MFC的平行投影算法实现的基础上实现透视投影中的一点透视. 两种方法实现 一.添加事件处理程序实现 设置IDIDID为ID_Yidian ...
- 《Real-Time Rendering 4th Edition》全文翻译 - 第15章 非真实感渲染(上)15.1 ~ 15.2
好久没更新了~ 由于对NPR方面比较感兴趣,所以任性了一下,先翻译了这一章~ 业余翻译,若有不周到之处,还请多多指教! 实时渲染(第四版)Real-Time Rendering (Fourth Edi ...
- python实现——在图像上放置虚拟物
前言:虚拟物是指一些3D模型,在图像上放置虚拟物就是以一张图片为背景,在把绘制的3D图放置在指定的位置上.除此之外还可以用于视频中放置虚拟物,实现动图放置3D模型.在这个例子当中,是通过照相机标定获得 ...
- 《Real-Time Rendering 4th Edition》全文翻译 - 第4章 变换(下)4.5 ~ 4.7
第四章终于结束了--接下来会休息一段时间,祝各位五一劳动节快乐! -- 想了想还是不休息了,继续继续!! 实时渲染(第四版)Real-Time Rendering (Fourth Edition) 第 ...
- 计算机图形学 实验三 相机、阴影、光照
文章目录 实验3.1 相机定位 一. 实验目的 二. 理论背景 1.各个坐标系 世界坐标系 相机坐标系 模型视图矩阵 ndc坐标系 2. 齐次坐标 3. OpenGL观察变换 三. 实验内容 Look ...
- 万字长文详解如何用Python玩转OpenGL | CSDN 博文精选
作者 | 天元浪子 来源 | CSDN博文精选 [编者按]OpenGL(开放式图形库),用于渲染 2D.3D 矢量图形的跨语言.跨平台的应用程序编程接口,C.C++.Python.Java等语言都能支 ...
- OpenGL基础知识
基本概念 透视(Perspective) 变换(Transformation) 投影矩阵(Projection Matrix):用于将3D坐标转换为2D屏幕坐标 光栅化(Rasterization): ...
最新文章
- 宏基因组公众号创立初衷及如何注册一个名字好记的公众号
- 找出重复的数java_剑指offer:1.找出数组中重复的数(java版)
- 更改记录表CDHDR和CDPOS
- myjdbc链接数据库.增删改查
- LeetCode 426. 将二叉搜索树转化为排序的双向链表(BST中序循环遍历)
- linux ntp软件下载,Linux_Linux时区同步问题(安装ntp软件过程),下载了一个windows的NTP服务程序 - phpStudy...
- ubuntu 下安装apache服务器
- 95-40-150-java.util.concurrent-ExecutorCompletionService
- webpack的一些plugin,怎么使用webpack对项目进行优化
- 漏洞奖励计划的五大成功要素问答实录
- 应用安全-XXE(XML外部实体注入)攻防整理
- ENVI5.3.1使用Landsat 8影像进行灰度分割(密度分割)
- 【图像去噪】基于matlab小波域双重局部维娜滤板图像去噪【含Matlab源码 1642期】
- 密码学 ZUC算法 Python实现
- 小米蓝牙耳机持续白灯_小米蓝牙耳机不能自动串联问题
- 常见阿拉伯数学符号以及拼写
- 视频文件服务器加速,百度云加速视频加速缓存设置教学
- 制造业信息化与现代企业管理
- Camtasia 2019卸载-无痕强力卸载
- pycharm的配置——字体