【发布时间】:2011-12-20 09:01:04
【问题描述】:
我有一个普通的位图,我想在圆柱体上进行投影。
这意味着,我想以某种方式转换图像,以便如果我打印它并环绕一个圆柱体并从某个位置拍摄它,生成的图像看起来就像原始图像。
我仍然对所有投影算法(通常与地球投影有关)感到迷茫。
所以我会很感激提示正确的算法可能是什么以及我可以使用哪些工具将其应用于我的图像。
【问题讨论】:
标签: algorithm image-processing projection
我有一个普通的位图,我想在圆柱体上进行投影。
这意味着,我想以某种方式转换图像,以便如果我打印它并环绕一个圆柱体并从某个位置拍摄它,生成的图像看起来就像原始图像。
我仍然对所有投影算法(通常与地球投影有关)感到迷茫。
所以我会很感激提示正确的算法可能是什么以及我可以使用哪些工具将其应用于我的图像。
【问题讨论】:
标签: algorithm image-processing projection
假设您有一个长度为 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,您需要将模数表示为正值)
如果你能将它应用到你的圆柱形图像上,你就会知道如何展开你的图片。
【讨论】: