From fe0d58aeb968799e833ede9a14e3ba8d89017448 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 29 Jan 2014 22:36:41 -0600 Subject: [PATCH] Using median calculation for charwidth/height rather than average --- src/openalpr/charactersegmenter.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/openalpr/charactersegmenter.cpp b/src/openalpr/charactersegmenter.cpp index 1a20cc4..1808892 100644 --- a/src/openalpr/charactersegmenter.cpp +++ b/src/openalpr/charactersegmenter.cpp @@ -93,28 +93,30 @@ CharacterSegmenter::CharacterSegmenter(Mat img, bool invertedColors, Config* con imgDbgGeneral.push_back(bordered); } - // Figure out the average character width - float totalCharWidth = 0; - float totalCharHeight = 0; + if (charAnalysis->linePolygon.size() > 0) { this->top = LineSegment(charAnalysis->linePolygon[0].x, charAnalysis->linePolygon[0].y, charAnalysis->linePolygon[1].x, charAnalysis->linePolygon[1].y); this->bottom = LineSegment(charAnalysis->linePolygon[3].x, charAnalysis->linePolygon[3].y, charAnalysis->linePolygon[2].x, charAnalysis->linePolygon[2].y); + vector charWidths; + vector charHeights; + for (int i = 0; i < charAnalysis->bestContours.size(); i++) { if (charAnalysis->bestCharSegments[i] == false) continue; + Rect mr = boundingRect(charAnalysis->bestContours[i]); - totalCharWidth += mr.width; - totalCharHeight += mr.height; + + charWidths.push_back(mr.width); + charHeights.push_back(mr.height); } - int numSamples = charAnalysis->bestCharSegmentsCount; - float avgCharWidth = totalCharWidth / numSamples; - float avgCharHeight = totalCharHeight / numSamples; + float avgCharWidth = median(charWidths.data(), charWidths.size()); + float avgCharHeight = median(charHeights.data(), charHeights.size()); removeSmallContours(charAnalysis->thresholds, charAnalysis->allContours, avgCharWidth, avgCharHeight);