使用鱼眼镜头或广角镜头取消照片的最简单方法是什么?我正在寻找一个参数很少的像素投影公式。相机和镜头参数将不知道,因此用户必须直观地更改参数。感谢
答案 0 :(得分:4)
有一篇好文章here为镜头失真提供了一些不错的数学模型。这至少是。我认为SDX2000在网格上走得很好。我认为解决问题的最常见方法是将图像映射到网格,然后允许应用扭曲参数来产生枕形和桶形失真。以Lightroom或Photoshop中的镜头失真滤镜为例。
答案 1 :(得分:1)
ImageMagick有一个很好的讨论。他们给出了他们使用的等式。
请注意,这不会像Photoshop CS6一样纠正失真(即您无法从Adobe镜头配置文件中获取系数,只需将它们放入其中)。
paper that Kamil points to似乎是一个非常深入的外观。
答案 2 :(得分:-1)
我认为你可以使用透镜方程来做到这一点。
1 / f = 1 / object_distance + 1 / image_distance
其中f是焦距(用户输入)。使用放大方程,可以使用图像距离和物距的比例来适当地调整图像的大小。为了得到你真正想要的东西,你需要重新调整方程式:
1 / object_distance = 1 / f - 1 / image_distance
然后使用放大公式使用对象高度调整大小:
-image_distance / object_distance = image_height / object_height
您可能已经注意到,您需要知道每个像素远离相机的距离。否则,它根本不起作用。您可以向用户询问该信息,但这似乎不太可能,也很痛苦。我不知道有任何其他方法可以做到这一点 - 镜头失真是一种3D效果,而且你会获得2D信息。充其量你可以尝试二维地纠正它,但这将是困难的,并且将无法正常工作。
答案 3 :(得分:-1)
如果可能,您应该要求用户使用相同的相机拍摄参考图像(例如国际象棋棋盘)的照片,然后使用此信息分析镜头特征。然后,此信息可用于取消扭曲同一相机拍摄的其他照片。
为了实现,您可以使用神经网络/遗传算法。