0

Я хочу получить «EPE все EPE соответствует EPE непревзойденный d0-10 d10-60 d60-140 s0-10 s10-40 s40 +» результат оптического потока от «http://sintel.is.tue.mpg.de/results». Я использовал OpenCV 3, VC++ 2013, Win 7 64bit. и мне нужен пример кода для получения этих результатов.Оценка оптического потока

С уважением,

////////// редактировать
Исходный код оптического потока без оценки

Size img_sz = imgA.size(); 
Mat imgC(img_sz,1); 

int win_size = 15; 
int maxCorners = 20; 
double qualityLevel = 0.05; 
double minDistance = 5.0; 
int blockSize = 3; 
double k = 0.04; 
std::vector<cv::Point2f> cornersA; 
cornersA.reserve(maxCorners); 
std::vector<cv::Point2f> cornersB; 
cornersB.reserve(maxCorners); 


goodFeaturesToTrack(imgA,cornersA,maxCorners,qualityLevel,minDistance,cv::Mat()); 
goodFeaturesToTrack(imgB,cornersB,maxCorners,qualityLevel,minDistance,cv::Mat()); 

cornerSubPix(imgA, cornersA, Size(win_size, win_size), Size(-1, -1), 
       TermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03)); 

cornerSubPix(imgB, cornersB, Size(win_size, win_size), Size(-1, -1), 
       TermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03)); 

// Call Lucas Kanade algorithm 

CvSize pyr_sz = Size(img_sz.width+8, img_sz.height/3); 

std::vector<uchar> features_found; 
features_found.reserve(maxCorners); 
std::vector<float> feature_errors; 
feature_errors.reserve(maxCorners); 

calcOpticalFlowPyrLK(imgA, imgB, cornersA, cornersB, features_found, feature_errors , 
    Size(win_size, win_size), 5, 
    cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.3), 0); 

// Make an image of the results 

for(int i=0; i < features_found.size(); i++){ 
     cout<<"Error is "<<feature_errors[i]<<endl; 
     //continue; 

    cout<<"Got it"<<endl; 
    Point p0(ceil(cornersA[i].x), ceil(cornersA[i].y)); 
    Point p1(ceil(cornersB[i].x), ceil(cornersB[i].y)); 
    line(imgC, p0, p1, CV_RGB(255,255,255), 2); 
} 

namedWindow("ImageA", 0); 
namedWindow("ImageB", 0); 
namedWindow("LKpyr_OpticalFlow", 0); 

imshow("ImageA", imgA); 
imshow("ImageB", imgB); 
imshow("LKpyr_OpticalFlow", imgC); 

cvWaitKey(0); 

return 0; 

}

}

+2

Хороший знать, чего вы хотите ... но что вы сделали до сих пор? – Berriel

ответ

0
float evaluationRMSE(Mat flow1, Mat flow2) { 
    float sum = 0; 
    int counter = 0; 
    const int rows = flow1.rows; 
    const int cols = flow1.cols; 

    for (int y = 0; y < rows; ++y) { 
     for (int x = 0; x < cols; ++x) { 
      Vec2f flow1_at_point = flow1.at<Vec2f>(y, x); 
      Vec2f flow2_at_point = flow2.at<Vec2f>(y, x); 

      float u1 = flow1_at_point[0]; 
      float v1 = flow1_at_point[1]; 
      float u2 = flow2_at_point[0]; 
      float v2 = flow2_at_point[1]; 

      //if (isFlowCorrect(u1) && isFlowCorrect(u2) && isFlowCorrect(v1) && isFlowCorrect(v2)) 
      { 
       sum += (u1 - u2)*(u1 - u2) + (v1 - v2)*(v1 - v2); 
       counter++; 
      } 
     } 
    } 
    return (float)sqrt(sum/(1e-9 + counter)); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^