diff --git a/AdvancedVision/FloodFill.cpp b/AdvancedVision/FloodFill.cpp index af3e458..fc0ed55 100644 --- a/AdvancedVision/FloodFill.cpp +++ b/AdvancedVision/FloodFill.cpp @@ -13,10 +13,41 @@ FloodFill::~FloodFill() int FloodFill::enclosedPixels(const vector& contourVec, vector & regionPixels) { + volatile int pointsx[] = { 0, 1, 0, -1 }; + volatile int pointsy[] = { -1, 0, 1, 0 }; + + stack st; + Point p = findStartPoint(contourVec); regionPixels.push_back(p); + st.push(p); - floodfill(contourVec, regionPixels, p); + while (st.size() > 0) + { + Point p = st.top(); + st.pop(); + + for (int i = 0; i < 4; i++) + { + Point check = Point(p.x + pointsx[i], p.y + pointsy[i]); + + if (contains(contourVec, check)) + { + continue; + } + else if (contains(regionPixels, check)) + { + continue; + } + else + { + regionPixels.push_back(check); + st.push(check); + } + } + } + + //floodfill(contourVec, regionPixels, p); return 1; } @@ -24,13 +55,18 @@ int FloodFill::enclosedPixels(const vector& contourVec, vector & r int FloodFill::floodfill(const vector & contourVec, vector & regionPixels, Point &p) { //Check four-connected - int pointsx[] = {0, 1, 0, -1}; - int pointsy[] = {-1, 0, 1, 0}; + volatile int pointsx[] = {0, 1, 0, -1}; + volatile int pointsy[] = {-1, 0, 1, 0}; for (int i = 0; i < 4; i++) { Point check = Point(p.x + pointsx[i], p.y + pointsy[i]); + if (check.y < -200) + { + cin.get(); + } + if (contains(contourVec, check)) { continue; @@ -72,19 +108,23 @@ Point FloodFill::findStartPoint(vector vec) int x1 = 0, x2 = 0; + //Find left point for (int x = minx; x <= maxx; x++) { if (contains(vec, Point(x, centery))) { - if (x1 == 0) - { - x1 = x; - } - else - { - x2 = x; - break; - } + x1 = x; + break; + } + } + + //Find right point + for (int x = maxx; x >= minx; x--) + { + if (contains(vec, Point(x, centery))) + { + x2 = x; + break; } } @@ -114,15 +154,14 @@ int FloodFill::split(const vector> & contours, const Mat &image, s std::string name = base_filename.substr(0, p); vector> regions; - regions.resize(contours.size()); - for (int i = 0; i < contours.size(); i++) + int i = 0; + for (vector contour : contours) { vector temp; - enclosedPixels(contours[i], temp); - regions[i] = temp; + enclosedPixels(contour, temp); + regions.push_back(temp); } - vector> bounds; BoundingBox::allBoundingBoxes(contours, bounds); @@ -140,34 +179,33 @@ int FloodFill::split(const vector> & contours, const Mat &image, s largest.width = width; } - int nr = 0; - //Create every image for (int i = 0; i < contours.size(); i++) { + // Creeer een witte image - IplImage* iplimage = cvCreateImage(cvSize(image.cols, image.rows), IPL_DEPTH_8U, 3); + IplImage* iplimage = cvCreateImage(cvSize(largest.width, largest.height), IPL_DEPTH_8U, 3); Mat resultImage = cvarrToMat(iplimage); resultImage = Scalar(255, 255, 255); + Point center = Point((bounds[i][0].x + bounds[i][2].x) / 2, (bounds[i][0].y + bounds[i][2].y) / 2); + int topx = center.x - (largest.width / 2); + int topy = center.y - (largest.height / 2); + //Kopieren van pixels for (Point p : regions[i]) { - resultImage.at(p) = image.at(p); + resultImage.at(Point(p.x - topx, p.y - topy)) = image.at(p); } for (Point p : contours[i]) { - resultImage.at(p) = image.at(p); + resultImage.at(Point(p.x - topx, p.y - topy)) = image.at(p); } - Point center = Point((bounds[i][0].x + bounds[i][2].x) / 2, (bounds[i][0].y + bounds[i][2].y) / 2); + imshow("Test", resultImage); + waitKey(0); - Rect r = Rect(center.x - (largest.width / 2), center.y - (largest.height / 2), largest.width, largest.height); - Mat roi(resultImage, r); - - imwrite("output/" + name + "_" + to_string(nr) + ".bmp", roi); - - nr++; + imwrite("output/" + name + "_" + to_string(i) + ".bmp", resultImage); } return 1; diff --git a/AdvancedVision/FloodFill.h b/AdvancedVision/FloodFill.h index 33002bd..f487a4b 100644 --- a/AdvancedVision/FloodFill.h +++ b/AdvancedVision/FloodFill.h @@ -5,6 +5,7 @@ #include #include #include +#include using namespace cv; using namespace std; diff --git a/AdvancedVision/allContoursTestprogramma.cpp b/AdvancedVision/allContoursTestprogramma.cpp index 8d372c3..a57a426 100644 --- a/AdvancedVision/allContoursTestprogramma.cpp +++ b/AdvancedVision/allContoursTestprogramma.cpp @@ -94,16 +94,13 @@ int main(int argc, char *argv[]) } */ - /* + cout << "Bounding boxes bepalen..." << endl; vector> bounds; int aantalB = BoundingBox::allBoundingBoxes(contours, bounds); cout << "Aantal gevonden boundaries = " << aantalB << endl; - */ - - //Split images - FloodFill::split(contours, image, argv[1]); + /* cout << "Fill" << endl; @@ -120,9 +117,9 @@ int main(int argc, char *argv[]) // teken de contouren op de witte image drawContours(contourImage, contours, -1, CV_RGB(255, 0, 0)); - /* drawContours(contourImage, bounds, -1, CV_RGB(0, 0, 255)); + /* for (Point p : region) { circle(contourImage, p, 1, CV_RGB(0, 255, 0)); @@ -132,6 +129,9 @@ int main(int argc, char *argv[]) imshow("Found contours", contourImage); waitKey(0); + //Split images + FloodFill::split(contours, image, argv[1]); + //haal bending energy waarde op cout << "Bending Energy" << endl << "-----------" << endl; diff --git a/AdvancedVision/input/testset3.png b/AdvancedVision/input/testset3.png index b29f2dd..128012b 100644 Binary files a/AdvancedVision/input/testset3.png and b/AdvancedVision/input/testset3.png differ diff --git a/AdvancedVision/input/testset4.png b/AdvancedVision/input/testset4.png new file mode 100644 index 0000000..1cbd11b Binary files /dev/null and b/AdvancedVision/input/testset4.png differ diff --git a/AdvancedVision/output/monsters_0.bmp b/AdvancedVision/output/monsters_0.bmp new file mode 100644 index 0000000..d714072 Binary files /dev/null and b/AdvancedVision/output/monsters_0.bmp differ diff --git a/AdvancedVision/output/monsters_1.bmp b/AdvancedVision/output/monsters_1.bmp new file mode 100644 index 0000000..543085a Binary files /dev/null and b/AdvancedVision/output/monsters_1.bmp differ diff --git a/AdvancedVision/output/testset2_0.bmp b/AdvancedVision/output/testset2_0.bmp new file mode 100644 index 0000000..aec7025 Binary files /dev/null and b/AdvancedVision/output/testset2_0.bmp differ diff --git a/AdvancedVision/output/testset2_1.bmp b/AdvancedVision/output/testset2_1.bmp new file mode 100644 index 0000000..07ff760 Binary files /dev/null and b/AdvancedVision/output/testset2_1.bmp differ diff --git a/AdvancedVision/output/testset2_2.bmp b/AdvancedVision/output/testset2_2.bmp new file mode 100644 index 0000000..32cbc13 Binary files /dev/null and b/AdvancedVision/output/testset2_2.bmp differ diff --git a/AdvancedVision/output/testset2_3.bmp b/AdvancedVision/output/testset2_3.bmp new file mode 100644 index 0000000..e5e38b8 Binary files /dev/null and b/AdvancedVision/output/testset2_3.bmp differ diff --git a/AdvancedVision/output/testset2_4.bmp b/AdvancedVision/output/testset2_4.bmp new file mode 100644 index 0000000..7b31b3c Binary files /dev/null and b/AdvancedVision/output/testset2_4.bmp differ diff --git a/AdvancedVision/output/testset2_5.bmp b/AdvancedVision/output/testset2_5.bmp new file mode 100644 index 0000000..a034d1d Binary files /dev/null and b/AdvancedVision/output/testset2_5.bmp differ diff --git a/AdvancedVision/output/testset2_6.bmp b/AdvancedVision/output/testset2_6.bmp new file mode 100644 index 0000000..d0ad496 Binary files /dev/null and b/AdvancedVision/output/testset2_6.bmp differ diff --git a/AdvancedVision/output/testset2_7.bmp b/AdvancedVision/output/testset2_7.bmp new file mode 100644 index 0000000..9913eef Binary files /dev/null and b/AdvancedVision/output/testset2_7.bmp differ diff --git a/AdvancedVision/output/testset3_0.bmp b/AdvancedVision/output/testset3_0.bmp new file mode 100644 index 0000000..33b322c Binary files /dev/null and b/AdvancedVision/output/testset3_0.bmp differ diff --git a/AdvancedVision/output/testset3_1.bmp b/AdvancedVision/output/testset3_1.bmp new file mode 100644 index 0000000..03e5b74 Binary files /dev/null and b/AdvancedVision/output/testset3_1.bmp differ diff --git a/AdvancedVision/output/testset3_2.bmp b/AdvancedVision/output/testset3_2.bmp new file mode 100644 index 0000000..dd41b51 Binary files /dev/null and b/AdvancedVision/output/testset3_2.bmp differ diff --git a/AdvancedVision/output/testset3_3.bmp b/AdvancedVision/output/testset3_3.bmp new file mode 100644 index 0000000..d3bd705 Binary files /dev/null and b/AdvancedVision/output/testset3_3.bmp differ diff --git a/AdvancedVision/output/testset3_4.bmp b/AdvancedVision/output/testset3_4.bmp new file mode 100644 index 0000000..c3842c5 Binary files /dev/null and b/AdvancedVision/output/testset3_4.bmp differ diff --git a/AdvancedVision/output/testset3_5.bmp b/AdvancedVision/output/testset3_5.bmp new file mode 100644 index 0000000..2169c90 Binary files /dev/null and b/AdvancedVision/output/testset3_5.bmp differ