Skip to content

Code to reconstruct and emulate amplitude ghost images

License

Notifications You must be signed in to change notification settings

vongostev/ghost_images

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ghost_images

Программное обеспечение для формирования фантомных изображений. Включает в себя модули:

  1. gi.experiment -- формирование фантомных изображений из экспериментальных данных
  2. gi.emulation -- эмуляция экспериментов по формированию фантомных изображений, в т.ч. в волоконной фантомной оптике
  3. gi.slm -- эмуляция фазовой и амплитудной модуляции излучения с помощью SLM и DMD

ПО на уровне интерфейсов совместимо с библиотекой быстрого расчета распространения полей lightprop2d и библиотекой расчета мод в многомодовых волокнах pyMMF.

gi.experiment и gi.emulation поддерживают вычисления на CPU с помощью numpy и на GPU с помощью cupy. При больших объёмах данных используется dask.array для предотвращения утечек памяти и ускорения вычислений.

Исследование выполнено за счет гранта Российского научного фонда (проект № 21-12-00155).

Описание публичных атрибутов классов GIEmulator и GIExpDataProcessor

Публичные атрибуты классов GIEmulator и GIExpDataProcessor делятся на 4 категории по размерности возвращаемых значений:

  1. Трехмерные массивы 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.
  2. Двухмерные массивы 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.
  3. Одномерные массивы numpy: timecorr_data: (self.settings.TCPOINTS if tcpoints is None else tcpoints), где tcpoints -- аргумент метода calculate_timecorr; xycorr_width: (2,).
  4. Числа типа float: g2,contrast,timecorr_width.

Возвращаемые значения имеют следующий смысл:

  1. ghost_data -- фантомное изображение объекта
  2. xycorr_data -- пространственная корреляционная функция интенсивности в референсном канале
  3. xycorr_width -- ширина пространственной корреляционной функции интенсивности в референсном канале по двум координатам
  4. xycorr_widths_data -- попиксельное значение ширины пространственной корреляционной функции интенсивности в референсном канале
  5. g2_data -- попиксельное значение второго нормированного момента интенсивности g2, характеризующего дисперсию данных
  6. g2 -- среднее значение g2 по изображению, либо в центре изображения, если xycorr_widths_data не рассчитывалась
  7. contrast_data -- попиксельный контраст фантомного изображения объекта
  8. contrast -- среднее значение контраста
  9. timecorr_data -- временная корреляционная функция изображений
  10. timecorr_width -- ширина временной корреляционной функции

Универсальность кода при использовании Numpy, Cupy, Dask

Классы 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 позволяет эмулировать процесс расчета фантомного изображения на основе экспериментальных спекл-картин. Для использования этой процедуры необходимо задать следующие аргументы конструктора:

  1. use_expdata=True
  2. expdata_dir="Путь к папке изображений абсолютный или относительно текущей папки".
  3. expdata_crop=(low_y, high_y, low_x, high_x) Координаты углов для обрезки изображения.
  4. img_prefix Постоянная часть имени файлов для фильтрации изображений в папке.

About

Code to reconstruct and emulate amplitude ghost images

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages