Moved more data members to textline

This commit is contained in:
Matt Hill
2014-10-13 22:43:55 -04:00
parent 97518ecd89
commit 8e83e43ecb
6 changed files with 29 additions and 24 deletions

View File

@@ -39,7 +39,7 @@ CharacterRegion::CharacterRegion(PipelineData* pipeline_data)
charAnalysis->analyze(); charAnalysis->analyze();
pipeline_data->plate_inverted = charAnalysis->thresholdsInverted; pipeline_data->plate_inverted = charAnalysis->thresholdsInverted;
if (this->debug && charAnalysis->linePolygon.size() > 0) if (this->debug && pipeline_data->textLines.size() > 0)
{ {
vector<Mat> tempDash; vector<Mat> tempDash;
for (uint z = 0; z < pipeline_data->thresholds.size(); z++) for (uint z = 0; z < pipeline_data->thresholds.size(); z++)
@@ -67,7 +67,7 @@ CharacterRegion::CharacterRegion(PipelineData* pipeline_data)
} }
if (charAnalysis->linePolygon.size() > 0) if (pipeline_data->textLines.size() > 0)
{ {
int confidenceDrainers = 0; int confidenceDrainers = 0;
int charSegmentCount = charAnalysis->bestContours.getGoodIndicesCount(); int charSegmentCount = charAnalysis->bestContours.getGoodIndicesCount();

View File

@@ -51,7 +51,7 @@ CharacterSegmenter::CharacterSegmenter(PipelineData* pipeline_data)
displayImage(config, "CharacterSegmenter Thresholds", drawImageDashboard(pipeline_data->thresholds, CV_8U, 3)); displayImage(config, "CharacterSegmenter Thresholds", drawImageDashboard(pipeline_data->thresholds, CV_8U, 3));
} }
if (this->config->debugCharSegmenter && charAnalysis->linePolygon.size() > 0) if (this->config->debugCharSegmenter && pipeline_data->textLines.size() > 0)
{ {
Mat img_contours(charAnalysis->bestThreshold.size(), CV_8U); Mat img_contours(charAnalysis->bestThreshold.size(), CV_8U);
charAnalysis->bestThreshold.copyTo(img_contours); charAnalysis->bestThreshold.copyTo(img_contours);
@@ -74,20 +74,21 @@ CharacterSegmenter::CharacterSegmenter(PipelineData* pipeline_data)
cv::Scalar(0,255,0), // in green cv::Scalar(0,255,0), // in green
1); // with a thickness of 1 1); // with a thickness of 1
if (charAnalysis->linePolygon.size() > 0)
{ line(img_contours, pipeline_data->textLines[0].linePolygon[0], pipeline_data->textLines[0].linePolygon[1], Scalar(255, 0, 255), 1);
line(img_contours, charAnalysis->linePolygon[0], charAnalysis->linePolygon[1], Scalar(255, 0, 255), 1); line(img_contours, pipeline_data->textLines[0].linePolygon[3], pipeline_data->textLines[0].linePolygon[2], Scalar(255, 0, 255), 1);
line(img_contours, charAnalysis->linePolygon[3], charAnalysis->linePolygon[2], Scalar(255, 0, 255), 1);
}
Mat bordered = addLabel(img_contours, "Best Contours"); Mat bordered = addLabel(img_contours, "Best Contours");
imgDbgGeneral.push_back(bordered); imgDbgGeneral.push_back(bordered);
} }
if (charAnalysis->linePolygon.size() > 0) if (pipeline_data->textLines.size() > 0)
{ {
this->top = LineSegment(charAnalysis->linePolygon[0].x, charAnalysis->linePolygon[0].y, charAnalysis->linePolygon[1].x, charAnalysis->linePolygon[1].y); this->top = LineSegment(pipeline_data->textLines[0].linePolygon[0].x, pipeline_data->textLines[0].linePolygon[0].y,
this->bottom = LineSegment(charAnalysis->linePolygon[3].x, charAnalysis->linePolygon[3].y, charAnalysis->linePolygon[2].x, charAnalysis->linePolygon[2].y); pipeline_data->textLines[0].linePolygon[1].x, pipeline_data->textLines[0].linePolygon[1].y);
this->bottom = LineSegment(pipeline_data->textLines[0].linePolygon[3].x, pipeline_data->textLines[0].linePolygon[3].y,
pipeline_data->textLines[0].linePolygon[2].x, pipeline_data->textLines[0].linePolygon[2].y);
vector<int> charWidths; vector<int> charWidths;
vector<int> charHeights; vector<int> charHeights;
@@ -120,7 +121,7 @@ CharacterSegmenter::CharacterSegmenter(PipelineData* pipeline_data)
{ {
Mat histogramMask = Mat::zeros(pipeline_data->thresholds[i].size(), CV_8U); Mat histogramMask = Mat::zeros(pipeline_data->thresholds[i].size(), CV_8U);
fillConvexPoly(histogramMask, charAnalysis->linePolygon.data(), charAnalysis->linePolygon.size(), Scalar(255,255,255)); fillConvexPoly(histogramMask, pipeline_data->textLines[0].linePolygon.data(), pipeline_data->textLines[0].linePolygon.size(), Scalar(255,255,255));
VerticalHistogram vertHistogram(pipeline_data->thresholds[i], histogramMask); VerticalHistogram vertHistogram(pipeline_data->thresholds[i], histogramMask);

View File

@@ -49,6 +49,7 @@ void CharacterAnalysis::analyze()
timespec startTime; timespec startTime;
getTime(&startTime); getTime(&startTime);
pipeline_data->textLines.clear();
for (uint i = 0; i < pipeline_data->thresholds.size(); i++) for (uint i = 0; i < pipeline_data->thresholds.size(); i++)
{ {
@@ -149,18 +150,19 @@ void CharacterAnalysis::analyze()
displayImage(config, "Matching Contours", img_contours); displayImage(config, "Matching Contours", img_contours);
} }
this->linePolygon = getBestVotedLines(pipeline_data->crop_gray, bestContours); vector<Point> linePolygon = getBestVotedLines(pipeline_data->crop_gray, bestContours);
if (this->linePolygon.size() > 0) if (linePolygon.size() > 0)
{ {
LineSegment topLine = LineSegment(this->linePolygon[0].x, this->linePolygon[0].y, this->linePolygon[1].x, this->linePolygon[1].y);
LineSegment bottomLine = LineSegment(this->linePolygon[3].x, this->linePolygon[3].y, this->linePolygon[2].x, this->linePolygon[2].y); LineSegment topLine = LineSegment(linePolygon[0].x, linePolygon[0].y, linePolygon[1].x, linePolygon[1].y);
LineSegment bottomLine = LineSegment(linePolygon[3].x, linePolygon[3].y, linePolygon[2].x, linePolygon[2].y);
filterBetweenLines(bestThreshold, bestContours, linePolygon); filterBetweenLines(bestThreshold, bestContours, linePolygon);
vector<Point> textArea = getCharArea(topLine, bottomLine); vector<Point> textArea = getCharArea(topLine, bottomLine);
TextLine textLine(textArea, topLine, bottomLine); TextLine textLine(textArea, linePolygon);
pipeline_data->textLines.push_back(textLine); pipeline_data->textLines.push_back(textLine);
} }

View File

@@ -39,8 +39,6 @@ class CharacterAnalysis
TextContours bestContours; TextContours bestContours;
std::vector<cv::Point> linePolygon;
bool thresholdsInverted; bool thresholdsInverted;
bool isTwoLine; bool isTwoLine;

View File

@@ -20,12 +20,15 @@
#include "textline.h" #include "textline.h"
TextLine::TextLine(std::vector<cv::Point> textArea, LineSegment topLine, LineSegment bottomLine) { TextLine::TextLine(std::vector<cv::Point> textArea, std::vector<cv::Point> linePolygon) {
if (textArea.size() > 0) if (textArea.size() > 0)
{ {
this->textArea = textArea; this->textArea = textArea;
this->topLine = topLine; this->linePolygon = linePolygon;
this->bottomLine = bottomLine;
this->topLine = LineSegment(linePolygon[0].x, linePolygon[0].y, linePolygon[1].x, linePolygon[1].y);
this->bottomLine = LineSegment(linePolygon[3].x, linePolygon[3].y, linePolygon[2].x, linePolygon[2].y);
this->charBoxTop = LineSegment(textArea[0].x, textArea[0].y, textArea[1].x, textArea[1].y); this->charBoxTop = LineSegment(textArea[0].x, textArea[0].y, textArea[1].x, textArea[1].y);
this->charBoxBottom = LineSegment(textArea[3].x, textArea[3].y, textArea[2].x, textArea[2].y); this->charBoxBottom = LineSegment(textArea[3].x, textArea[3].y, textArea[2].x, textArea[2].y);
this->charBoxLeft = LineSegment(textArea[3].x, textArea[3].y, textArea[0].x, textArea[0].y); this->charBoxLeft = LineSegment(textArea[3].x, textArea[3].y, textArea[0].x, textArea[0].y);

View File

@@ -25,9 +25,10 @@
class TextLine { class TextLine {
public: public:
TextLine(std::vector<cv::Point> textArea, LineSegment topLine, LineSegment bottomLine); TextLine(std::vector<cv::Point> textArea, std::vector<cv::Point> linePolygon);
virtual ~TextLine(); virtual ~TextLine();
std::vector<cv::Point> linePolygon;
std::vector<cv::Point> textArea; std::vector<cv::Point> textArea;
LineSegment topLine; LineSegment topLine;
LineSegment bottomLine; LineSegment bottomLine;