Browse Source

introduce checkIntersection

master
Tim Zeuner 2 years ago
parent
commit
d66e5d05b2
2 changed files with 35 additions and 26 deletions
  1. 34
    26
      AutonomousMode/Processing/processing.cpp
  2. 1
    0
      AutonomousMode/Processing/processing.h

+ 34
- 26
AutonomousMode/Processing/processing.cpp View File

indicesToDelete.push_back(i); indicesToDelete.push_back(i);
continue; continue;
} }

// Third approach:
// Calculate the HoughLinesP of the contour.
// There should be 4 lines
// This one is not really working yet.
Rect boundingRect = cv::boundingRect(frameData.contours[i]);
Point offset(-boundingRect.x, -boundingRect.y);
Mat contourMat = Mat::zeros(frameData.boundingBoxes[i].height, frameData.boundingBoxes[i].width, CV_8UC1);
drawContours(contourMat, frameData.contours, i, Scalar(255,255,255), 1, 8, noArray(), 0, offset);
std::vector<Vec4i> linesP;
HoughLinesP(contourMat, linesP, 1, CV_PI/180, 20, 10, 5 );
//imshow("Some window", contourMat);
if(linesP.size() < 4)
{
//indicesToDelete.push_back(i);
//continue;
//std::cout << linesP.size();
}
} }


//reverse the vector with the indices so the order isn't messed up when deleting: //reverse the vector with the indices so the order isn't messed up when deleting:
return; return;
} }


bool Processing::checkIntersection(const std::vector<std::vector<Point>>& lines, const std::vector<Point>& outline)
{

/* TODO:
* Was ich mir hier vorstelle:
* Wir haben die konturen und die hough linien
* Konturen haben schwäche mit Reflektionen, hough linien sind unvollständig.
* Irgendwie sollten die beiden Datensätze gemerged werden, um das "gute" aus beiden zu vereinen.
* Evtl in richtung "Schau den Bereich der Contour (+ Toleranz?) im hough bild an. Wenn keine Linie im Bereich ist, ist die Contour eine Reflektion"
*
* Aktuell nehmen wir die abkürzung, die segmente rauszuwerfen, sobald keine Linie im Bild ist.
* Funktioniert für unsere Daten auch ziemlich gut
*/

if(lines.size() == 0)
{
return false;
}
return true;
}


void Processing::processImage(Mat& inputPicture, int thresholdBinary, int gaussKernelSize) void Processing::processImage(Mat& inputPicture, int thresholdBinary, int gaussKernelSize)
{ {
//Idea here is: Processing module consists of two methods: //Idea here is: Processing module consists of two methods:
Mat inputPictureRoi = inputPicture(roi); Mat inputPictureRoi = inputPicture(roi);
cv::findContours(inputPictureRoi, data.contours, RETR_LIST, CHAIN_APPROX_SIMPLE); cv::findContours(inputPictureRoi, data.contours, RETR_LIST, CHAIN_APPROX_SIMPLE);


/* TODO:
* Was ich mir hier vorstelle:
* Wir haben die konturen und die hough linien
* Konturen haben schwäche mit Reflektionen, hough linien sind unvollständig.
* Irgendwie sollten die beiden Datensätze gemerged werden, um das "gute" aus beiden zu vereinen.
* Evtl in richtung "Schau den Bereich der Contour (+ Toleranz?) im hough bild an. Wenn keine Linie im Bereich ist, ist die Contour eine Reflektion"
*/

vector<Vec4i> lines; vector<Vec4i> lines;
std::vector<std::vector<Point>> houghLines;
Canny(inputPicture, inputPicture, 50, 100, 3); Canny(inputPicture, inputPicture, 50, 100, 3);
HoughLinesP(inputPicture, lines, 1, CV_PI/180, 100, 30, 150); HoughLinesP(inputPicture, lines, 1, CV_PI/180, 100, 30, 150);
//Draw lines //Draw lines
for( size_t i = 0; i < lines.size(); i++ ) for( size_t i = 0; i < lines.size(); i++ )
{ {
line( inputPicture, Point(lines[i][0], lines[i][1]), Point(lines[i][2], lines[i][3]), Scalar(255,255,255), 3, 8 ); line( inputPicture, Point(lines[i][0], lines[i][1]), Point(lines[i][2], lines[i][3]), Scalar(255,255,255), 3, 8 );
std::vector<Point> line;
line.push_back(Point(lines[i][0], lines[i][1]));
line.push_back(Point(lines[i][2], lines[i][3]));
houghLines.push_back(line);
} }




{ {
iterator = data.contours.erase(iterator); iterator = data.contours.erase(iterator);
} }
else if (!checkIntersection(houghLines, *iterator))
{
iterator = data.contours.erase(iterator);
}
else else
{ {
//Check for intersection with lines:


Rect boundingBox = boundingRect(*iterator); Rect boundingBox = boundingRect(*iterator);
boundingBox.x += roi.x; boundingBox.x += roi.x;
boundingBox.y += roi.y; boundingBox.y += roi.y;

+ 1
- 0
AutonomousMode/Processing/processing.h View File

{ {
private: private:
/* data */ /* data */
bool checkIntersection(const std::vector<std::vector<Point>>& lines, const std::vector<Point>& outline);
public: public:
Processing(/* args */); Processing(/* args */);
// To do: // To do:

Loading…
Cancel
Save