问题标签 [image-stitching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1076 浏览

opencv - 使用 openCV 进行成像拼接 - 最后阶段的难度

我正在使用 OpenCV 2.4 将视频转换为长(窄)马赛克。这是我第一次使用 OpenCV,但到目前为止,我已经成功地管理了以下内容:

  1. 从视频中获取帧。
  2. 使用 SIFT 获取关键点描述符。
  3. 使用 RANSAC 对异常值进行排序
  4. 求单应矩阵。

问题是当我将单应矩阵应用于其中一个帧/图像并尝试生成马赛克时。有时我收到一个错误,抱怨 warpPerspective() 的目标矩阵的大小太小。为了解决这个问题,我猜测尺寸过大以确保结果适合。但是,在将帧副本连接在一起后,我有一个大部分是黑色的巨大图像。所以我的问题是,我怎样才能以一种聪明的方式做到这一点?在将马赛克传递给 warpPerspective() 之前,如何计算我需要的目标矩阵的大小?我一直在尝试使用 ROI/Rect,但我不确定我在做什么。

如果您有任何建议,我将永远感激不尽。

0 投票
1 回答
96 浏览

parallel-processing - 如何在 CUDA 上运行多个 PFactory 实例?

我正在使用 PFactory(全景工厂)以批处理模式拼接图像。目前它使用多个线程在 CPU 上执行相同的操作。我想在我的 nvidia GPU(有 144 个内核)上运行它。我编写了一个内核程序,它调用 - system(pfactory) - 来执行 PFactory 的一个实例。但是当我使用 nvcc 编译它时,它会抛出一个错误 - 无法在设备中执行主机功能......”

有没有办法可以在 GPU 内核上运行该程序的多个实例?

0 投票
3 回答
3767 浏览

c++ - OpenCV 拼接

我迫切需要 opencv 拼接模块的帮助。我需要使用 opencv 中的“stitch”方法创建全景摄影。以下是我到目前为止的内容.. 但是当我运行程序时出现此错误:需要更多图像。是否有 OpenCV 专家可以帮助我解决此错误?

0 投票
1 回答
3061 浏览

c++ - OpenCv 中的stitcher() 错误

我有这个代码:

构建后我收到此错误:

错误 4 错误 C2248: 'cv::Stitcher::Stitcher' : 无法访问在类 'cv::Stitcher' C:\Users\Desktop\Projects\SamplePanorama - PanoramaStitch\SamplePanorama \StitchEngine.cpp 602 中声明的私有成员

我应该添加什么才能使stitch() 正常工作?

0 投票
2 回答
753 浏览

image - 360度无拼接视野?

是否有任何类型的相机只需一次拍摄即可获得 360 度视野,而无需使用任何拼接算法和后期处理步骤?或者,是否有可能拥有一台适当使用镜头和其他光学元件的相机?

0 投票
0 回答
676 浏览

opencv - 摄像机移动的 OpenCV 视频/图像拼接。SIFT 功能不够?

我正在尝试注册从具有连续相机移动的短片中提取的图像。我有检测 -> 匹配 -> 干净匹配 -> 单应性工作的“常规”管道。典型的 SIFT 示例(Basmati,Cookiebox ...)的结果非常有效。
我的图像
a) 不会产生很多特征
b) 非常接近相同
c) 可能包括大的相似区域(墙壁)

问题
1)您会建议一些不同的方法吗?特别是当可以假设连续运动并且图像非常相似时。
2)我如何实现初始猜测(身份,简单滚动......),以优化“findHomography”计算的内容?
3)你建议对匹配项进行什么分析/过滤(见图)?PCA 可能对相机平移运动的约束?
4)我错过/做错的其他事情?

这些图像显示了平均到更差的结果。(右边的绿线是转换后的四边形。忽略中间的小绿线)有些对的配准会差很多。

http://www.cs.hs-rm.de/~schweitz/siftmatch.jpg
http://www.cs.hs-rm.de/~schweitz/siftmatch2.jpg
h**p://www.cs .hs-rm.de/~schweitz/siftmatch3.jpg

0 投票
0 回答
354 浏览

iphone - 为 OpenCV Stitcher 提供相机姿态

我正在尝试使用 OpenCV 将 iPhone 上拍摄的图像中的 360° 全景图拼接在一起。

