【问题标题】:the average of optical flow光流平均值
【发布时间】:2010-11-07 13:28:12
【问题描述】:

我想找到光流的平均值,我可以从第一帧中提取特征并在下一帧中找到它们的位置。现在,我想找到位移的平均值,以便将图像转换回其静止背景以稳定图像。

// here I take the optical flow 
cvCalcOpticalFlowPyrLK(frame1_1C, frame2_1C, pyramid1, pyramid2, frame1_features,
                       frame2_features, corner_count, optical_flow_window, 5,
                       optical_flow_found_feature, NULL,
                       optical_flow_termination_criteria, NULL);

// here the features that I extract them 
for( int i=0; i < corner_count; i++ ) {
  CvPoint p,q;
  if ( optical_flow_found_feature[i] == 0 ) continue;
  p.x = (int) frame1_features[i].x;
  p.y = (int) frame1_features[i].y;
  q.x = (int) frame2_features[i].x;
  q.y = (int) frame2_features[i].y;

  double angle = atan2( (double) p.y - q.y, (double) p.x - q.x );
  double hypotenuse = sqrt( square(p.y - q.y) + square(p.x - q.x) );

现在我想取它们的平均值,如果你想让我向你展示更多代码,我已经准备好这样做了。

corner_count 是特征的数量。

【问题讨论】:

  • 我建议您 (a) 提出一个问题 - 您现在所做的就是告诉我们您想做什么,我们猜测您遇到的问题,(b) 格式您的代码即代码 - 请参阅您在其中创建/编辑问题的文本框上方的图标,(c)

标签: c++ image-processing opencv


【解决方案1】:

我假设根据您所写的内容,您想要找到两帧之间所有特征点的平均位移。在这种情况下,您所要做的就是在特征的循环中计算“斜边”,将其所有值相加,然后除以特征的数量。

好的,这是你的答案:

cvCalcOpticalFlowPyrLK(frame1_1C, frame2_1C, pyramid1, pyramid2, frame1_features, frame2_features, corner_count, optical_flow_window, 5, optical_flow_found_feature, NULL, optical_flow_termination_criteria, NULL);
//here the features that I extract them 

double sumOfDistances = 0;
for(int i = 0; i < corner_count; ++i)
{
   int x1 = (int) frame1_features[i].x;    
   int y1 = (int) frame1_features[i].y;
   int x2 = (int) frame2_features[i].x;  
   int y2 = (int) frame2_features[i].y;

   int dx = x2 - x1;
   int dy = y2 - y1;
   sumOfDistances += sqrt(dx * dx + dy * dy);
}
double averageDistance = sumOfDistances / corner_count;

我在这里假设corner_count 是特征的数量。您需要确保这确实是正确的。另外,我还没有尝试编译它。如果我犯了任何错误,由你来解决。

但是,如果您打算不止一次进行图像处理,我建议您实际学习一些编程。我在这里做的是非常基本的东西。如果不亲自了解这一点,您将不会走得太远。

【讨论】:

  • @Dima,是的,这是完全正确的,我正在寻找的东西,你能不能更具体地说明我的代码,因为我不是一个好的程序员。非常感谢您的反馈。
  • @Dima,有没有办法联系你给你看我的代码,我知道如何编程和这些东西,但我不是很好。
  • 看,我的意思不是不尊重,也不是粗鲁,但如果你不知道如何编写代码来计算一组数字的平均值,那么你就不会不知道如何编程。至少,你不知道如何用 C++ 编程。抱歉,但我没有时间为您调试代码,而且我也不相信从长远来看它会对您有所帮助。你需要买一本关于 C++ 的书并学习基础知识,这样你才能真正理解每一行代码的含义。否则,如果其他人修复了您的代码,它将无济于事。对不起,如果我的话看起来很严厉,但这是事实。
  • @Dima,我知道该怎么做,但我想看看我做得对不对?我可以运行我的代码,并且我知道计算平均值以及您对我所做的事情我可以做到。但我的问题是如何将第二帧特征翻译到其原始位置。
  • @Dima,我是机器人和智能系统的硕士生,但我的背景是电子工程,所以我在编程方面遇到了困难,这就是为什么我希望有人能看到我是什么做对了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多