问题标签 [image-stabilization]

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 投票
0 回答
1170 浏览

c# - Emgucv C# 图像稳定

我有两个连续的图像,我想在 c# 中使用 EmguCv 来稳定它们。

我找到了很多关于如何执行图像稳定的信息,但是我找不到任何关于如何使用 Emgu 稳定两个连续帧的详细说明(实际代码示例)。

一般来说,我知道我必须执行以下操作:

  1. 使用 GFTTDetector() 计算第一帧的好特征,得到第一幅图像的好特征点(GFP1)。
  2. 然后我需要使用 CvInvoke.CalcOpticalFlowPyrLK() 计算光流,以获得第二张图像 (GFP2) 的良好特征点。
  3. 使用 GFP1 和 GFP2,我可以使用 CvInvoke.cvFindHomography() 函数计算单应矩阵。
  4. 最后我必须使用 CvInvoke.cvWarpPerspective() 来稳定框架。

所以基于上述我尝试执行图像稳定。

我有两个连续的帧:

我试图计算好的特征:

但是,当我调用 .Detect 时,我得到一个 OpenCV 异常,我无法继续:

$exception {"OpenCV: scn == 3 || scn == 4"} Emgu.CV.Util.CvException

有人知道我为什么会得到这个例外吗?

此外,如果有人可以发布如何使用以下函数的示例代码,我将不胜感激,因为我不确定我将使用哪些输入参数:

  • CvInvoke.CalcOpticalFlowPyrLK()
  • CvInvoke.cvFindHomography()
  • CvInvoke.cvWarpPerspective()

最后 _GFTTdetector.Detect() 返回一个 KeyPoint[] 类型,但是 CvInvoke.CalcOpticalFlowPyrLK() 只接受 PointF[] 参数作为优点,那么我如何将 KeyPoint[] 转换为 PointF[]?

0 投票
0 回答
341 浏览

python - RC平面相机的图像稳定

我有一架 RC 飞机,我正在使用 Raspberry Pi 3 使用红外摄像机捕捉静止区域的图像。

I 相机每 10 秒拍照一次

问题是由于 RC 上的抖动导致图片摇晃。

任何人都可以为这个问题提出任何算法解决方案吗?

0 投票
1 回答
366 浏览

python - 如何在 Matlab 上找到稳定视频帧的旋转角度

考虑我有以下稳定的视频帧,其中仅通过旋转和平移(无缩放)完成稳定:

织

如图所示,图像的右侧与之前的像素是对称的,即旋转后的黑色区域被对称填充。我添加了一条红线以更清楚地表明它。 红线

我想找到稍后将使用的旋转角度。我可以通过 SURF 或 SIFT 功能完成此操作,但是,在实际情况下,我不会拥有原始帧。

我可能可以通过蛮力找到角度,但我想知道是否有更好、更优雅的解决方案。请注意,对称部分的强度值与原始部分并不完全相同。我检查了一些值,例如,键盘上 V 字符的右上角像素 [51 49 47]原始部分,但[50 50 47]对称副本中,这意味着不能保证对应的像素是相同的RGB值。

我将在 Matlab 或 python 上实现这一点,视频稳定是使用ffmpeg.

编辑:我只有稳定的视频,无法访问原始视频或 ffmpeg 制作的文件。

任何帮助/建议表示赞赏,

0 投票
0 回答
152 浏览

c++ - OpenCV c ++中的后续图像稳定

我正在寻找一种适用于一组连续图像而不是视频的稳定技术/算法(每张图像大约每 1.2 秒到达一次)。OpenCV 似乎具有这种稳定性,但通过视频(稳定器),我可以使用任何其他类来稳定这组图像吗?或者,有没有办法让它与这个类一起工作?

干杯和感谢!

0 投票
1 回答
697 浏览

python - ImageJ:图像稳定器

问题:稳定一堆图像

问题:如何在没有关键点检测的情况下执行图像稳定?有什么办法吗?

我试过这个: http ://www.cs.cmu.edu/~kangli/code/Image_Stabilizer.html in ImageJ,它确实稳定了。使用的方法是 - Lucas-Kanade。我检查了许多来源,它们都需要定义关键点(如角落等)。[来源:https://link.springer.com/chapter/10.1007/978-3-642-25975-3_34]

有什么想法可以在没有关键点的情况下稳定帧堆栈吗?

图像是微观细胞图像(带有细胞分裂)

