28 explicit MedianFilter(
size_t size) : m_valueBuffer(size), m_size{size} {}
40 size_t curSize = m_orderedValues.size();
44 if (curSize > m_size) {
45 m_orderedValues.erase(
std::find(m_orderedValues.begin(),
46 m_orderedValues.end(),
47 m_valueBuffer.pop_back()));
52 m_valueBuffer.push_front(next);
54 if (curSize % 2 != 0) {
56 return m_orderedValues[curSize / 2];
59 return (m_orderedValues[curSize / 2 - 1] + m_orderedValues[curSize / 2]) /
69 T
LastValue()
const {
return m_valueBuffer.front(); }
75 m_orderedValues.clear();
76 m_valueBuffer.reset();
81 std::vector<T> m_orderedValues;
This is a simple circular buffer so we don't need to "bucket brigade" copy old values.
Definition: circular_buffer.h:20
FMT_CONSTEXPR auto find(Ptr first, Ptr last, T value, Ptr &out) -> bool
Definition: core.h:2120
Definition: AprilTagPoseEstimator.h:15
std::vector< T >::iterator insert_sorted(std::vector< T > &vec, T const &item)
Definition: Algorithm.h:16