From 43b025b6233717f60da3aa177cabfb0174f349c0 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Tue, 1 Jul 2014 19:34:59 -0400 Subject: [PATCH] Added segment/segmentationgroup --- src/openalpr/segmentation/segment.cpp | 50 +++++++++++++++++++ src/openalpr/segmentation/segment.h | 41 +++++++++++++++ .../segmentation/segmentationgroup.cpp | 49 ++++++++++++++++++ src/openalpr/segmentation/segmentationgroup.h | 50 +++++++++++++++++++ 4 files changed, 190 insertions(+) create mode 100644 src/openalpr/segmentation/segment.cpp create mode 100644 src/openalpr/segmentation/segment.h create mode 100644 src/openalpr/segmentation/segmentationgroup.cpp create mode 100644 src/openalpr/segmentation/segmentationgroup.h diff --git a/src/openalpr/segmentation/segment.cpp b/src/openalpr/segmentation/segment.cpp new file mode 100644 index 0000000..1650cc5 --- /dev/null +++ b/src/openalpr/segmentation/segment.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2013 New Designs Unlimited, LLC + * Opensource Automated License Plate Recognition [http://www.openalpr.com] + * + * This file is part of OpenAlpr. + * + * OpenAlpr is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License + * version 3 as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . +*/ + +#include "segment.h" + +Segment::Segment(cv::Rect newSegment) +{ + this->segment = newSegment; +} + +Segment::~Segment() +{ + +} + +bool Segment::matches(cv::Rect newSegment) +{ + // Compare the two segments with a given leniency + const float WIDTH_LENIENCY_MIN = 0.25; + const float WIDTH_LENIENCY_MAX = 0.20; + + float left_min = segment.x - (((float)segment.width) * WIDTH_LENIENCY_MIN); + float left_max = segment.x + (((float)segment.width) * WIDTH_LENIENCY_MAX); + float right_min = (segment.x + segment.width) - (((float)segment.width) * WIDTH_LENIENCY_MIN); + float right_max = (segment.x + segment.width) + (((float)segment.width) * WIDTH_LENIENCY_MAX); + + int newSegRight = newSegment.x + newSegment.width; + if (newSegment.x >= left_min && newSegment.x <= left_max && + newSegRight >= right_min && newSegRight <= right_max) + return true; + + return false; +} + diff --git a/src/openalpr/segmentation/segment.h b/src/openalpr/segmentation/segment.h new file mode 100644 index 0000000..7743ab6 --- /dev/null +++ b/src/openalpr/segmentation/segment.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2013 New Designs Unlimited, LLC + * Opensource Automated License Plate Recognition [http://www.openalpr.com] + * + * This file is part of OpenAlpr. + * + * OpenAlpr is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License + * version 3 as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . +*/ + +#ifndef OPENALPR_SEGMENT_H +#define OPENALPR_SEGMENT_H + +#include +#include + +#include "opencv2/imgproc/imgproc.hpp" + +class Segment +{ + + public: + Segment(cv::Rect newSegment); + virtual ~Segment(); + + cv::Rect segment; + + bool matches(cv::Rect newSegment); + +}; + +#endif // OPENALPR_SEGMENTATIONGROUP_H diff --git a/src/openalpr/segmentation/segmentationgroup.cpp b/src/openalpr/segmentation/segmentationgroup.cpp new file mode 100644 index 0000000..a146364 --- /dev/null +++ b/src/openalpr/segmentation/segmentationgroup.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2013 New Designs Unlimited, LLC + * Opensource Automated License Plate Recognition [http://www.openalpr.com] + * + * This file is part of OpenAlpr. + * + * OpenAlpr is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License + * version 3 as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . +*/ + +#include "segmentationgroup.h" + +SegmentationGroup::SegmentationGroup() +{ + +} + +SegmentationGroup::~SegmentationGroup() +{ + +} + +void SegmentationGroup::add(int segmentID) +{ + this->segmentIDs.push_back(segmentID); +} + +bool SegmentationGroup::equals(SegmentationGroup otherGroup) +{ + if (segmentIDs.size() != otherGroup.segmentIDs.size()) + return false; + + for (int i = 0; i < segmentIDs.size(); i++) + { + if (otherGroup.segmentIDs[i] != segmentIDs[i]) + return false; + } + + return true; +} \ No newline at end of file diff --git a/src/openalpr/segmentation/segmentationgroup.h b/src/openalpr/segmentation/segmentationgroup.h new file mode 100644 index 0000000..d9cc633 --- /dev/null +++ b/src/openalpr/segmentation/segmentationgroup.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2013 New Designs Unlimited, LLC + * Opensource Automated License Plate Recognition [http://www.openalpr.com] + * + * This file is part of OpenAlpr. + * + * OpenAlpr is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License + * version 3 as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . +*/ + +#ifndef OPENALPR_SEGMENTATIONGROUP_H +#define OPENALPR_SEGMENTATIONGROUP_H + +#include +#include + +#include "opencv2/imgproc/imgproc.hpp" + +#include "segment.h" + + +class SegmentationGroup +{ + + public: + SegmentationGroup(); + virtual ~SegmentationGroup(); + + void add(int segmentID); + + std::vector segmentIDs; + + bool equals(SegmentationGroup otherGroup); + + + private: + float strength; // Debuggin purposes -- how many threshold segmentations match this one perfectly + +}; + +#endif // OPENALPR_SEGMENTATIONGROUP_H