MayaFlux 0.3.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 152 of file RegionUtils.hpp.

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

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