标签: image-stabilization

图像稳定库Objective-C/C/C++?

是否有一个像样的图像稳定库(光流周围的东西)那里可以给我一个三维变换矩阵来稳定?

我只想稳定10帧序列.具有Objective-C包装器的库将是最好的,但更深层次的东西(C,C++)是可以的.

提前致谢.

iphone objective-c opticalflow image-stabilization

10
推荐指数
1
解决办法
909
查看次数

基于calcOpticalFlowFarneback的OpenCV变形图像

我正在尝试使用Dense Optical Flow执行复杂的图像扭曲(我试图将第二个图像切换成与第一个图像大致相同的形状).我可能会把这一切都搞错了但是我发布了我尝试过的内容:

cv::Mat flow;
cv::calcOpticalFlowFarneback( mGrayFrame1, mGrayFrame2, flow, 0.5, 3, 15, 3, 5, 1.2, 0 );

cv::Mat newFrame = cv::Mat::zeros( frame.rows, frame.cols, frame.type() );
cv:remap( frame, newFrame, flow, cv::Mat(), CV_INTER_LINEAR );
Run Code Online (Sandbox Code Playgroud)

如果我正在计算2个灰度帧的流量垫的想法.我找回了一个似乎有意义的流垫,但现在我正在尝试使用此流信息重新映射我的原始(即非灰度)图像.

我认为重映射功能是我想要的,但是我得到了一个非常严重失真的图像.我的所有颜色信息都没有存在.我最终得到的橙色和黑色图像与我的原始图像有很小的相似之处.

我猜我错误地理解了重映射功能,它要么不做我想做的事情,要么就是因为我传入的内容出了问题.

如果前者有人对我如何解决这个问题有任何建议?如果是后者,我错了什么?

任何帮助非常感谢!

c++ opencv opticalflow image-stabilization

9
推荐指数
1
解决办法
7950
查看次数

视频稳定的最佳算法

我正在创建一个程序来稳定视频流.目前,我的程序基于相位相关算法工作.我正在计算两个图像之间的偏移 - 基础和当前.接下来,我根据新坐标校正当前图像.这个程序有效,但效果不理想.相关链接您可能会发现处理后的视频显得不受欢迎,并且整个视频的抖动变得更糟.
Orininal video
Unshaked video
我目前的认识是:
计算图像之间的偏移量:

Point2d calculate_offset_phase_optimized(Mat one, Mat& two) {

  if(two.type() != CV_64F) {
    cvtColor(two, two, CV_BGR2GRAY);
    two.convertTo(two, CV_64F);
  }

  cvtColor(one, one, CV_BGR2GRAY);
  one.convertTo(one, CV_64F);

  return phaseCorrelate(one, two);

}
Run Code Online (Sandbox Code Playgroud)

根据此坐标移动图像:

void move_image_roi_alt(Mat& img, Mat& trans, const Point2d& offset) {

  trans = Mat::zeros(img.size(), img.type());
  img(
    Rect(
        _0(static_cast<int>(offset.x)),
        _0(static_cast<int>(offset.y)),
        img.cols-abs(static_cast<int>(offset.x)),
        img.rows-abs(static_cast<int>(offset.y))
    )
  ).copyTo(trans(
    Rect(
        _0ia(static_cast<int>(offset.x)),
        _0ia(static_cast<int>(offset.y)),
        img.cols-abs(static_cast<int>(offset.x)), 
        img.rows-abs(static_cast<int>(offset.y))
    )   
  )); 
}

int _0(const int x) {
  return x < 0 ? 0 : x;
}

int _0ia(const …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm opencv image-stabilization

5
推荐指数
1
解决办法
3318
查看次数

Emgucv C# 图像稳定

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

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

我明白我必须执行以下操作:

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

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

我有两个连续的帧:

Image<Gray, ushort> FirstImage = new Image<Gray, ushort>(Width, Height);
Image<Gray, ushort> SecondImage= new Image<Gray, ushort>(Width, Height);
Run Code Online (Sandbox Code Playgroud)

我尝试计算好的特征:

Emgu.CV.Features2D.GFTTDetector _GFTTdetector = new Emgu.CV.Features2D.GFTTDetector(500,0.05);
var GFP1 = _GFTTdetector.Detect(FirstImage);
Run Code Online (Sandbox Code Playgroud)

但是,当我调用 .Detect 时,我收到 OpenCV 异常,并且无法继续:

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

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

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

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

最后 _GFTTdetector.Detect()返回一个KeyPoint[]类型,但是CvInvoke.CalcOpticalFlowPyrLK()只接受 …

c# image-processing emgucv image-stabilization

5
推荐指数
0
解决办法
1378
查看次数

实时视频稳定 OpenCV

我在 OpenCV (cv::videostab) 中搜索了一个函数,它允许我实时进行视频稳定。但据我了解,OpenCV 尚不可用。因此 TwoPassStabilizer(OnePassStabilizer) 需要一次完整的视频,而不是两个连续的帧。

Ptr<VideoFileSource> source = makePtr<VideoFileSource>(inputPath); //it's whole video
TwoPassStabilizer *twopassStabilizer = new TwoPassStabilizer();
twoPassStabilizer->setFrameSource(source); 
Run Code Online (Sandbox Code Playgroud)

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

python opencv video-processing image-stabilization

5
推荐指数
1
解决办法
5433
查看次数

图像稳定/对齐算法

根据我在网上看到的,最有效的图像稳定算法之一是使用格雷编码的位平面匹配.但是,我无法理解它(格雷码本身并不复杂,而是其余部分).任何人都可以向我指出一个关于这个主题的资源(或另一种稳定的稳定方法),它略低于大多数发表论文的水平吗?示例代码胜过抽象广义方程.

就我的目的而言,视频中没有平移或缩放,帧中没有移动物体.

algorithm video image-processing image-stabilization

4
推荐指数
1
解决办法
1万
查看次数

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

考虑我有一个稳定的视频帧,其中稳定只通过旋转和平移(没有缩放):

ORI

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

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

我可能会通过蛮力找到角度,但我想知道是否有更好更优雅的解决方案.注意,对称部分的强度值与原始部分的精度值不完全相同.我已经检查了一些值,例如,V字的键盘上的右上像素是 [51 49 47]原始部件而是[50 50 47]对称拷贝,这意味着相应的像素不被保证是相同的RGB值.

我将在Matlab或python上实现它,并使用完成视频稳定ffmpeg.

编辑:我只有稳定的视频,无法访问原始视频或由ffmpeg生成的文件.

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

python matlab matrix image-rotation image-stabilization

4
推荐指数
1
解决办法
288
查看次数

OpenCV:图像稳定

我试图在OpenCV中发布视频处理.由于我的相机没有固定(必须是移动的),由于振动和平移,产生的视频非常抖动.因此,我尝试查看的每个帧都有模糊,如果它甚至可以检测到一些模糊的图像,那么这将使我的检测不太准确.

我在网上搜索过,似乎有很多关于使用陀螺仪补偿相机运动的讨论.

有没有相机会帮助解决这个问题?我一直在使用GoPro.

有没有可以帮助处理视频的算法?

我没有图像稳定的背景,也不知道从哪里开始.将不胜感激任何建议.

opencv image-processing computer-vision image-stabilization

2
推荐指数
1
解决办法
5221
查看次数