Peter Frank Perroni, Msc, 2013

Point Spread Function Estimation of Solar Surface Images with a Cooperative Particle Swarm Optimization on GPUs


Author: Peter Frank Perroni

Supervisor: Daniel Weingaertner


We present a method for estimating the point spread function (PSF) of solar surface images acquired from ground telescopes and degraded by atmosphere. The estimation is done by retrieving the wavefront phase using a set of short exposures, the speckle reconstruction of the observed object and a PSF model parametrized by Zernike polynomials. Estimates of the wavefront phase and PSF are computed by minimizing an error function with a cooperative particle swarm optimization method, implemented in OpenCL to take advantage of highly parallel GPUs. A calibration method is presented to adjust the algorithm parameters for low cost results, providing solid estimations for either low frequency and high frequency images. Results show that the method has a fast convergence and is robust to noise degradation. Experiments run on a NVidia Tesla C2050 were able to compute 100 PSFs with 50 Zernike polynomials in ~36 minutes. The algorithm is also not affected by the number of Zernikes used, i.e., execution time increased only 17% when the number of Zernike coeffcients increased tenfold, from 50 to 500.



The complete dissertation is available for download.

Source Code

This method was implemented in C++ with OpenCL and OpenMP.

The source code can be downloaded here.

Before compiling the source code:

  • Download this Makefile and adjust the following parameters:
    • CFITSIO_HOME: The home path of CFITSIO.
    • VIENNACL_HOME: The home path of ViennaCL.
    • CUDA_HOME: The home path of CUDA (used by NVIDIA graphical cards). In the case the GPU is not CUDA, this parameter can point to the GPU include home path.
    • CUDA_SDK: The home path of CUDA SDK (used by NVIDIA graphical cards). In the case the GPU is not CUDA, this parameter must be adjusted accordingly.
  • Open the source file kippe.cpp and adjust the parameters wavelength, image scale and telescope diameter, according to the physical specifications of the telescope.


Code Documentation

The complete code documentation can be browsed here.

It is also available for download here.


Usage Instructions

                              SWARM OPTIMIZATION ON GPUS

Usage: kippe [-h] | [-testgpu] | [-listgpu] |
             [-rms_contrast -obj <image> -isz <image_width>] |
             [-sum -obj <image> -isz <image_width>] |
             [-obj <object> -isz <image_width> -fsz <fft_width> -z <num_zernikes>
               [[-img <image> -out <output_path> -s <num_swarms> -p <num_particles>
                 -c <num_cycles> -w <w_val> -c1 <c1_val> -c2 <c2_val> -reset <reset_factor>] |
               [-validation -nval <num_validations> -ranksz <rank_size> {-noise <noise-level>}] |
               [-gen_imgs <num_artificial_images>]]
              {-r <coef_range>} {-fixedrand} {-statistics} {-devices <device_id_to_use>}
              {-parallel <n_threads>}]
	-h            This help message.
	-testgpu      Test all GPUs available.
	-listgpu      Get the list of device ids available on the system.
	-sum          Sum a 3D FITS file and generate a 2D FITS file as output.
	-rms_contrast Calculate the image intensity.
	-obj          The path to the FITS file containing the Object.
	-img          The path to either a FITS file containing a 2D/3D Image
	              or the path to a folder containing multiple 2D Image files.
	-out          The output folder where the data will be saved.
	-isz          The widh of the input image.
	-fsz          The width of the FFT to be calculated.
	-z            The number of Zernikes to be calculated.
	-r            The range for the Zernike coefficients. If not provided, the value 2 will be used.
	-s            The number of swarms to be created.
	-p            The number of particles to be used on every swarm.
	-c            The number of cycles to run the CPSO.
	-w            The Inertia weight W.
	-c1           The Acceleration coefficient C1 (cognitive).
	-c2           The Acceleration coefficient C2 (social).
	-reset        The factor for re-initialization of inactive particles [0-1].
	-validation   If provided, the tool will run on Validation mode.
	-nval         The number of validations to be executed.
	-ranksz       The rank size to store the best and worst values.
	-noise        The Poisson noise level to be added to the artificial image: 0 (default), 1, .. 700.
	-gen_imgs     If provided, the tool will run on Generation Images mode.
	              Specify the number of artificial images to be generated in the 3D output FITS file.
	-fixedrand    If provided, the Random Number Generator seed will be fixed at program startup.
	-statistics   If provided, the statistics will be printed on standard output.
	-devices      The list of device ids (separated by comma and no space) that should be used.
	              To get the list of device ids, run the program with the option -listgpu.
	-parallel     Define the number of threads to be used. For basic image processing, it is also
	              the number of CPSO's to be executed in parallel. The default is 1 thread.



The images obtained by this method can be found here.