MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ extract_group_data()

template<typename T >
std::vector< std::vector< T > > MayaFlux::Kakshya::extract_group_data ( const std::vector< std::span< const T > > &  source_spans,
const RegionGroup group,
const std::vector< DataDimension > &  dimensions,
OrganizationStrategy  organization 
)

Extract data for multiple regions from multi-channel source data.

Template Parameters
TData type.
Parameters
source_spansVector of source data spans (one per channel).
groupGroup of regions to extract.
dimensionsDimension descriptors.
organizationStorage organization strategy.
Returns
Vector of vectors, each containing extracted data for one region.

Definition at line 146 of file RegionUtils.hpp.

151{
152 std::vector<std::vector<T>> result;
153 result.reserve(group.regions.size());
154
155 for (const auto& region : group.regions) {
156 auto region_data = extract_region_data<T>(source_spans, region, dimensions, organization);
157
158 if (organization == OrganizationStrategy::INTERLEAVED) {
159 if (result.empty())
160 result.resize(1);
161
162 for (size_t i = 0; i < region_data[0].size(); i++) {
163 result[0].push_back(region_data[0][i]);
164 }
165 } else {
166 if (result.empty())
167 result.resize(region_data.size());
168
169 auto channel_pairs = std::views::zip(result, region_data);
170 auto total_sizes = channel_pairs | std::views::transform([](auto&& pair) {
171 return std::get<0>(pair).size() + std::get<1>(pair).size();
172 });
173
174 size_t i = 0;
175 for (auto size : total_sizes) {
176 result[i].reserve(size);
177 std::ranges::copy(region_data[i],
178 std::back_inserter(result[i]));
179 ++i;
180 }
181 }
182 }
183
184 return result;
185}
std::vector< Region > regions
Collection of regions belonging to this group.

References INTERLEAVED, and MayaFlux::Kakshya::RegionGroup::regions.