42 std::vector<Keypoint>,
43 std::vector<TrackResult>>;
71 [[nodiscard]] std::span<const float>
as_span() const noexcept
73 const auto* v = std::get_if<std::vector<float>>(&
pixel_image);
76 return { v->data(), v->size() };
111 std::span<const float> frame,
112 uint32_t w, uint32_t
h);
145 static constexpr size_t k_slot_count = 11;
146 static constexpr size_t k_slot_cur = 0;
147 static constexpr size_t k_slot_nxt = 1;
148 static constexpr size_t k_slot_tmp = 2;
149 static constexpr size_t k_slot_dx = 3;
150 static constexpr size_t k_slot_dy = 4;
151 static constexpr size_t k_slot_ixx = 5;
152 static constexpr size_t k_slot_iyy = 6;
153 static constexpr size_t k_slot_ixy = 7;
154 static constexpr size_t k_slot_sxx = 8;
155 static constexpr size_t k_slot_syy = 9;
156 static constexpr size_t k_slot_sxy = 10;
158 std::array<Kakshya::DataVariant, k_slot_count>
m_slots;
159 uint32_t m_slot_w { 0 };
160 uint32_t m_slot_h { 0 };
167 void ensure_slots(uint32_t w, uint32_t
h);
172 [[nodiscard]] std::vector<float>&
slot_vec(
size_t i)
noexcept
174 return std::get<std::vector<float>>(m_slots[i]);
180 [[nodiscard]]
const std::vector<float>&
slot_vec(
size_t i)
const noexcept
182 return std::get<std::vector<float>>(m_slots[i]);
188 [[nodiscard]] Eigen::Map<const Eigen::ArrayXf>
slot_map(
size_t i, Eigen::Index n)
const noexcept
190 return { slot_vec(i).data(), n };
196 [[nodiscard]] Eigen::Map<Eigen::ArrayXf>
slot_map_mut(
size_t i, Eigen::Index n)
noexcept
198 return { slot_vec(i).data(), n };
219 [[nodiscard]]
const std::vector<float>& gaussian_kernel(
float sigma);
Connected component labelling on normalised float masks.
Gradient and edge detection on normalised float image spans.
Sparse optical flow via Lucas-Kanade tracker.
Declarative description of a Kinesis::Vision processing sequence.
std::array< Kakshya::DataVariant, k_slot_count > m_slots
Eigen::Map< Eigen::ArrayXf > slot_map_mut(size_t i, Eigen::Index n) noexcept
Zero-copy mutable Eigen::Map<ArrayXf> over slot i.
const std::vector< float > & slot_vec(size_t i) const noexcept
Const reference to the vector<float> inside slot i.
std::vector< float > m_curr_gray_cache
std::vector< float > & slot_vec(size_t i) noexcept
Mutable reference to the vector<float> inside slot i.
std::unordered_map< uint32_t, std::vector< float > > m_kernel_cache
std::vector< Keypoint > m_prev_keypoints
Eigen::Map< const Eigen::ArrayXf > slot_map(size_t i, Eigen::Index n) const noexcept
Zero-copy read-only Eigen::Map<const ArrayXf> over slot i.
Stateful executor for a VisionSequence.
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
std::variant< std::monostate, GradientResult, ComponentResult, std::vector< Contour >, std::vector< Keypoint >, std::vector< TrackResult > > StructuredOutput
Result of connected component labelling.
Gradient maps produced by Sobel and Scharr operators.
std::shared_ptr< Core::VKImage > debug_labels
std::vector< SnapshotEntry > snapshots
Kakshya::DataVariant pixel_image
StructuredOutput structured
std::shared_ptr< Core::VKImage > debug_contours
std::span< const float > as_span() const noexcept
Zero-copy float span into pixel_image storage.
Result of executing a VisionSequence on one frame.
Ordered sequence of VisionSteps describing a complete vision pipeline.