получить местоположение (x, y) совпадающих функций на двух изображениях, используя emgu

у меня есть два изображения, сделанные двумя камерами, я хочу использовать алгоритм серфинга или любой алгоритм в Emgu, чтобы получить только что совпадающие местоположения функций на двух изображениях, чтобы вычислить (оценить) реальное расстояние от камер и этих функций (объектов), я нашел пример для использования алгоритм серфинга в примерах Emgu, но он рисует линии между совпадающими функциями, я хочу получить x и y для любого начала и конца каждой строки. функции, соответствующие образцу алгоритма серфинга

я пытаюсь добавить некоторый код в пример алгоритма серфинга, но не работает, как ожидалось, в методе Draw

long num_matches = matches.Size;
float lower = matches[0][0].Distance;
List<PointF> matched_points1= new List<PointF>();
List<PointF> matched_points2=new List<PointF>();

for (int i = 0; i < num_matches; i++)
{
    if (matches[i][0].Distance < 0.095)
    { 
        int idx1 = matches[i][0].TrainIdx;
        int idx2 = matches[i][0].QueryIdx;
        matched_points1.Add(observedKeyPoints[idx1].Point);
        matched_points2.Add(observedKeyPoints[idx2].Point);
        CvInvoke.Circle(result, new Point((int)observedKeyPoints[idx2].Point.X , (int)observedKeyPoints[idx2].Point.Y), 1, new MCvScalar(255, 0, 0));
        CvInvoke.Circle(result, new Point((int)modelKeyPoints[idx1].Point.X + modelImage.Width, (int)modelKeyPoints[idx1].Point.Y), 1, new MCvScalar(255, 0, 0));
    }

    if (lower > matches[i][0].Distance)
        lower = matches[i][0].Distance;
}

person user3106820    schedule 02.02.2016    source источник


Ответы (1)


public static Point[] FindPoints(Mat modelImage, Mat observedImage, out long matchTime)
  {
      Mat homography;
      VectorOfKeyPoint modelKeyPoints;
      VectorOfKeyPoint observedKeyPoints;
      using (VectorOfVectorOfDMatch matches = new VectorOfVectorOfDMatch())
      {
          Mat mask;
  FindMatch(modelImage, observedImage, out matchTime, out modelKeyPoints, out      observedKeyPoints, matches,out mask, out homography);

          //Draw the matched keypoints
          Mat result = new Mat();
          Features2DToolbox.DrawMatches(modelImage, modelKeyPoints, observedImage, observedKeyPoints,
             matches, result, new MCvScalar(255, 255, 255), new MCvScalar(255, 255, 255), mask);

          Point[] points = null;
          if (homography != null)
          {
              //draw a rectangle along the projected model
              Rectangle rect = new Rectangle(Point.Empty, modelImage.Size);
              PointF[] pts = new PointF[]
            {
               new PointF(rect.Left, rect.Bottom),
               new PointF(rect.Right, rect.Bottom),
               new PointF(rect.Right, rect.Top),
               new PointF(rect.Left, rect.Top)
            };
              pts = CvInvoke.PerspectiveTransform(pts, homography);

              points = Array.ConvertAll<PointF, Point>(pts, Point.Round);

          }

          return points;
      }
  }

//добавляем код в функцию Draw

for (int i = 0; i < matches.Size; i++) { var a = matches[i].ToArray(); if (mask.GetData(i)[0] == 0) continue; foreach (var e in a) { Point p = new `Point(e.TrainIdx, e.QueryIdx); Console.WriteLine(string.Format("Point: {0}", p)); } Console.WriteLine("-----------------------"); }` 
person Feras Al Sous    schedule 16.05.2016
comment
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и/или как этот код отвечает на вопрос, повышает его ценность в долгосрочной перспективе. - person Ajean; 16.05.2016
comment
Мне удалось получить некоторые очки из объектов совпадений, например: если (mask.GetData(i)[0] == 0) продолжить; foreach (var e in a) { Point p = new Point(e.TrainIdx, e.QueryIdx); Console.WriteLine(string.Format(Point: {0}, p)); } Console.WriteLine(--------------------------------------); } - person Feras Al Sous; 16.05.2016
comment
Также не размещайте код в комментариях — если у вас есть обновление для вашего ответа, вместо этого отредактируйте его. - person Ajean; 17.05.2016