【问题标题】:Projection of a plane onto a cylinder平面到圆柱体上的投影
【发布时间】:2011-12-20 09:01:04
【问题描述】:

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

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

我仍然对所有投影算法(通常与地球投影有关)感到迷茫。

所以我会很感激提示正确的算法可能是什么以及我可以使用哪些工具将其应用于我的图像。

【问题讨论】:

    标签: algorithm image-processing projection


    【解决方案1】:

    假设您有一个长度为 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)) 对于 [0,2PI] 中的 t, 参数方程将一个段([0,2PI] 中的 t)映射到一个圆。那是 正是我们想要做的。

    那么如果 x 描述了一条长度为 L 的线,那么 x*(2pi)/L 描述了一条长度为 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)?你引用两个
    • 谢谢!好的,那么我有一个 3d 点的集合。但我想做一个图像转换——所以我仍然需要将它们从圆柱体中解开,这样我就有一个新的普通图像。那么对于已经在库中实现的任务,没有“开箱即用”的算法吗?
    • @tautologe 我不知道任何实现这种转换的库。但是这个转换非常简单,所以我想如果你能找到一个用于图像处理的库,你将很容易实现这个转换。
    • 好吧,我仍然需要从圆柱体中展开图像。我怎么做? (我的几何课是几年前的……)
    猜你喜欢
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多