Source code for radionets.evaluation.blob_detection
from math import sqrt
import numpy as np
import torch
from skimage.feature import blob_log
[docs]
def calc_blobs(ifft_pred, ifft_truth):
if isinstance(ifft_pred, torch.Tensor):
ifft_pred = ifft_pred.numpy()
if isinstance(ifft_truth, torch.Tensor):
ifft_truth = ifft_truth.numpy()
tresh = ifft_truth.max() * 0.1
kwargs = {
"min_sigma": 1,
"max_sigma": 10,
"num_sigma": 100,
"threshold": tresh,
"overlap": 0.9,
}
blobs_log_pred = blob_log(ifft_pred, **kwargs)
blobs_log_truth = blob_log(ifft_truth, **kwargs)
# Compute radii in the 3rd column.
blobs_log_pred[:, 2] = blobs_log_pred[:, 2] * sqrt(2)
blobs_log_truth[:, 2] = blobs_log_truth[:, 2] * sqrt(2)
return blobs_log_pred, blobs_log_truth
[docs]
def crop_first_component(pred, truth, blob_truth):
"""Returns the cropped image with the first component of the
true image for both prediction and truth.
Parameters
----------
pred : ndarray
predicted source image
truth : ndarray
true source image
blob_truth : list
list with the coordiantes for the first component
Returns
-------
ndarray
cropped images
"""
y, x, r = blob_truth
x_coord, y_coord = corners(y, x, r)
flux_truth = truth[x_coord[0] : x_coord[1], y_coord[0] : y_coord[1]]
flux_pred = pred[x_coord[0] : x_coord[1], y_coord[0] : y_coord[1]]
return flux_pred, flux_truth
[docs]
def corners(x, y, r):
"""Generates the value range for cropping the first component out of
the images.
Parameters
----------
y : float
y coordiante
x : float
x coordinate
r : float
radius of the first component
Returns
-------
list
start and end point for the cropping
"""
r = int(np.round(r))
x = int(x)
y = int(y)
x_coord = [x - r, x + r + 1]
y_coord = [y - r, y + r + 1]
return x_coord, y_coord