Source code for pynpoint.processing.filter
"""
Pipeline modules for spatial filtering of images.
"""
import math
import time
from typeguard import typechecked
from scipy.ndimage import gaussian_filter
from pynpoint.core.processing import ProcessingModule
from pynpoint.util.module import memory_frames, progress
[docs]class GaussianFilterModule(ProcessingModule):
"""
Pipeline module for applying a Gaussian filter.
"""
__author__ = 'Tomas Stolker'
@typechecked
def __init__(self,
name_in: str,
image_in_tag: str,
image_out_tag: str,
fwhm: float = 1.) -> None:
"""
Parameters
----------
name_in : str
Unique name of the module instance.
image_in_tag : tuple(str, str)
Tuple with two tags of the database entry that are read as input.
image_out_tag : str
Tag of the database entry with the subtracted images that are written as output.
fwhm : float
Full width at half maximum (arcsec) of the Gaussian kernel.
Returns
-------
NoneType
None
"""
super().__init__(name_in)
self.m_image_in_port = self.add_input_port(image_in_tag)
self.m_image_out_port = self.add_output_port(image_out_tag)
self.m_fwhm = fwhm
[docs] @typechecked
def run(self) -> None:
"""
Run method of the module. Applies a Gaussian filter to the spatial dimensions of the
images.
Returns
-------
NoneType
None
"""
memory = self._m_config_port.get_attribute('MEMORY')
pixscale = self._m_config_port.get_attribute('PIXSCALE')
nimages = self.m_image_in_port.get_shape()[0]
frames = memory_frames(memory, nimages)
sigma = (self.m_fwhm/pixscale) / (2.*math.sqrt(2.*math.log(2.))) # [pix]
start_time = time.time()
for i, _ in enumerate(frames[:-1]):
progress(i, len(frames[:-1]), 'Applying Gaussian filter...', start_time)
images = self.m_image_in_port[frames[i]:frames[i+1], ]
im_filter = gaussian_filter(images, (0, sigma, sigma))
self.m_image_out_port.append(im_filter, data_dim=3)
history = f'fwhm [arcsec] = {self.m_fwhm}'
self.m_image_out_port.add_history('GaussianFilterModule', history)
self.m_image_out_port.copy_attributes(self.m_image_in_port)
self.m_image_out_port.close_port()