我必须变换并将等轴矩形图像重新映射到具有90°卷的另一个等矩形图像。变换并重新映射90°卷的等矩形图像
我用Pano2VR做了。
问题是我必须从服务器端以编程方式执行。所以我不能使用G.U.I.去做吧。
首先,我将我的研究导向imagemagick。我试过Fred ImageMagick scripts,但找不到任何人做我想做的事。此外,与Pano2VR相比,图像的处理时间显得非常长。
我指示我的调查OpenCV和libgnomonic。这是目前最有趣的方式。该库允许te用户转换投影(equirectangular为直线,反之亦然)或make equirectangular mapping transformation。我玩Norama-suite这包含一些脚本来处理图书馆。例如,我会将直线图像转换为等矩形图像,但是输出只是一个黑色背景图像(为什么?我没有找到答案)。
但是,这第二个链接可以解决我的问题。我有这样的形象:
,我想将它转化到该图像
嗯,我不舒服C. 在所有我想我应该用这两个文件:
- https://www.github.com/FoxelSA/libgnomonic/blob/master/src/gnomonic-transform.h
- https://www.github.com/FoxelSA/libgnomonic/blob/master/src/gnomonic-transform.c
但我不知道如何。最重要的是,我想了解。
我是否正确?第一张图像上应用了什么转换?有没有办法用python或bash脚本来做到这一点?
恩,谢谢你的帮忙。
** python中的C编辑换位** 下面的代码没有工作,返回和IndexError。 但是我试图抓住并通过例外,图像的第一个右侧部分似乎没有改变。
import math
from PIL import Image
img = Image.open("img1.jpg")
img = img.convert('RGB')
pixel = img.load()
width, height = img.size
img2 = img.copy()
for y in xrange(height):
for x in xrange(width):
xx = 2*(y+0.5)/width - 1.0
yy = 2*(y+0.5)/ height - 1.0
lng = math.pi * xx
lat = 0.5 * math.pi * yy
# NOTE! These axes are transposed because that's what the question is about
Z = math.cos(lat) * math.cos(lng) # normally X
Y = math.cos(lat) * math.sin(lng) # normally Y
X = -math.sin(lat) # normally -Z
D = math.sqrt(X*X+Y*Y)
lat = math.atan2(Z, D) # ? normally lat = math.asin(Z)
lng = math.atan2(Y, X)
#ix and iy must be integers
ix = int((0.5 * lng/math.pi + 0.5) * width - 0.5)
iy = int((lat/math.pi + 0.5) * height - 0.5)
#not sure of this part to remap the image
newpixel = pixel[ix, iy]
img2.putpixel([(x+width/4) % width, y], newpixel)
#I tries as mentionned in the following code to invert x and y in the two previous lines but the index error out of range comes back
img2.show()
非常感谢您的解释。那么,我会尝试在python模块中实现你的代码。但是,在C中结果应该更好更快。我可能会尝试使用Cython。 – pep
那么,我做到了,但结果很糟糕。我认为我的代码的最后一部分不好。 – pep
乍一看:您没有将模运算符'%'应用于'x'坐标。这意味着上一季度的x坐标超出范围。尝试使用'img2.putpixel([(x + width/4)%width,y],newpixel)''。 –