问题 将平面投影到圆柱体上


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

这意味着,我想以某种方式转换图像,这样如果我打印它并环绕柱状圆柱体并从某个位置拍摄它,则生成的图像看起来像原始图像。

我仍然迷失在所有投影算法中(通常与地球投影有关)。

所以我要感谢提示正确的算法是什么以及我可以使用哪些工具将它应用到我的图像中。


9096
2017-11-02 14: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'?

我将图像的每一行都投影成一个圆圈。参数   对于[0,2PI]中的t,圆的方程是(Rcos(t),Rsin(t))   参数方程将一个段([0,2PI]中的t)映射到一个圆。那是   正是我们要做的。

然后,如果x描述长度为L的行,则x *(2pi)/ L描述一行   长度为2pi,我可以使用参数方程来映射每个点   这条线到一个圆圈。

希望能帮助到你


前一个功能使功能“按”一个平面对着一个圆柱体。

这是一个双射,因此从圆柱体中的给定点可以轻松获得原始图像。

圆柱体的(x,y,z)

图像中的'(x',z'):

z'= z *(H / H')

和x'= L /(2Pi)* {arccos(x / R)*(sign(y))(mod(2Pi))}

(这是一个非常丑陋的公式,但就是这样:D,你需要将模数表示为正值)

如果您可以将其应用于圆柱形图像,则可以获得如何展开图片的方法。


13
2017-11-02 15:36



等等,z'是z *(H'/ H)还是z *(L'/ L)?你引用两者 - BlackBear
@BlackBear,我的坏...更新了它。谢谢 - Ricky Bobby
谢谢!好的,我有一个3d点的集合。但我想做一个图像转换 - 所以我仍然需要它们从圆柱体中展开,以便我有一个新的普通图像。那么在库中已经实现的任务没有“开箱即用”的算法? - tautologe
@tautologe我不知道任何实现这种转换的库。但是这种转换非常简单,所以我想如果你能找到一个用于图像处理的库,你就可以轻松实现这种转换。 - Ricky Bobby
好吧,我仍然要从圆筒上解开图像。我怎么做? (我的几何课程已经在几年前......) - tautologe


答案:


假设你有一个长度的矩形图像: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'?

我将图像的每一行都投影成一个圆圈。参数   对于[0,2PI]中的t,圆的方程是(Rcos(t),Rsin(t))   参数方程将一个段([0,2PI]中的t)映射到一个圆。那是   正是我们要做的。

然后,如果x描述长度为L的行,则x *(2pi)/ L描述一行   长度为2pi,我可以使用参数方程来映射每个点   这条线到一个圆圈。

希望能帮助到你


前一个功能使功能“按”一个平面对着一个圆柱体。

这是一个双射,因此从圆柱体中的给定点可以轻松获得原始图像。

圆柱体的(x,y,z)

图像中的'(x',z'):

z'= z *(H / H')

和x'= L /(2Pi)* {arccos(x / R)*(sign(y))(mod(2Pi))}

(这是一个非常丑陋的公式,但就是这样:D,你需要将模数表示为正值)

如果您可以将其应用于圆柱形图像,则可以获得如何展开图片的方法。


13
2017-11-02 15:36



等等,z'是z *(H'/ H)还是z *(L'/ L)?你引用两者 - BlackBear
@BlackBear,我的坏...更新了它。谢谢 - Ricky Bobby
谢谢!好的,我有一个3d点的集合。但我想做一个图像转换 - 所以我仍然需要它们从圆柱体中展开,以便我有一个新的普通图像。那么在库中已经实现的任务没有“开箱即用”的算法? - tautologe
@tautologe我不知道任何实现这种转换的库。但是这种转换非常简单,所以我想如果你能找到一个用于图像处理的库,你就可以轻松实现这种转换。 - Ricky Bobby
好吧,我仍然要从圆筒上解开图像。我怎么做? (我的几何课程已经在几年前......) - tautologe