Какой шаг предварительной обработки сделать перед HoughLines - PullRequest
2 голосов
/ 28 марта 2019

Я написал программу для

  1. Информация о комбинированном крае и информация о цвете, чтобы сформировать изображение, которое мне понадобится для обнаружения прямой линии от
    EdgeMap ColourMap Combined Map or Frame
  2. Затем я использую findContour и drawContour, чтобы перерисовать карту улик Output from findcontour

  3. , после чего я использую некоторый алгоритм прореживания, чтобы свернуть строку в одну строку thin line

  4. Используйте HoughLinesP для вычисления для сегмента строки,Есть только следы линии.И самое главное пропустили горизонтальную линию

Output from Hough

Из этого набора отрезков линии вычислите точку пересечения (не включенную в код) Из пересечения нарисуйте четырехугольник из точки пересечения, вершины (называемые v1 и v2, наиболее удаленные от пересеченияpoint) горизонтальной / вертикальной линии и вычисления вершины на основе отражения точки пересечения на линии между v1 и v2

Однако это не работает так, как мне кажется.Я думаю, что проблема заключается в том, что внутренняя граница прямоугольника не заполнена.Должен ли я использовать морфологию, например, дилатацию, а затем разрушать.У меня закончились идеи предварительно обработать изображение двух «сигналов», прежде чем пытаться обнаружить их на пересечение с Hough Transform

Нужна помощь всех!

Заранее спасибо

Ниже приведеномой фрагмент кода для генерации следующего

int FindBoxes(cv::Mat& colorMap,cv::Mat& edgeMap)
{ 
    cv::Mat frame;
    // colorMap is a coloured filtered map while edgeMap is an edge  filter Map. frame will be the colour i want 
    cv::bitwise_and(colorMap, edgeMap, frame);

    // A trial method by using findContour to get the interior line filled up 
    std::vector<std::vector<cv::Point> > contours;
    std::vector<cv::Vec4i> hierarchy;
    cv::findContours(frame, contours, hierarchy, CV_RETR_EXTERNAL,
        cv::CHAIN_APPROX_SIMPLE);

    cv::Mat Map = cv::Mat::zeros(cueMap1.size(), CV_8U);
    cv::drawContours(Map, contours, -1, cv::Scalar(255, 255, 255), CV_FILLED);

   // thin the line to collapse it into one single line for Hough Detection
   cv::Mat thin;
   thinning(Map, Map);

   cv::GaussianBlur(Map, Map, cv::Size(5,5),1.0,1.0);

   std::vector<cv::Vec4i> lines;
   cv::HoughLinesP(Map, lines,1, CV_PI/90, 2, 30, 0);

   return 0;
}
...