- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在相机成像中,点坐标有多个术语。
世界坐标:[X,Y,Z]物理单位
图像坐标:[u,v]以像素为单位。
通过添加1可以使这些坐标变成齐次坐标吗?
有时在书和纸上用[x,y w]表示。什么时候使用w?什么时候使用1?
在函数initUndistortRectifyMap中,http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#void%20initUndistortRectifyMap(InputArray%20cameraMatrix,%20InputArray%20distCoeffs,%20InputArray%20R,%20InputArray%20newCameraMatrix,%20Size%20size,%20int%20m1type,%20OutputArray%20map1,%20OutputArray%20map2)
应用以下过程
坐标[x y 1]有一个术语吗?
我不明白为什么R可以应用于[x y 1]?在我看来,R是3D转换。 [x y 1]是一个2d点还是一个3d点?
[u v]-> [x y]-> [x y 1]-> [X Y W]-> [x'y']
坐标根据上述链进行处理。它的原理是什么?
最佳答案
在二维透视几何中,有两个主要的坐标集;笛卡尔坐标(x,y)
和homogeneous coordinates,由三重(x,y,z)
表示。这个三元组可能令人困惑--这不是笛卡尔(x,y,z)
这样的三个维度的要点。因此,一些作者对同质点使用了不同的表示法,例如[x,y,z]
或(x:y:z)
,由于稍后将要讨论的原因,这种表示法更有意义。
第三个坐标仅出于一个目的而存在,也就是将一些点添加到域中,即无穷大的点。对于double (x,y)
,没有办法表示无穷大,至少不能用数字表示,而且不能用我们可以轻松操纵的方式来表示。但这对于计算机图形学来说是一个问题,因为平行线当然非常普遍,并且欧几里得几何学的一个公理是平行线在无穷远处相交。平行线很重要,因为计算机图形学中使用的转换是行保留。当我们用单应性或仿射变换使点变形时,我们以将线映射到其他线的方式移动像素。如果这些直线恰好是平行的,就像在欧几里得变换或仿射变换中那样,则我们使用的坐标系必须能够表示出来。
因此,我们仅使用齐次坐标(x,y,z)
来包括由三重(x,y,0)
表示的无穷大点。而且由于我们可以为每个笛卡尔对在该位置放置一个零,这就好比我们在每个方向上都有一个无穷大的点(该方向由与该点的 Angular 指定)。
但是,既然我们有了第三个值,该值也可以是除零以外的任何其他数字,那么所有这些附加点是什么? (x,y,2)
和(x,y,3)
等有什么区别?如果(x,y,2)
和(x,y,3)
点不是无限点,则它们最好等于其他一些笛卡尔点。幸运的是,有一种非常简单的方法可以很好地将所有这些齐次三元组映射到笛卡尔对:只需除以第三个坐标即可。然后(x,y,3)
映射回笛卡尔(x/3, y/3)
,并且映射(x,y,0)
到笛卡尔坐标是不确定的-这是完美的,因为在笛卡尔坐标中不存在无穷大点。
由于比例因子的存在,这意味着可以用无限多种方式表示同构坐标。您可以在齐次坐标中将笛卡尔点(x,y)
映射到(x,y,1)
,但也可以将(x,y)
映射到(2x, 2y, 2)
。请注意,如果我们将第三个坐标除以返回到笛卡尔坐标,则会以相同的起点结束。通常,当您乘以任何非零标量时,这都是正确的。因此,想法是笛卡尔坐标系由一对值唯一地表示,而齐次坐标系可以用无数种方式表示。这就是为什么有些作者使用[x,y,z]
或(x:y:z)
的原因。方括号通常在数学中用于定义等价关系,对于齐次坐标,[x,y,z]~[sx,sy,sz]
表示非零s
。同样,:
通常用作比率,因此三个点的比率将等于任何标量s
乘以它们的比率。因此,每当您要从齐次坐标转换为笛卡尔坐标时,只要将最后一个数字除以比例因子就可以了,然后除掉(x,y)
值即可。例如,请参阅我的答案here。
因此,进入齐次坐标的简单方法是添加1,但实际上可以添加1,然后乘以任何标量。你什么都不会改变。您可以将(x,y)
映射到(5x,5y,5)
,应用转换(sx',sy',s) = H * (5x,5y,5)
,然后以相同的方式获取笛卡尔点作为(sx',sy')/s = (x',y')
。
关于opencv - 通过在相机成像中将图像坐标附加1来表示均质坐标吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44872453/
这个问题在这里已经有了答案: How to initialize var? (11 个答案) 关闭 8 年前。 我想给一个变量赋初值 null,并在下一个 if-else block 中赋值,但是编
我正在使用 TypeScript 3.8 编写 JS 和 TS 混合的代码。我写了以下行: export * as Easing from './easing'; 应该是 fair game在 Typ
我需要将 R 代码中的“/”更改为“\”。我有这样的事情: tmp <- paste(getwd(),"tmp.xls",sep="/") 所以我的 tmp是 c:/Study/tmp.xls 我希望
我有个问题。例如我有这个: id truth count 1 1 1 2 1 2 3 0 0 4 1 1 5 1 2 6 1
我正在尝试使用“IN”和“=”来查找一些 bean。我目前正在使用此代码: $ids = array(1,2,3,4); $user = 1; $things = R::find( 'thing'
是否可以在 Xcode 中部署到其他人的手机上?我没有 iPhone,但我想测试我在 friend 手机上制作的应用程序。在我支付 99 美元之前,我想确保这不会造成麻烦。 谢谢。 最佳答案 不会有任
我试图得到一个非常大的数字(超过 unsigned long long int )。所以我把它作为一个字符串,然后一个数字一个数字地转换成整数并使用它。 #include #include int
我在 Rust 中有 C 语言库的绑定(bind),但它们并不完整。 在 C 代码中,我定义了一个简化的宏,如下所示: #define MY_MACROS1(PTR) (((my_struct1
我正在努力解决这个问题。 http://jsfiddle.net/yhcqfy44/ 动画应该自动相对于 滚动到顶部每次出现滚动条时的高度。 我已经写了这个,但没有运气: var hheight =
我正在处理一个将数字作为字符串返回的 JSON API。例如 "12" ,但是,该字段值也可以是非数字的,例如:"-" . 我已将 JSON 数据解析为映射,我想将此字段提取为 elixir 中的整数
我正在尝试编写一个类,将.wav文件转换为.aiff文件作为项目的一部分。 我遇到了几个库Alvas.Audio(http://alvas.net/alvas.audio,overview.aspx)
我想在 Lucene 中将像“New York”这样的“复合词”索引为单个术语,而不是像“new”、“york”那样。这样,如果有人搜索“new place”,则包含“new york”的文档将不会匹
我希望这个解释能让我更好地了解使用宏的优点。 最佳答案 在函数中,所有参数在调用之前都会被评估。 这意味着 or 作为函数不能是惰性的,而宏可以将 or 重写为 if 语句,该语句仅在以下情况下计算分
我有一些看起来像这样的 XML foo ]]> (注意 > 登录 "> foo")和 XSLT 样式表 当我运行xsltproc stylesheet.xs
当我尝试将 Any 转换为 List 时,如下面的示例所示,我得到“Unchecked cast: Any!”到列表'警告。有没有解决此类问题的方法? val x: List = objectOfTy
我正在使用 Python 开发一个简单的爬虫。目的是创建一个 sitemap.xml。(你可以在这里找到真正的 alpha 版本:http://code.google.com/p/sitemappy/
我想知道在 VBScript 中是否可以在多行中中断 If 语句。喜欢: If (UCase(Trim(objSheet.Cells(i, a).Value)) = "YES") Or _ (UCas
for (String item : someList) { System.out.println(item); } 使用“do while”是否等效? 谢谢。 最佳答案 如果列表为空,f
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Split string with delimiters in C 在 C 中将“,”分隔的列表拆分为数组的最佳方法
我有一个如下所示的字符数组: [0, 10, 20, 30, 670] 如何将此字符串转换为整数数组? 这是我的数组 int i=0; size_t dim = 1; char* array = (c
我是一名优秀的程序员,十分优秀!