我看过应用程序,想知道如何以编程方式拍摄图像。定义它需要如何转换,以便它看起来与相机平行,而不是倾斜透视。
然后合并多张照片以创建 pdf 文件。例如这个应用程序就是这样做的:
我不会用书籍来做这些琐碎的事情,所以很抱歉我不能推荐任何书籍(尤其是英文的)。你需要做的是这样的:
- 输入图像
-
找到主要轮廓
理想情况下整个网格,但即使是外部轮廓也足够了(如果不存在网格)。您需要将轮廓划分为水平(红色)和垂直(绿色)曲线(或点集)。
-
通过 4 个“等距”点对轮廓曲线进行采样
由于图像扭曲(不仅仅是旋转),那么我们至少需要使用双三次插值。为此,我们每个补丁需要 16 点 (Aqua)。
-
添加镜像点以覆盖整个网格
图像上的镜像(黄色)点仅适用于水平轮廓,您也应该对垂直轮廓执行此操作(不适合我在图像中,并且不想为此放大分辨率)以及角点,因此您得到6x6
控制点。镜子可以线性完成(就像我做的那样)。
现在转换是这样完成的:
- 处理所有像素
dst(x0,y0)
目标图像的
-
Handle x,y
作为三次插值的参数
if xs,ys
是目标图像分辨率:
u=(3.0*x)/xs
v=(3.0*y)/ys
现在通常对参数进行三次插值t=<0.0,1.0)
so
if u=<0.0,1.0>
use t=u
和控制点0,1,2,3
.
if u=<1.0,2.0)
use t=u-1.0
和控制点1,2,3,4
if u=<2.0,3.0>
use t=u-2.0
和控制点2,3,4,5
垂直轮廓也是如此v
。计算xi,yi
作为双三次插值(u,v)
。并复制像素:
dst(x,y)=src(xi,yi);
这只是最近邻,但您也可以使用双线性...作为三次曲线,我会使用它多项式 https://stackoverflow.com/a/22582447/2521214.
双三次插值背后的想法很简单。计算参数对应的点u
4 个水平轮廓上。这将为您提供垂直方向上最终三次插值的 4 个控制点,v
作为参数。生成的坐标是您的源像素位置。
欲了解更多信息,请参阅:
- 如何产生多点线性插补? https://stackoverflow.com/a/30438865/2521214
- 双三次插值 https://en.wikipedia.org/wiki/Bicubic_interpolation
- OpenCV 鸟瞰图,不丢失数据 https://stackoverflow.com/a/39316776/2521214
如果您没有网格,请使用任何可以用作网格的信息。例如,文本行可以被视为此轮廓......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)