平面在圆柱体上的投影

13

我有一个简单的位图,想在圆柱体上进行投影。

也就是说,我想以一种方式转换图片,以便如果我将其打印并围绕圆柱体包裹,并从特定位置进行拍摄,则生成的图像看起来像原始图像。

尽管相关的投影算法往往涉及地球投影,但我对所有这些投影算法感到相当茫然。

因此,我希望得到一些提示,告诉我哪种正确的算法以及可以用哪些工具将其应用于我的图像。

1个回答

16
假设您有一个长为L,高为H的矩形图像。
还有一个半径为R,高度为H'的圆柱体。
设A(x,z)是图片中的一个点,
那么A'(x',y',z')=(R * cos(x *(2Pi / L)),R * sin(x *(2Pi / L)),z *(H' / H))将是您的点A在圆柱体上的投影。
证明:
1. z'= z*(H'/H)
我首先将圆柱体适配到图像大小,因此乘以:(H'/H),并保持相同的z轴。(如果您画出来,您会立即看到)
2. x'和y'?
我将我的图像的每一行投影到一个圆中。圆的参数方程式是(Rcos(t),Rsin(t)),其中t在[0,2PI]之间,参数方程将线段(t在[0,2PI])映射到圆上。这正是我们要做的。
然后,如果x描述长度为L的线,则x *(2pi)/ L描述长度为2pi的线,并且我可以使用参数方程将该线的每个点映射到圆上。
希望有所帮助
前一个函数提供了将平面压缩到圆柱体上的功能。
这是一个双射,因此从圆柱体中给定的点,您可以轻松地获取原始图像。
圆柱体中的A(x,y,z)
图像中的A'(x',z'):
z'= z*(H/H')
x'= L/(2Pi)* { arccos(x/R) * (sign(y)) (mod(2Pi)) }
(这是一个相当丑陋的公式,但就是这样:D,您需要将模表达为正值)
如果您可以将其应用于您的圆柱形图像,则可以了解如何展开图片。

等一下,z' 是 z*(H'/H) 还是 z*(L'/L)?你引用了两个。 - BlackBear
谢谢!那么我有一组三维点的集合。但是我想进行图像转换 - 所以我仍然需要将它们从圆柱体中展开,以便我拥有一个新的平面图像。那么,库中已经实现了这个任务的“开箱即用”算法吗? - tautologe
@tautologe 我不知道有哪个库实现了这种转换。但是这种转换非常简单,所以我猜如果你能找到一个图像处理库,你就可以很容易地实现这种转换。 - Ricky Bobby
我仍然需要将图像从圆柱体上展开。我该怎么做?(我的几何课已经是几年前的事了...) - tautologe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接