From b2686ad22115cc95ef0e3f3f85acdfcc4315a826 Mon Sep 17 00:00:00 2001 From: Benjamin Midtvedt Date: Thu, 22 Jul 2021 22:10:57 +0200 Subject: [PATCH] Fixed edge case of incorrect positioning of scatterer --- deeptrack/optics.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/deeptrack/optics.py b/deeptrack/optics.py index 249fd24c9..1e467ea3c 100644 --- a/deeptrack/optics.py +++ b/deeptrack/optics.py @@ -20,6 +20,7 @@ from .image import Image, pad_image_to_fft from .types import ArrayLike, PropertyLike +import scipy.ndimage from scipy.ndimage import convolve @@ -555,7 +556,7 @@ def get(self, illuminated_volume, limits, fields, **kwargs): K = 2 * np.pi / kwargs["wavelength"] - field_z = [_get_position(field, return_z=True)[-1] for field in fields] + field_z = [field.get_property("z") for field in fields] field_offsets = [field.get_property("offset_z", default=0) for field in fields] z = z_limits[1] @@ -687,12 +688,13 @@ def _get_position(image, mode="corner", return_z=False): # Extracts the position of the upper left corner of a scatterer num_outputs = 2 + return_z - if mode == "corner": - # Probably unecessarily complicated expression - shift = ( - np.ceil((np.array(image.shape) - 1) / 2) - - (1 - np.mod(image.shape, 2)) * 0.5 - ) + if mode == "corner" and image.size > 0: + + shift = scipy.ndimage.measurements.center_of_mass(np.abs(np.array(image))) + + if np.isnan(shift).any(): + shift = np.array(image.shape) / 2 + else: shift = np.zeros((num_outputs))