2011-02-06 3 views
1

В настоящее время я пытаюсь реализовать преобразования с помощью EMGU, хотя я не могу понять, как он работает (и, похоже, нет примеров в Интернете).Трансформации с помощью Emgu (OpenCV) - Аффинный/перспективный?

У меня есть мое изображение с четырьмя точками, которые я хочу преобразовать из (и в), хотя я не знаю, какие другие переменные требуются, он запрашивает «mapMat»?

Вот то, что я до сих пор:

 float[,] tmp = { 
          {bottomLeft.x, bottomLeft.y}, 
          {topLeft.x, topLeft.y}, 
          {topRight.x, topRight.y}, 
          {bottomRight.x, bottomRight.y} 
         }; 
     Matrix<float> sourceMat = new Matrix<float>(tmp); 
     float[,] target = { 
          {0, height}, 
          {0, 0}, 
          {width, 0}, 
          {width, height} 
         }; 
     Matrix<float> targetMat = new Matrix<float>(target); 
     //mapMat = just a placeholder matrix? 
     Matrix<float> mapMat = new Matrix<float>(target); 
     CvInvoke.cvGetAffineTransform(sourceMat.Ptr, targetMat.Ptr, mapMat.Ptr); 

Это, однако, не работает. Я также не знал, является ли оптимальное решение аффинной трансформацией? Я тоже кое-что прочитал о FindHomography, а также о перспективных преобразованиях, но не уверен, что они будут применяться здесь.

Цель преобразования я хочу достичь, как это:

http://img832.imageshack.us/img832/5157/targettransform.png

Любая помощь будет принята с благодарностью,

Благодаря

ответ

3

Сначала немного интро:

  • Если вам нужна аффинная трансформация (как кажется с лет ур картина), вы должны по крайней мере 3 пары точек, потому что у вас есть 6 параметров для оценки
  • Если вы хотите получить более общие преобразования, т.е. омографии вам нужно как минимум 4 пары точек, потому что у вас есть 8 параметров для оценки

Так что у вас есть ваши 4 источника и назначения углы, и вы хотите, чтобы оценить трансформацию Perspective этот код должен делать то, что вы хотите:

PointF[] pts1 = new PointF[4]; 
PointF[] pts2 = new PointF[4]; 
HomographyMatrix homography; 
for (int i = 0; i < 4; i++) 
{ 
    pts1[i] = new PointF (sourceCorner[i].X, sourceCorner[i].Y); 
    pts2[i] = new PointF (destCorner[i].X, destCorner[i].Y); 
} 
homography = CameraCalibration.GetPerspectiveTransform(pts1, pts2); 

Взгляните на CameraCalibration для других полезных методов

+0

Извините, это та ken мне некоторое время, чтобы вернуться к вам, Лука, это была большая помощь, и теперь я (вроде) получил ее работу :) –

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