我在3D空间中有3个点我知道确切的位置.假设他们是:(x0,y0,z0),(x1,y1,z1)和(x2,y2,z2).
此外,我有一个相机正在查看这3个点,我知道这三个点在相机视图平面上的2D位置.因此,举例来说,(x0,y0,z0)将是(x0',y0'),(x1,y1,z1)将来(x1',y1')也(x2,y2,z2)将是(x2',y2')从相机的角度来看.
找到将这些3D点投影到摄像机视图平面上的2D点的投影矩阵的最简单方法是什么.我们对相机位置一无所知.
我有这张图片:http://imgur.com/99tSz.png.英国地图(不包括南爱尔兰).
我已经成功地获得了经度和经度,并通过获取英国最左边的经度和最右经度并使用它们来确定将点放在地图上的位置,将其绘制到此地图上.
这是代码(用于Processing.js但可以用作js或任何东西):
// Size of the map
int width = 538;
int height = 811;
// X and Y boundaries
float westLong = -8.166667;
float eastLong = 1.762833;
float northLat = 58.666667;
float southLat = 49.95;
void drawPoint(float latitude, float longitude){
fill(#000000);
x = width * ((westLong-longitude)/(westLong-eastLong));
y = (height * ((northLat-latitude)/(northLat-southLat)));
console.log(x + ", " + y);
ellipseMode(RADIUS);
ellipse(x, y, 2, 2);
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法对这些值实施墨卡托投影.这些图很合理,但它们不够好,这个投影可以解决它.
我无法弄清楚该怎么做.我找到的所有例子都在解释如何为整个世界做这件事.这是一个很好的示例资源,解释了如何实现投影,但我无法让它工作.
另一个资源是英国的极端点,我获得了英国各地边界框的纬度和经度值.他们也在这里:
northLat = …Run Code Online (Sandbox Code Playgroud) 我有一系列横跨经度= 0线的纬度/经度点.我想使用matplotlib Axes类来绘制这些,它们"包裹"水平尺寸,这样当朝向l = 360时,l = 1处的点被绘制为等于l = 361.理想情况下,我也喜欢定义平移/缩放动作的东西,所以我可以交互使用绘图.
我知道可以在matplotlib中定义自定义投影,但我还没有找到实现所有这些功能的圆柱投影的等价物.我宁愿不用basemap.有谁知道这样的事情是否存在?
我希望确定3D空间(x,y,z)中点的2D屏幕坐标(x,y).
我希望投射的点是由GPS坐标和海拔高度表示的真实世界点.
例如:Point(Lat:49.291882,Long:-123.131676,Height:14m)
摄像机位置和高度也可以确定为ax,y,z点.我还有相机的标题(罗盘度),它的倾斜度(地平线上方/下方)和滚动(绕z轴).
我没有3D编程的经验,因此,我已经阅读了透视投影的主题,并了解到它需要矩阵,变换等知识 - 所有这些都使我目前感到困惑.
有人告诉我,OpenGL可能用于构建真实世界点的3D模型,设置相机方向并检索3D点的2D坐标.
但是,我不确定使用OpenGL是否是解决此问题的最佳解决方案,即使它是我不知道如何创建模型,设置相机等
有人可以提出解决问题的最佳方法吗?如果OpenGL是一个可行的解决方案,我必须使用OpenGL ES,如果这有任何区别.哦,无论我选择哪种解决方案,都必须快速执行.
谢谢你的帮助
我有一个3D场景和一个使用gluPerspective定义的相机.我有一个固定的FOV,我知道任何几何体与相机的最小距离(它是第一人称视角,因此这是从视点到角色碰撞体积的最小距离).
无论玩家如何移动和观看,我怎样才能选择最近的剪裁平面(最佳深度缓冲分辨率),不会造成任何剪裁?
这些距离不是简单相等,因为近平面的角离原点比中心更远.
我在互联网上搜索了很多资源很多天但我无法解决问题.
我有一个项目,我应该检测一个圆形物体在飞机上的位置.因为在一个平面上,我所需要的只是x和y位置(不是z)为此我选择了图像处理.相机(单视图,非立体)位置和方向相对于平面上的参考坐标系固定并且是已知的
我已经使用opencv检测到圆心的图像像素坐标.我现在需要的只是改变坐标.到现实世界.
http://www.packtpub.com/article/opencv-estimating-projective-relations-images 在本网站和其他网站中,同形转换命名为:
p = C [R | T] P; 其中P是真实世界坐标,p是像素坐标(在单应坐标系中).C是表示内在参数的相机矩阵,R是旋转矩阵,T是平移矩阵.我已经按照在opencv上校准相机的教程(应用了cameraCalibration源文件),我有9个精美的chessbordimages,作为输出我有内在的相机矩阵,以及每个图像的平移和旋转参数.
我有3x3内在相机矩阵(焦距和中心像素),以及3x4外在矩阵[R | T],其中R是左3x3,T是3x1.根据p = C [R | T] P公式,我假设通过将这些参数矩阵乘以P(世界),我们得到p(像素).但我需要的是将p(像素)坐标投影到地平面上的P(世界坐标).
我正在学习电气和电子工程.我没有进行图像处理或高级线性代数课程.我记得从线性代数课程中我们可以操纵变换为P = [R | T] -1*C-1*p.然而,这是在欧几里得协调系统中.我不知道在hompographic中这样的事情是可能的.而且3x4 [R | T] Vector不可逆.而且我不知道这是正确的方法.
内在和外在参数是已知的,我需要的是地平面上的真实世界项目坐标.由于点在一个平面上,坐标将是2个维度(深度并不重要,作为与单个视图几何体相对的参数).相机是固定的(位置,方向).如何在捕获的图像上找到该点的真实世界坐标通过相机(单一视图)?
编辑 我一直在阅读Gary Bradski和Adrian Kaehler的"学习opencv".在校准 - > Homography部分的第386页,它写成:q = sMWQ其中M是相机固有矩阵,W是3x4 [R | T],S是一个"高达"比例因子我假设与单应性概念相关,我不知道清楚.q是像素库,Q是真正的coord.据说为了获得在图像平面上检测到的物体的坐标的真实世界坐标(在棋盘平面上); Z = 0然后W = 0中的第三列(假设轴旋转),修剪这些不必要的部分; W是3x3矩阵.H = MW是3x3单应矩阵.现在我们可以反转单应矩阵并且左乘q得到Q = [XY 1],其中Z coord被修剪.
我应用了上面提到的算法.我得到了一些不能在图像角落之间的结果(图像平面与摄像机平面平行,距摄像机约30厘米,我得到的结果就像3000)(棋盘方形尺寸以毫米为单位输入,所以我假设输出的真实世界坐标再次以毫米为单位).无论如何,我还在努力.顺便说一下,结果非常非常大,但我将Q中的所有值除以Q的第三个分量得到(X,Y,1)
最终编辑
我无法完成相机校准方法.无论如何,我应该从透视投影和变换开始.这样,我通过图像平面和物理平面之间的透视变换(通过两个平面上的4对相应的共面点生成变换)进行了非常好的估计.然后简单地在图像像素点上应用变换.
我正在研究计算机视觉问题,需要使用校准相机渲染3d模型.我正在编写一个将校准后的相机矩阵分解为模型视图矩阵和投影矩阵的函数,但是我在opengl中遇到了一个无法解释的有趣现象(至少在我看来).
简短的描述是否定投影矩阵导致没有渲染(至少在我的经验中).我希望将投影矩阵乘以任何标量都没有效果,因为它会转换不受缩放影响的齐次坐标.
以下是我的理由,为什么我发现这是出乎意料的; 也许有人可以指出我的推理存在缺陷的地方.
想象一下以下透视投影矩阵,它给出了正确的结果:
[ a b c 0 ]
P = [ 0 d e 0 ]
[ 0 0 f g ]
[ 0 0 h 0 ]
Run Code Online (Sandbox Code Playgroud)
乘以相机坐标得到均匀的剪辑坐标:
[x_c] [ a b c 0 ] [X_e]
[y_c] = [ 0 d e 0 ] * [Y_e]
[z_c] [ 0 0 f g ] [Z_e]
[w_c] [ 0 0 h 0 ] [W_e]
Run Code Online (Sandbox Code Playgroud)
最后,为了得到规范化的设备坐标,我们将x_c,y_c和z_c除以w_c:
[x_n] [x_c/w_c]
[y_n] = [y_c/w_c]
[z_n] [z_c/w_c]
Run Code Online (Sandbox Code Playgroud)
现在,如果我们否定P,则应该否定得到的剪辑坐标,但由于它们是齐次坐标,因此乘以任何标量(例如-1)不应对得到的标准化设备坐标产生任何影响.但是,在openGl中,否定P会导致无法渲染.我可以将P乘以任何非负标量并获得完全相同的渲染结果,但只要乘以负标量,就不会渲染.这里发生了什么??
谢谢!
我正在使用最新版本的Orchard,并创建了三篇文章的投影小部件.我希望在彼此之后直接以源语言显示它们:
<article>content</article>
<article>content</article>
<article>content</article>
Run Code Online (Sandbox Code Playgroud)
即不包含在列表中
<ul>
<li>
<article>content</article>
</li>
<li>
<article>content</article>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
如何删除列表标签但保留文章?我不知道如何Model.List在ProjectionPart.cshtml中编辑,如果这甚至是正在编辑的正确文件!?
我真的很感激任何人都能给我的帮助吗?
在查询mongo数据库时,排除文档中的几乎所有数据会有很多开销吗?
例如,在我只需要field1和field2的情况下,对于具有以下文档结构的集合:
{
"field1" : 1
"field2" : true
"field3" : ["big","array",...]
"field4" : ["another","big","array",...]
}
Run Code Online (Sandbox Code Playgroud)
我会从中受益更多:
注意:保存相同数据两次的低效率对我来说并不像我查询数据的效率那么重要
非常感谢!
这是我的目标:
{ "_id" : ObjectId("53fdcb6796cb9b9aa86f05b9"), "list" : [ "a", "b" ], "complist" : [ { "a" : "a", "b" : "b" }, { "a" : "c", "b" : "d" } ] }
Run Code Online (Sandbox Code Playgroud)
这就是我想要完成的事情:检查"list"是否包含某个元素,并在读取文档时从"complist"上的对象中仅获取字段"a",而不管这些值是什么.我正在构建一个论坛系统,这是将返回论坛详细信息的查询.我需要在知道用户是否在论坛的白名单中时阅读论坛信息.
有了查找,我可以使用查询
db.itens.find({},{list:{$elemMatch:{$in:["a"]}}})
Run Code Online (Sandbox Code Playgroud)
仅获取匹配特定值的第一个元素.这样我就可以检查返回的数组是否为空,我知道"list"是否包含我正在寻找的值.我无法在查询上执行此操作,因为我想要文档,无论它包含我在"list"值中寻找的值.我需要文档并知道"list"是否具有某个值.
使用聚合我可以使用查询
db.itens.aggregate({$project:{"complist.a":1}})
Run Code Online (Sandbox Code Playgroud)
只读取complist中包含的对象的字段"a".这将获得论坛的线程基本信息,我不想要线程的所有信息,只是一些事情.
但是当我尝试使用查询时
db.itens.aggregate({$project:{"complist.b":1,list:{$elemMatch:{$in:["a"]}}}})
Run Code Online (Sandbox Code Playgroud)
尝试做两件事,它会抛出一个错误,说操作符$ elemMatch无效.
我在这里用$ elemMatch做错了吗?有没有更好的方法来实现这一目标?
projection ×10
3d ×2
mongodb ×2
opengl ×2
2d ×1
geolocation ×1
geometry ×1
graphics ×1
java ×1
javascript ×1
list ×1
matplotlib ×1
matrix ×1
opencv ×1
orchardcms ×1
proj4js ×1
python ×1
webgl ×1
widget ×1