Контекст: Я обрабатывал научные c спутниковые изображения, в настоящее время сохраняя индивидуальные конечные результаты на каждой временной метке как cv::Mat_<double>
, которые, например, могут храниться в std :: container изображения, такие как std::vector<cv::Mat_<double>>
.
Проблема: Теперь я хотел бы изучить физические свойства каждого отдельного пикселя с течением времени. Для этого было бы гораздо предпочтительнее, если бы я мог смотреть на данные по временному измерению и вместо этого работать с 2D-таблицей векторов. Другими словами: иметь std::vector<double>
, связанный с каждым пикселем в 2D-сетке, общей для всех изображений.
Причина в том, что тип вычислений (вычисление процентилей, аппроксимация кривой и т. Д. c) будет полагаться на std::algorithms
и библиотеки, которые ожидают, что будут загружены std::vectors
и т.п. Однако для данного пикселя данные определенно не являются непрерывными в памяти по временному измерению.
Могу ли я / должен ли я действительно избегать копирования данных в таком случае? Если да, то что будет тогда лучший подход? Под наилучшим я подразумеваю эффективный, но как можно более «чистый» / «чистый».
Я подумал о std::reference_wrapper
для хранения адресов в std::vector
; это просто и работает, но каждая запись занимает столько памяти, как если бы я просто скопировал данные в std::vector<double>
. В конце концов, каждая точка данных - это всего лишь двойник.
NB: Я наткнулся на Boost MultiArray, но мне бы не хотелось добавлять зависимость Boost.
Заранее большое спасибо на ваше время / вклад.