14 static constexpr
int CENTER = dataSize / 2;
18 static_assert(NEIGHBORHOOD >= 0);
38 const std::array<ImageType, Config::dataSize>& data,
39 const uint8_t percentCoefficient = 100)
41 uint16_t maxValue = findMaxValue(data);
42 m_threshold = (maxValue * percentCoefficient) / 100;
51 int findBorder(
const std::array<ImageType, Config::dataSize>& data)
53 int16_t previousLeftBorder = m_leftBorder;
54 int16_t previousRightBorder = m_rightBorder;
55 int16_t middle = (previousRightBorder + previousLeftBorder) / 2;
59 bool findPreviousLeft = isBorderAroundPreviousIndex(data, previousLeftBorder, m_leftBorder);
60 bool findPreviousRight = isBorderAroundPreviousIndex(data, previousRightBorder, m_rightBorder);
62 if (findPreviousLeft && findPreviousRight) {
66 if (!findPreviousLeft) {
67 int16_t leftMaxBorderIndex = std::max_element(data.begin(), data.begin() + middle) - data.begin();
68 if (data[leftMaxBorderIndex] > m_threshold) {
69 m_leftBorder = leftMaxBorderIndex;
73 if (!findPreviousRight) {
74 int16_t rightMaxBorderIndex = std::max_element(data.begin() + middle, data.end()) - data.begin();
75 if (data[rightMaxBorderIndex] > m_threshold) {
76 m_rightBorder = rightMaxBorderIndex;
89 return m_distanceCenter - m_leftBorder;
98 return m_rightBorder - m_distanceCenter;
111 int error(
const int percentCoefficient = 100)
const 115 rawError = (rawError * percentCoefficient) / 100;
133 return m_rightBorder;
145 const std::array<ImageType, Config::dataSize>& data,
146 const uint8_t offset = 5)
const 150 if (data[i] > data[at]) {
166 bool isBorderAroundPreviousIndex(
167 const std::array<ImageType, Config::dataSize>& data,
168 const int previousBorder,
172 uint16_t maxValue = m_threshold;
175 for (; index <= indexMax; ++index) {
176 if (data[index] > maxValue) {
177 maxValue = data[index];
185 int m_leftBorder = 0;
190 uint16_t m_threshold = 0;
Camera::ImageType ImageType
Definition: BorderDetector.h:10
static constexpr int ImageSize
Definition: Camera.h:12
int rightBorder() const
Definition: BorderDetector.h:131
int rightDistanceFromCenter() const
Definition: BorderDetector.h:96
int findBorder(const std::array< ImageType, Config::dataSize > &data)
Definition: BorderDetector.h:51
static constexpr int NEIGHBORHOOD
Definition: BorderDetector.h:16
static constexpr int dataSize
Definition: BorderDetector.h:13
int error(const int percentCoefficient=100) const
Definition: BorderDetector.h:111
static constexpr int RIGHT_BORDER
Definition: BorderDetector.h:15
Definition: BorderDetector.h:8
Definition: BorderDetector.h:6
int leftBorder() const
Definition: BorderDetector.h:123
BorderDetector(Config config)
Definition: BorderDetector.h:26
void initalize(const std::array< ImageType, Config::dataSize > &data, const uint8_t percentCoefficient=100)
Definition: BorderDetector.h:37
Definition: BorderDetector.h:12
static constexpr int CENTER
Definition: BorderDetector.h:14
int leftDistanceFromCenter() const
Definition: BorderDetector.h:87
uint16_t ImageType
Definition: Camera.h:13