拼接算法运行良好,但没有为我未捕获的区域提供任何空白空间。我可以从手机接收姿态(俯仰、偏航、滚动)信息,并相信这将是足够的额外信息来确定我创建的全景图中应包含多少空白空间,但我找不到提供此信息的方法到缝合器。

我想知道:

  • OpenCV 是否允许我向拼接器提供相机信息?
  • OpenCV 会在考虑空白的情况下创建 360° 全景图吗?
  • 如果没有,您能否建议一个可以为编译的全景图添加正确数量的空白空间的后处理步骤?
0 投票
2 回答
2979 浏览

c++ - OpenCV WarpPerspective 问题

我目前正在尝试在 Eclipse 中实现基本的图像拼接 C++ (OpenCV) 代码。特征检测部分显示了 SURF 特征的出色结果。但是,当我尝试将 2 张图像扭曲在一起时,我只得到一半的图像作为输出。我试图到处寻找解决方案,但无济于事。我什至试图抵消单应矩阵,就像在这个答案OpenCV warpperspective中一样。到目前为止没有任何帮助。

由于我没有足够的声誉点,我将在评论中附上输出图像。

对于特征检测和单应性,我使用了这里的确切代码 http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html

然后我在给定代码之后添加了以下代码,

我对此很陌生,只是想把这些碎片放在一起。因此,如果有一些基本错误,我深表歉意。

0 投票
1 回答
2400 浏览

c++ - 多个图像拼接 - 添加第三个图像

我试图在将两个图像拼接在一起后拼接第三个图像,但它似乎不起作用。

为了详细说明,我使用opencv文档( http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html )中给出的代码成功地将两张图像拼接在一起并获得了这张图像。 http://i.stack.imgur.com/gqQjV.jpg

然后,在大量阅读和 ROI 问题之后,我删除了图像的黑色部分以获得该图像。 在此处输入图像描述

现在,我正在尝试使用相同的代码将第三张图像 ( http://i.stack.imgur.com/nXD86.jpg ) 缝合到此,但缝合不起作用。特征匹配完美。

在此处输入图像描述

但是在执行程序之后,我获得了具有更大黑色区域(由于 ROI)并且没有第三张图像的相同图像。(输出:http: //i.stack.imgur.com/WzZA0.jpg

我认为它与拼接图像末端的黑色小条有关,因此 WarpPerspective 语句不会映射拼接区域。编码 :

warpperspective 的结果给出了黑色图像而不是剩余区域。

有人可以告诉我哪里可能出错以及如何解决吗?谢谢

0 投票
2 回答
3146 浏览

opencv - 将像素从一个图像重新投影到另一个图像

我有许多校准过的相机拍摄平面场景的照片。为简单起见,我们假设有 3 个摄像头。这些相机正在进行一般运动,但主要是平移加上一些温和的旋转。相机位置示例

任务是将它们完全缝合。我对 3D 坐标一无所知,只是使用校准相机拍摄的一组图像。

我所做的:

我通过在每对图像(1->2、2->3、1->3)之间使用findHomography来检测 OpenCV 中的 SURF/SIFT 实现的特征以获得初始单应性。从这些单应性中,我得到了每个相机姿势的初始估计(与此类似的过程)

然后我尝试使用捆绑调整技术来最小化每个匹配对的重投影误差。优化的参数是三个平移值和三个旋转值(从 Rodrigues 的旋转公式获得),尽管我可以稍后添加内在参数(焦点、主点等)。

假设图像#2 将是参考帧(通过与其他两个图像有最多的匹配),它的旋转和平移矩阵分别是恒等矩阵和零矩阵。

我计算从图像#2到图像#1的关键点(在图像#2和图像#1中都可见)的重投影为(伪代码)

或者

其中 r__ 是 R1 矩阵的元素,两个内在矩阵的形式为

我假设参考系的 Z2 坐标为 1。

下一阶段是使用获得的相机矩阵(K1、R1、T1、K3、R3、T3)将图像#1 和#3 扭曲到图像#2 的公共坐标系中。

问题是我不知道正确重投影到图像#2的参考帧所需的Z1和Z3,因为从图像#1->#2的反转重投影看起来像这样:

其中 R__ 是 inv(R1) 矩阵的元素。

有没有更好的方法来计算束调整(2d->2d)的重投影误差,然后将图像扭曲到公共坐标系中?我注意到 OpenCV 在他们的拼接模块中有非常相似的框架,但它是在纯旋转运动的假设下运行的,这不是这里的情况。