MayaFlux 0.4.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 170 of file RegionUtils.hpp.

175{
176 std::vector<std::vector<T>> result;
177 result.reserve(group.regions.size());
178
179 for (const auto& region : group.regions) {
180 auto region_data = extract_region_data<T>(source_spans, region, dimensions, organization);
181
182 if (organization == OrganizationStrategy::INTERLEAVED) {
183 if (result.empty())
184 result.resize(1);
185
186 for (size_t i = 0; i < region_data[0].size(); i++) {
187 result[0].push_back(region_data[0][i]);
188 }
189 } else {
190 if (result.empty())
191 result.resize(region_data.size());
192
193 auto channel_pairs = std::views::zip(result, region_data);
194 auto total_sizes = channel_pairs | std::views::transform([](auto&& pair) {
195 return std::get<0>(pair).size() + std::get<1>(pair).size();
196 });
197
198 size_t i = 0;
199 for (auto size : total_sizes) {
200 result[i].reserve(size);
201 std::ranges::copy(region_data[i],
202 std::back_inserter(result[i]));
203 ++i;
204 }
205 }
206 }
207
208 return result;
209}
Range size
std::vector< Region > regions
Collection of regions belonging to this group.

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