3line detection

Former-commit-id: a63c03bc276ef218981213fbb9743a3d6d12d8b6
This commit is contained in:
wisc 2016-01-04 00:20:47 +01:00
parent 469ea42f49
commit 633985930b
2 changed files with 25 additions and 10 deletions

View File

@ -65,6 +65,8 @@ namespace hyperion
// only test the topleft third of the image // only test the topleft third of the image
int width = image.width() / 3; int width = image.width() / 3;
int height = image.height() / 3; int height = image.height() / 3;
int width2 = width * 2;
int height2 = height * 2;
int xCenter = image.width() / 2; int xCenter = image.width() / 2;
int yCenter = image.height() / 2; int yCenter = image.height() / 2;
// int maxSize = std::max(width, height); // int maxSize = std::max(width, height);
@ -77,8 +79,10 @@ namespace hyperion
// find first X pixel of the image // find first X pixel of the image
for (int x = 0; x < width; ++x) for (int x = 0; x < width; ++x)
{ {
const Pixel_T & color = image(x, yCenter); const Pixel_T & color1 = image(x, yCenter);
if (!isBlack(color)) const Pixel_T & color2 = image(x, height);
const Pixel_T & color3 = image(x, height2);
if (!isBlack(color1) || !isBlack(color2) || !isBlack(color3))
{ {
firstNonBlackXPixelIndex = x; firstNonBlackXPixelIndex = x;
break; break;
@ -88,8 +92,10 @@ namespace hyperion
// find first Y pixel of the image // find first Y pixel of the image
for (int y = 0; y < height; ++y) for (int y = 0; y < height; ++y)
{ {
const Pixel_T & color = image(xCenter, y); const Pixel_T & color1 = image(xCenter, y);
if (!isBlack(color)) const Pixel_T & color2 = image(width, y);
const Pixel_T & color3 = image(width2, y);
if (!isBlack(color1) || !isBlack(color2) || !isBlack(color3))
{ {
firstNonBlackYPixelIndex = y; firstNonBlackYPixelIndex = y;
break; break;

View File

@ -1,4 +1,4 @@
//#include <iostream>
// Blackborder includes // Blackborder includes
#include <blackborder/BlackBorderProcessor.h> #include <blackborder/BlackBorderProcessor.h>
@ -28,15 +28,20 @@ bool BlackBorderProcessor::updateBorder(const BlackBorder & newDetectedBorder)
{ {
// set the consistency counter // set the consistency counter
if (newDetectedBorder == _previousDetectedBorder) if (newDetectedBorder == _previousDetectedBorder)
{
if (_consistentCnt < 100000)
{ {
++_consistentCnt; ++_consistentCnt;
} }
}
else else
{ {
_previousDetectedBorder = newDetectedBorder; _previousDetectedBorder = newDetectedBorder;
_consistentCnt = 0; _consistentCnt = 0;
} }
// std::cout << "new: " << newDetectedBorder.verticalSize << " " << newDetectedBorder.horizontalSize << " cur: " << _currentBorder.verticalSize << " " << _currentBorder.horizontalSize << " cc " << _consistentCnt << std::endl;
// check if there is a change // check if there is a change
if (_currentBorder == newDetectedBorder) if (_currentBorder == newDetectedBorder)
{ {
@ -48,7 +53,8 @@ bool BlackBorderProcessor::updateBorder(const BlackBorder & newDetectedBorder)
if (newDetectedBorder.unknown) if (newDetectedBorder.unknown)
{ {
// apply the unknown border if we consistently can't determine a border // apply the unknown border if we consistently can't determine a border
if (_consistentCnt == _unknownSwitchCnt) // if (_consistentCnt == _unknownSwitchCnt)
if (_consistentCnt >= _unknownSwitchCnt)
{ {
_currentBorder = newDetectedBorder; _currentBorder = newDetectedBorder;
borderChanged = true; borderChanged = true;
@ -57,7 +63,8 @@ bool BlackBorderProcessor::updateBorder(const BlackBorder & newDetectedBorder)
else else
{ {
// apply the detected border if it has been detected consistently // apply the detected border if it has been detected consistently
if (_currentBorder.unknown || _consistentCnt == _borderSwitchCnt) // if (_currentBorder.unknown || _consistentCnt == _borderSwitchCnt)
if (_currentBorder.unknown || _consistentCnt >= _borderSwitchCnt)
{ {
_currentBorder = newDetectedBorder; _currentBorder = newDetectedBorder;
borderChanged = true; borderChanged = true;
@ -65,13 +72,15 @@ bool BlackBorderProcessor::updateBorder(const BlackBorder & newDetectedBorder)
else else
{ {
// apply smaller borders immediately // apply smaller borders immediately
if (newDetectedBorder.verticalSize < _currentBorder.verticalSize) // if (newDetectedBorder.verticalSize < _currentBorder.verticalSize)
if ( (newDetectedBorder.verticalSize < _currentBorder.verticalSize) && (_consistentCnt >= 1) )// almost immediatly - avoid switching for "abnormal" frames
{ {
_currentBorder.verticalSize = newDetectedBorder.verticalSize; _currentBorder.verticalSize = newDetectedBorder.verticalSize;
borderChanged = true; borderChanged = true;
} }
if (newDetectedBorder.horizontalSize < _currentBorder.horizontalSize) // if (newDetectedBorder.horizontalSize < _currentBorder.horizontalSize)
if ( (newDetectedBorder.horizontalSize < _currentBorder.horizontalSize) && (_consistentCnt >= 1) )
{ {
_currentBorder.horizontalSize = newDetectedBorder.horizontalSize; _currentBorder.horizontalSize = newDetectedBorder.horizontalSize;
borderChanged = true; borderChanged = true;