2013-03-08 1 views
2

Я нахожусь в необходимости использования стандартного преобразования Хафа (вместо использования метода HoughLinesBinary, который реализует вероятностный Хаф Transform) и попытался сделать это, создав собственную версию метода HoughLinesBinary:Стандартные Hough линия в EMGU CV

using (MemStorage stor = new MemStorage()) 
    { 
     IntPtr lines = CvInvoke.cvHoughLines2(canny.Ptr, stor.Ptr, Emgu.CV.CvEnum.HOUGH_TYPE.CV_HOUGH_STANDARD, rhoResolution, (thetaResolution*Math.PI)/180, threshold, 0, 0); 

     Seq<MCvMat> segments = new Seq<MCvMat>(lines, stor); 
     List<MCvMat> lineslist = segments.ToList(); 
     foreach(MCvMat line in lineslist) 
     { 
      //Process lines: (rho, theta) 
     } 
    } 

Моя проблема в том, что я не уверен, какой тип возвращается. Я считаю, что это должен быть MCvMat, из-за чтения документации о том, что CvMat * используется в OpenCV, что также указывает, что для СТАНДАРТА «матрица должна быть (созданная последовательность будет) типа CV_32FC2»

Непонятно, как к тому, что мне нужно будет сделать, чтобы возвращать и обрабатывать правильные выходные данные из строк STANDARD hough (т. е. вектор 2x1 для каждой строки, дающий информацию о rho и theta).

Любая помощь была бы принята с благодарностью. Спасибо

-Sal

ответ

1

У меня была та же проблема, я пару дней назад. Вот как я решил это, используя сортировку. Пожалуйста, дайте мне знать, если вы найдете более простое решение.

using (MemStorage stor = new MemStorage()) 
{ 
    IntPtr lines = CvInvoke.cvHoughLines2(canny.Ptr, stor.Ptr, Emgu.CV.CvEnum.HOUGH_TYPE.CV_HOUGH_STANDARD, rhoResolution, (thetaResolution*Math.PI)/180, threshold, 0, 0); 

    int maxLines = 100; 
    for(int i = 0; i < maxLines; i++) 
    { 
     IntPtr line = CvInvoke.cvGetSeqElem(lines, i); 
     if (line == IntPtr.Zero) 
     { 
      // No more lines 
      break; 
     } 
     PolarCoordinates coords = (PolarCoordinates)System.Runtime.InteropServices.Marshal.PtrToStructure(line, typeof(PolarCoordinates)); 

     // Do something with your Hough lines 
    } 
} 

с структуры определяется следующим образом:

public struct PolarCoordinates 
{ 
    public float Rho; 
    public float Theta; 
} 

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

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