Программное обеспечение для формирования фантомных изображений. Включает в себя модули:
gi.experiment-- формирование фантомных изображений из экспериментальных данныхgi.emulation-- эмуляция экспериментов по формированию фантомных изображений, в т.ч. в волоконной фантомной оптикеgi.slm-- эмуляция фазовой и амплитудной модуляции излучения с помощью SLM и DMD
ПО на уровне интерфейсов совместимо с библиотекой быстрого расчета распространения полей lightprop2d и библиотекой расчета мод в многомодовых волокнах pyMMF.
gi.experiment и gi.emulation поддерживают вычисления на CPU с помощью numpy и на GPU с помощью cupy.
При больших объёмах данных используется dask.array для предотвращения утечек памяти и ускорения вычислений.
Исследование выполнено за счет гранта Российского научного фонда (проект № 21-12-00155).
Публичные атрибуты классов GIEmulator и GIExpDataProcessor делятся на 4 категории по размерности возвращаемых значений:
- Трехмерные массивы
numpy:xycorr_widths_data:(2, self.Nx if nx is None else nx, self.Ny if ny is None else ny), гдеnx,ny-- аргументы методаcalculate_xycorr_widths. - Двухмерные массивы
numpy:g2_data,ghost_data,contrast_data:(self.Nx, self.Ny);xycorr_data:(self.Nx, self.Ny) if window_points is None else (window_points,)*2, гдеwindow_points-- аргумент методаcalculate_xycorr. - Одномерные массивы
numpy:timecorr_data:(self.settings.TCPOINTS if tcpoints is None else tcpoints), гдеtcpoints-- аргумент методаcalculate_timecorr;xycorr_width:(2,). - Числа типа
float:g2,contrast,timecorr_width.
Возвращаемые значения имеют следующий смысл:
ghost_data-- фантомное изображение объектаxycorr_data-- пространственная корреляционная функция интенсивности в референсном каналеxycorr_width-- ширина пространственной корреляционной функции интенсивности в референсном канале по двум координатамxycorr_widths_data-- попиксельное значение ширины пространственной корреляционной функции интенсивности в референсном каналеg2_data-- попиксельное значение второго нормированного момента интенсивностиg2, характеризующего дисперсию данныхg2-- среднее значениеg2по изображению, либо в центре изображения, еслиxycorr_widths_dataне рассчитываласьcontrast_data-- попиксельный контраст фантомного изображения объектаcontrast-- среднее значение контрастаtimecorr_data-- временная корреляционная функция изображенийtimecorr_width-- ширина временной корреляционной функции
Классы GIEmulator и GIExpDataProcessor позволяют ускорять вычисления, используя вычисления на GPU с помощью cupy.
Для этого переопределяется self.backend -- бэкенд вычислений, который определяет типы массивов ref_data,obj_data.
Использование GPU для расчета фантомных изображений регулируется ключом use_cupy: если True, то self.backend = cupy и self.ref_data,self.obj_data являются массивами cupy.ndarray.
По умолчанию use_cupy=False, self.backend = numpy и self.ref_data,self.obj_data -- массивы numpy.ndarray.
В классе GIEmulator есть дополнительный управляющий флаг use_gpu, аналогичным способом управляющий типом массивов при эмуляции фантомных изображений с помощью класса lightprop2d.Beam2D.
Если use_cupy=True, то автоматически use_gpu=True для уменьшения накладных расходов на преобразование данных.
При обработке больших объемов данных могут возникать утечки памяти.
Для избежания их используются оркестрированные локальные вычисления с помощью Dask с разделением self.ref_data на блоки и последующим ленивым вычислением результатов.
Активирует оркестрацию флаг use_dask: если True, то self.ref_data является массивом dask.array.Array, по умолчанию use_dask=False и self.ref_data -- массивы self.backend.ndarray.
Класс GIEmulator позволяет эмулировать процесс расчета фантомного изображения на основе экспериментальных спекл-картин.
Для использования этой процедуры необходимо задать следующие аргументы конструктора:
use_expdata=Trueexpdata_dir="Путь к папке изображений абсолютный или относительно текущей папки".expdata_crop=(low_y, high_y, low_x, high_x)Координаты углов для обрезки изображения.img_prefixПостоянная часть имени файлов для фильтрации изображений в папке.