我正在尝试拼接由相机拍摄的图像,该相机在已知的螺旋轨迹上移动,具有已知的步长和直轴。照相机拍摄它在其中移动的圆柱体的内表面的照片。螺旋线和圆柱具有相同的轴。
我的目标是:使用相机捕捉到的图片,以圆柱面的形式重建圆柱体的内表面,然后将此表面展平,以可视化展开的圆柱体(就像一张纸,你将其 Package 成圆柱体,然后展开,恢复为矩形)。
应用示例:照相机安装在具有螺纹中心的装置上,并且该装置在螺纹轴上移动。该系统与管道同轴,通过图像,我们希望看到管道的圆柱图,并对其进行检查以检查是否存在缺陷。
我已经研究了标准的全景图像拼接算法,但我不能定义这种应用所必需的管道和仪器。
我认为可以采取以下步骤:
1.校准摄像机(在我的例子中,我有一个水平FoV = 132°,垂直FoV = 65°的摄像机,所以我使用OpenCV的鱼眼摄像机校准,并获得了良好的不失真结果)。
1.从视频流中选择初始关键帧。
1.从视频流中选择一个新的关键帧,使其与上一个关键帧的重叠大于50%。
1.提取当前关键帧和上一个关键帧中的特征。
1.匹配相邻关键帧之间的特征。
1.将关键帧缝合在一起。
1.将拼接图像投影到已知半径的圆柱贴图上。
1.迭代点3. 7.更新贴图(需要使贴图沿着圆柱轴“生长”)。
1.停止贴图生成,将圆柱体展平为矩形。
我不知道我的流水线是否正确,最重要的是,我不知道如何实现步骤7和8(使Map“增长”)。我想使用Python和OpenCV。
此外,我认为,如果旋转编码器可用,则即使没有特征匹配也可以执行图像拼接;通过知道两个帧的相对变换,就可以确定两个帧之间的距离。事实上,在螺旋路径上移动意味着只有一个自由度。
谨致问候
2条答案
按热度按时间c3frrgcw1#
有趣的项目
对于使用的方向的上下文,我假设你的圆柱体直立,你从下到上,从左到右扫描。所以你会把图片水平地拼接在一起,并在宽度上增加你的图片(在高度上增加一点)。我看不出有什么大的区别,在增长的形象垂直,当你已经设法增长你的形象水平,但也许我错过了一些东西。对于圆柱体生长部分(步骤7、8),我建议也将其生长为矩形:选择一些功能,从顶端的开始,你的缝合图像,并不断寻找这些功能的底端,你目前的缝合位置。如果你匹配这些特征,你就找到了你的句号
2*pi*R
。所以你在那里垂直剪切你的图像,然后用特征匹配将第一部分缝合到第二部分的底部,然后继续水平缝合。重复一遍。1wnzp6jl2#
第7点是唯一不平凡的步骤。
它可以归结为索引和投影操作:您将圆柱体上的位置Map到拍摄其图像的摄像机(或多个摄像机),并由此Map到该位置的图像。其思想是将圆柱体镶嵌成近似其表面的平面四边形(rilateral)。流苏的下限是一个小到1像素的四边形,但为了提高效率,您通常希望选择更大的。然后,迭代流苏的四边形,并将每个四边形Map(索引)到观察四边形的一组摄影机图像中。要限制失真,通常需要选择焦轴与四边形的法向量紧密对齐的相机-在限制范围内,选择轴与四边形最平行的相机。然后可以将四边形的角投影到每个选定的摄影机中,从而获得四边形的纹理坐标。
如果只使用一个摄影机,则可以将这些坐标作为四边形的纹理坐标直接传递给渲染器,这样就完成了:渲染所有四边形(例如,在OpenGL中),每个四边形都有自己的图像。如果你想做一些混合,最好分两步完成:首先将四边形投影到所有相机中的投影校正为公共正方形(四边形本身,表示为具有所选分辨率的像素正方形),然后应用您最喜欢的混合算法(例如,多波段),以获得最终纹理的四。