0 投票
2 回答
2775 浏览

python - 实时视频稳定 OpenCV

我在 OpenCV (cv::videostab) 中搜索了一个函数,它可以让我实时进行视频稳定。但正如我在 OpenCV 中所理解的那样,这还不可用。所以 TwoPassStabilizer(OnePassStabilizer) 需要一次完整的视频,而不是两个连续的帧。

所以我必须在没有 OpenCV 视频稳定类的情况下做到这一点。这是真实的?

0 投票
0 回答
272 浏览

python - 修改图像以获得清晰、无噪音的光流/图像稳定功能

我正在尝试开发一个管道,用于在 Python 中使用 opencv 来稳定流体实验的图像。这是一个示例原始图像(实际尺寸:1920x1460)

该管道应该能够稳定低频漂移和高频“抖动”,在实验过程中阀门打开/关闭时偶尔会发生。按照此处的示例,我目前的方法是应用双边滤波器,然后进行自适应阈值处理以显示图像中的通道。然后,我使用 goodFeaturesToTrack 在阈值图像中查找角点。但是,由于图像角落的某些光学效应对比度低,因此图像中存在大量噪声。虽然我可以找到通道的角落,如图所示,但它们在帧间移动了很多,见这里. 我跟踪了每个帧中相对于从 calcOpticalFlowPyrLK 计算的第一帧的 x 和 y 像素偏移量,并使用 estimateRigidTransform 计算刚性变换,如图所示。在这个图中,我可以看到从 0:200 帧开始的低频漂移,以及在 ~225 帧左右的急剧跳跃。这些跳跃与视频中观察到的相符。然而,大量噪声(幅度约为 5-10 像素)与视频中观察到的不匹配。如果我将这些转换应用于我的图像堆栈,我会得到增加的抖动,这不会稳定图像。此外,如果我尝试计算一帧到下一帧的变换(而不是所有帧到第一帧),在处理少数帧后,我会得到None返回刚性变换矩阵,可能是因为噪声阻止了刚性变换的计算。

这是我如何计算转换的示例:

如何以不同的方式处理我的图像,以便挑选出这些通道的线条而不会在检测角落时产生噪音?这种稳定/对齐不需要即时发生,它可以在事后应用于整个堆栈。

0 投票
1 回答
352 浏览

python - 在python中使用vid.stab将ffmpeg的输出文件捕获到一个变量中

我正在尝试编写一个 python 脚本来使用 ffmpeg 和 vid.stab 库来稳定视频。我的问题是输出文件似乎没有通过标准输出,所以使用 subprocess.Popen() 返回一个空变量。

问题是 vibstabdetect 采用名为 result 的过滤器,并将文件输出到那里指定的任何内容,而 stdout 保持为空。(如果没有指定结果,则默认为 transforms.trf。)

有没有办法获取结果文件的内容?使用上面的代码运行脚本时,它会正常执行,但文件是使用默认名称创建的,并且变量保持为空。

0 投票
0 回答
152 浏览

python - 使用 scikit-image 进行点跟踪未按预期工作

我正在尝试使用 python 和通过 skimage 进行模板匹配来稳定视频。该代码应该在整个视频中跟踪一个,但跟踪非常不精确,我怀疑它甚至无法正常工作

这是track_point函数,它应该将视频作为输入和一个点的一些坐标,然后为每一帧返回一个跟踪点数组

这是功能的实现

我希望情节在某种程度上是有规律的,因为视频不是那么不稳定,但事实并非如此。

图片

由于某种原因,该图几乎绘制了搜索模板的所有坐标。

编辑:这是视频的链接:https ://upload-video.net/a11073n9Y11-noau

我究竟做错了什么?

0 投票
1 回答
30 浏览

matlab - 如何在 MATLAB 中减少图像匹配代码的运行时间?

我正在尝试使用简单的图像匹配算法来稳定 MATLAB 中的视频文件。基本上,我正在拍摄视频第一帧的窗口,然后用第 n 帧减去它。我想得到一个从第 n 帧位置到第一帧的 x 和 y 位移向量数组。视频采用 1501x971 灰度格式,391 帧。

下面是我的代码。我已经让代码运行了 15 分钟以上并且仍在运行。我一直在寻找答案并实现了我看到人们建议的 int8 和预分配矩阵解决方案,但它仍然运行时间太长。任何帮助,将不胜感激。